我想指定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>
答案 0 :(得分:23)
XML Schema中有一个Choice Indicator,它允许您获取其中一个包含的元素,但不能包含两个或更多元素。如果你想要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>
答案 1 :(得分:4)
那么,你想要fieldname
还是freetext
而不是两者?或两者兼而有之?然后dbtablename
可选?
这是1或2个元素:
<xs:choice minOccurs="1" maxOccurs="2">
<xs:element name="fieldname" type="xs:string"/>
<xs:element name="freetext" type="xs:string"/>
<xs:element name="dbtablename" type="xs:string"/>
</xs:choice>
这是你想要的吗?或者您希望dbtablename
分开吗?