xsd 中的递归
Recursion in xsd
如何使用预定义的 complexType 在 xsd 模式中进行递归,如下所示:
<xs:complexType name="style">
<xs:attribute name="name" type="xs:string" use="optional" />
<xs:attribute name="color" type="xs:string" use="optional" />
</xs:complexType>
<xs:complexType name="children">
<xs:sequence>
<xs:element name="div" type="style">
<xs:complexType>
<xs:sequence>
<xs:element ref="children" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
如果您希望以下 XML 有效,
<?xml version="1.1" encoding="utf-8" ?>
<children xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="try.xsd">
<div name="John" color="red">
<children>
<div name="Mary" color="white"/>
<div name="Fred" color="blue"/>
</children>
</div>
</children>
那么这个递归 XSD 将符合要求:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="children">
<xs:complexType>
<xs:sequence>
<xs:element name="div" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="children" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="optional" />
<xs:attribute name="color" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
如何使用预定义的 complexType 在 xsd 模式中进行递归,如下所示:
<xs:complexType name="style">
<xs:attribute name="name" type="xs:string" use="optional" />
<xs:attribute name="color" type="xs:string" use="optional" />
</xs:complexType>
<xs:complexType name="children">
<xs:sequence>
<xs:element name="div" type="style">
<xs:complexType>
<xs:sequence>
<xs:element ref="children" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
如果您希望以下 XML 有效,
<?xml version="1.1" encoding="utf-8" ?>
<children xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="try.xsd">
<div name="John" color="red">
<children>
<div name="Mary" color="white"/>
<div name="Fred" color="blue"/>
</children>
</div>
</children>
那么这个递归 XSD 将符合要求:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="children">
<xs:complexType>
<xs:sequence>
<xs:element name="div" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="children" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="optional" />
<xs:attribute name="color" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>