限值看重其他元素XSD
考虑以下类型:限值看重其他元素XSD
<xsd:complexType name="Options">
<xsd:sequence>
<xsd:element name="option" maxOccurs="unbounded">
<xsd:complexType>
<xsd:all>
<xsd:element name="id" type="xsd:integer" />
<xsd:element name="label" type="xsd:string" />
<xsd:element name="value" type="xsd:string" minOccurs="0" />
<xsd:element name="dependency" type="xsd:integer" minOccurs="0" />
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
我怎样才能表达一个option
的dependency
必须存在为不同option
的id
?
我想我应该使用xsd:key
和xsd:keyref
,但无法理解如何使用它们。
XSD 1.0不支持此操作。 XSD 1.1支持Conditional Types and assertions,这可能允许您执行此操作。对于xsd 1.0,您可以使用Schematron来实现此目的。
约束条件只能在元素的上下文中表达。
<?xml version="1.0" encoding="utf-8" ?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="Options">
<xsd:sequence>
<xsd:element name="option" maxOccurs="unbounded">
<xsd:complexType>
<xsd:all>
<xsd:element name="id" type="xsd:integer"/>
<xsd:element name="label" type="xsd:string"/>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
<xsd:element name="dependency" type="xsd:integer" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="Options" type="Options">
<xsd:key name="PK">
<xsd:selector xpath="option"/>
<xsd:field xpath="id"/>
</xsd:key>
<xsd:keyref name="FK" refer="PK">
<xsd:selector xpath="option"/>
<xsd:field xpath="dependency"/>
</xsd:keyref>
</xsd:element>
</xsd:schema>
如果你想有这种类型的多个实例引用,与你指定的限制一起,那么你就必须始终定义一个全局元素,然后参考该元素你的具体情况。
我想提一下,理解你在你的问题中使用“不同”这个词是非常重要的。如果你确实是这个意思,那么上面的内容并不能给你。
因此,给定的元素'选项'和'选项'key'和'keyref'必须定义为“选项”,父母,而不是“选项”,孩子? – Svish
@Svish,是的,你必须在选项级别。这是从规范:'{选择器}指定一个有限的XPath([XPath])表达式相对于被声明的元素的实例。这必须标识约束条件适用的从属元素的节点集合(即包含在声明的元素中)。“你基本上试图限制'option'元素,这意味着你必须向上移动一层。 –
通过“不同的选项”,你的意思是你也想强制你不能拥有自引用的选项? –
@PetruGardea这真的很好,但首先我只是在这个问题的参考部分:) – Svish