繁体   English   中英

类型而不是元素中的XML模式唯一约束

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM