我不确定这是否可以使用
XML / XSD,并且没有太多的运气搜索它.
您是否可以指定XSD,以便在编写XML时,您可以拥有一个必须引用另一个XML元素中包含的值之一的元素?
例如,如果您有这个XML:
<car>Audi</car> <car>Ford</car> <car>Honda</car> <person> <drives>Audi</drives> </person>
如何为驱动器指定XSD,使其必须是为汽车输入的值之一?
解决方法
使用XSD 1.1,您可以使用
assertions.
Assertion components constrain the existence and values of related
elements and attributes.
您可以使用XPath 2.0表达式在断言中执行验证/测试.
此示例模式具有/ doc元素的断言,该断言确保/ doc / person / drives值等于其中一个/ doc / car元素:
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.1" elementFormDefault="qualified"> <xs:element name="car" type="xs:string" /> <xs:element name="drives" type="xs:string" /> <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element ref="drives"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="doc"> <xs:complexType> <xs:sequence> <xs:element ref="car" maxOccurs="unbounded"/> <xs:element ref="person"/> </xs:sequence> <xs:assert test="person/drives = car"/> </xs:complexType> </xs:element> </xs:schema>