是否有更简洁的方式来编写 XSD 文档?我发现当有很多属性和扩展元素时,代码很难阅读。 这是我的 XSD 示例:
我添加了一些属性限制。
?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="footballGame">
<xs:complexType>
<xs:sequence>
<xs:element name="game">
<xs:complexType>
<xs:sequence>
<xs:element name="team" minOccurs="2" maxOccurs="2">
<xs:complexType>
<xs:sequence>
<xs:element name="teamName" type="xs:string"/>
<xs:element name="goal" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="playerName" type="xs:string"/>
<xs:element name="goalMinute">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="2"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="penalty" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="yes"/>
<xs:enumeration value="no"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="card" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="playerNmae" type="xs:string"/>
<xs:element name="cardType">
<xs:complexType>
<xs:attribute name="card">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="yellow"/>
<xs:enumeration value="red"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="cardMinute" type="xs:positiveInteger"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="homeOrAway" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="home"/>
<xs:enumeration value="away"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我尝试将属性放在代码末尾,但不知道如何引用它们。
您可以分别定义元素和属性的类型,然后声明元素和属性属于该类型:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="footballGame" type="footballGame" />
<xs:complexType name="footballGame">
<xs:sequence>
<xs:element type="game" name="game" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="game">
<xs:sequence>
<xs:element type="team" name="team" minOccurs="2" maxOccurs="2"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="team">
<xs:sequence>
<xs:element name="teamName" type="xs:string"/>
<xs:element type="goal" name="goal" minOccurs="0" maxOccurs="unbounded" />
<xs:element type="card" name="card" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute type="homeOrAway" name="homeOrAway" use="required" />
</xs:complexType>
<xs:simpleType name="homeOrAway">
<xs:restriction base="xs:string">
<xs:enumeration value="home"/>
<xs:enumeration value="away"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="goal">
<xs:sequence>
<xs:element name="playerName" type="xs:string"/>
<xs:element type="minute" name="goalMinute" />
</xs:sequence>
<xs:attribute type="penalty" name="penalty" use="required"/>
</xs:complexType>
<xs:simpleType name="minute">
<xs:restriction base="xs:string">
<xs:length value="2"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="penalty">
<xs:restriction base="xs:string">
<xs:enumeration value="yes"/>
<xs:enumeration value="no"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="card">
<xs:sequence>
<xs:element name="playerNmae" type="xs:string"/>
<xs:element name="cardType">
<xs:complexType>
<xs:attribute name="card">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="yellow"/>
<xs:enumeration value="red"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="cardMinute" type="xs:positiveInteger"/>
</xs:sequence>
</xs:complexType>
</xs:schema>