我有以下架构代码段:
<xs:element name="JobRecord" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="JobControlCode">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="40" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element minOccurs="1" maxOccurs="1" name="JobRecordStatusDate">
<xs:simpleType>
<xs:restriction base="xs:dateTime">
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
JobRecord节点是可选的,但如果它存在,我需要要求JobControlCode&amp; JobRecordStatusDate存在。上面的XSD没有实现这一点。感谢您对此提供任何帮助。
克里斯
答案 0 :(得分:0)
如果xs:元素为minOccurs="0"
及其maxOccurs="1"
。
如果强制使用其他xs:元素(如果使用上述内容)(作为xml文件中的标记),一种可能的方法是将它们设置为所述可选元素的子元素并设置它们自己的min-并且maxOccurs都为1。 一个例子:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="myRootElement">
<xs:complexType>
<xs:sequence>
<xs:element name="myOptionalElem" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="myFirstRequiredEl" type="xs:string"/>
<xs:element name="mySecondRequiredEl" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
正如您在本示例中所看到的,可选元素是名为myOptionalElem的元素。
它的minOccurs属性被我设置为0次。
您可能已经注意到我没有写下maxOccurs="1"
。那是因为没有必要注意到这一点。
如果程序员没有以不同的方式定义,则每个xs:元素都隐式地显示1
的最小和最大出现次数。
这意味着xs:element myOptionalElem确实是可选的,因为它可能不会出现一次。在这种情况下,它的子元素也不会出现(在相应的xml文件中作为xml标记)。
如果xs:element myOptionalElem出现(作为xml中的标记),其子元素也必须出现在xml文件中,因为默认情况下它们的最小值和最大值都是1
!
您可以在w3schools的xml架构教程中找到另一个示例: http://www.w3schools.com/schema/schema_example.asp
希望我能成为healp,冷淡的