如果我有一个类似这样的XML文档:
<Choices name="Numbers">
<Choice>1</Choice>
<Choice>2</Choice>
<Choice>3</Choice>
</Choices>
<Choices name="Letters">
<Choice>A</Choice>
<Choice>B</Choice>
<Choice>C</Choice>
</Choices>
<Selected>
<Selection category="Letters">B</Selection>
</Selected>
我想在XSD中描述一个约束,它确保选择标签数据仅引用类别中的选择&#34; Letters&#34;。这是可行的吗?只要您可以在任何类别中选择任何类型的数据,但使用密钥相当容易,但是我很难理解如何限制它可以引用的类别选择。
答案 0 :(得分:2)
如果您使用的是XSD 1.1,则可以使用断言对其进行测试。例如:
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element ref="Choices" maxOccurs="unbounded"/>
<xs:element ref="Selected"/>
</xs:sequence>
<xs:assert test="every $selection in Selected/Selection satisfies
exists(Choices[@name=$selection/@category and exists(Choice[text()=$selection])])"/>
</xs:complexType>
</xs:element>
我的示例假设您可以在选择中包含多个不相关的选择节点。您可以使用 xs:unique 和/或其他断言来测试其他内容(例如: Choices 名称是唯一的, Selection 类别是唯一的,每个选择有选择等)