XSD 如何在可选元素中要求一个元素
XSD How to require an element inside an optional element
我有以下架构片段:
<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 和 JobRecordStatusDate。上面的 XSD 没有实现这一点。感谢您对此的任何帮助。
克里斯
一个 xs:element 是可选的,如果它的 minOccurs="0"
和它的 maxOccurs="1"
。
如果使用上述内容(作为 xml 文件中的标记),如果您强制使用其他 xs:elements,一种可能的方法是使它们成为上述内容的子元素可选元素并将它们自己的 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:element 都隐含地出现了 1
的最小和最大出现次数。
这意味着 xs:element myOptionalElem 确实是可选的,因为它可能不会出现一次。在那种情况下,它的子元素也不能出现(在相应的 xml 文件中作为 xml 标签)。
如果 xs:element myOptionalElem 确实出现(作为 xml 中的标记),它的子元素也必须出现在 xml 文件中,因为它们的最小值和最大值出现默认都是1
!
您可以在 w3schools 的 xml 架构教程中找到另一个示例:
http://www.w3schools.com/schema/schema_example.asp
希望我能痊愈,冷若冰霜
我有以下架构片段:
<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 和 JobRecordStatusDate。上面的 XSD 没有实现这一点。感谢您对此的任何帮助。
克里斯
一个 xs:element 是可选的,如果它的 minOccurs="0"
和它的 maxOccurs="1"
。
如果使用上述内容(作为 xml 文件中的标记),如果您强制使用其他 xs:elements,一种可能的方法是使它们成为上述内容的子元素可选元素并将它们自己的 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:element 都隐含地出现了 1
的最小和最大出现次数。
这意味着 xs:element myOptionalElem 确实是可选的,因为它可能不会出现一次。在那种情况下,它的子元素也不能出现(在相应的 xml 文件中作为 xml 标签)。
如果 xs:element myOptionalElem 确实出现(作为 xml 中的标记),它的子元素也必须出现在 xml 文件中,因为它们的最小值和最大值出现默认都是1
!
您可以在 w3schools 的 xml 架构教程中找到另一个示例: http://www.w3schools.com/schema/schema_example.asp
希望我能痊愈,冷若冰霜