[英]XML schema unique constraint in a type rather than an element
有没有办法在XML Schema 1.0中将唯一约束置于xs:complexType
而不是xs:element
? 我的具体意思是,我想创建一个唯一的键列表类型,该类型可以在模式的许多位置轻松重用。
像这样的东西会很棒:
<xs:complexType name="t_MyReusableUniqueKeysList">
<xs:sequence>
<xs:element name="GenericElementOfTheList" type="t_GenericElementOfTheList" minOccurs="1" maxOccurs="unbounded"/>
<xs:unique name="uniqueCheck">
<xs:selector xpath="GenericElementOfTheList"/>
<xs:field xpath="GenericElementOfTheList_Key"/>
</xs:unique>
</xs:sequence>
</xs:complexType>
但似乎这是不正确的。
编辑/说明:我意识到我可以使用xs:element
封装上面的代码以使其起作用,但是作为XML Schema新手之一,我的天真理解是我无法再在其他Schema中重用它。 (重用=将任何element
声明为t_MyReusableUniqueKeysList
)?
不,您不能将XSD中的身份约束与类型相关联。 在XSD中,如在SQL中一样,引用完整性不同于类型系统。
[后记]。 上一段的第二句似乎需要拆箱。
在SQL中,表中的每一列都具有一个数据类型:整数,十进制数(在小数点的左边有6位数字,在小数点的左边有2位数字),varchar 80,日期,长度为8的定长字符串等,等等。对于每个列,表创建者还可以指定是否允许该列为NULL。 并且每一列可以是键,键的一部分,另一个表中对键的引用或此类引用的一部分。 NOT NULL,PRIMARY KEY,SECONDARY KEY和FOREIGN KEY ...引用...约束都与类型系统正交:分配给列的类型都不隐含或可以隐含它们,并且都不包含其中的一个需要特殊的类型。 参照完整性约束在逻辑上附加到列(或列序列),而不是类型。 从这种意义上说,SQL的参照完整性约束与类型系统不同。
(请注意,我在这里将重点放在SQL的关系核心上,而忽略了这些年来所做的各种添加和扩展。我不知道SQL 99及以后版本中的各种添加是否以这种方式运行。)
类似地,在XSD中,身份约束(键,唯一和键引用)与类型系统正交,因为要使其成为可能。 XSD类型具有(或可以具有)名称,并且没有任何类型名称表示存在或不存在任何身份约束(传统ID和IDREF类型除外)。 相反,身份约束可以与任何类型一起使用。 XSD的身份约束附加到元素,而不附加到类型。 从思想上和从实现的角度来看,SQL的模型在这里都很重要(因为负责工作组中的几个主要SQL供应商正计划在其SQL实现中支持XSD -实际上,现在大多数主要的SQL实现都这样做)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.