我想指定 fieldname
或 freetext
必须始终存在于适用于此 XSD 的 XML 文件中。有没有办法做到这一点?
<xs:complexType name="tSome">
<xs:sequence>
<!-- either one of the two below has to be present. -->
<xs:element name="fieldname" type="xs:string" />
<xs:element name="freetext" type="xs:string" />
<!-- this one below must always be present -->
<xs:element name="dbtablename" type="xs:string" />
</xs:sequence>
</xs:complexType>
最佳答案
有一个Choice Indicator在 XML Schema 中,它允许您使用一个包含的元素,但不能使用两个或更多。如果你想要 3 中的任何 2,我建议做这样的事情:
<xs:choice>
<xs:element name="fieldname" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="freetext" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="dbtablename" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:choice>
<xs:choice>
<xs:element name="fieldname" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="freetext" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="dbtablename" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:choice>
(也许
maxOccurs
会阻止您选择同一个元素两次。)如果那不起作用,我什么也不会想到。
已编辑 : 我第一次没有正确理解这个问题。如果你想要
dbtablename
始终与 fieldname
中的任何一个一起在场或 freetext
,那么这就是答案:<xs:complexType name="tSome">
<xs:sequence>
<xs:choice>
<xs:element name="fieldname" type="xs:string" />
<xs:element name="freetext" type="xs:string" />
</xs:choice>
<xs:element name="dbtablename" type="xs:string" />
</xs:sequence>
</xs:complexType>
关于xsd - 如何在 XML 模式中指定必须存在两个字段之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2523750/