假设我有以下 XML 文档:
<root>
<genres>
<genre name="comedy" />
<genre name="academic" />
</genres>
<authors>
<author name="Thomson">
<writings>
<writing genre="academic">The text book</writing>
<writing genre="comedy">The worst comedy</writing>
<writings>
</author>
</authors>
<readers>
<reader name="Phil">
<read writenBy="Thomson">The text book</read>
</reader>
<reader name="John" />
</readers>
</root>
如您所见,“阅读器”元素可能没有“阅读”子元素。
但是,我希望验证过程确保没有以下条目:
<reader name="Paul">
<read writtenBy="Thomson">A writing the author never wrote</read>
</reader>
我能做的是通过使用键和 keyrefs 限制属性可以根据先前定义的属性获取的值(请参阅接受的答案)。基于此,我可以确保“writtenBy”属性实际上是指作者的姓名,或者写作的流派属性来自先前定义的流派。
我知道您可以在 XSD 文档上对枚举进行硬编码(请参阅接受的答案)。
此外,您可以使用断言(在 XSD 1.1 中)根据 XML 中包含的信息进行更灵活的枚举(请参阅接受的答案)。
但我不能使用这些方法,因为它们是硬编码的。有没有办法对元素值进行类似的检查,就像我目前正在使用属性值一样?