我在为此XML构建架构时遇到问题:
<record>
<field index="1">data</field>
<field index="2">data</field>
<field index="3">data</field>
<field index="4">data</field>
<field index="5">data</field>
<field index="6">data</field>
<group index="7">
<member index="1">data</member>
<member index="2">data</member>
</group>
<field index="8">data</field>
<field index="9">data</field>
<group index="10">
<member index="1">data</member>
</group>
<field index="11">data</field>
<field index="12">data</field>
<field index="13">data</field>
<field index="14">data</field>
<field index="15">data</field>
<field index="16">data</field>
<field index="17">data</field>
</record>
问题在于,我不知道为“field”元素构建模式,我有许多具有相同名称“field”但具有不同属性“index”的元素。
此外,我在为标记组内的多个值构建架构时遇到问题。
答案 0 :(得分:0)
欢迎,对于field
,您可以按照以下方式定义:
<xsd:element name="field" type="FieldType"/>
<xsd:complexType name="FieldType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="index" type="xsd:integer" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
对于group
,您必须使用sequence
:
<xsd:element name="group" type="GroupType" />
<xsd:complexType name="GroupType">
<xsd:sequence>
<xsd:element name="member" type="MemberType" minOccurs="1" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="index" type="xsd:integer" />
</xsd:complexType>
我认为每个member
必须至少有一个group
。此外,您应该定义MemberType
。我省略了它,因为它几乎与上面提到的FieldType
相同。
答案 1 :(得分:0)
您刚刚发现为什么这对于架构来说是一个糟糕的设计。无法将类型与索引相关联。您应该具有单独的元素名称,具有单独的类型。例如:
<person xsi:noNamespaceSchemaLocation="Person.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<name>
<first>John</first>
<last>Saunders</last>
</name>
<dob>1967-08-13</dob>
<email>john.saunders@guess.com</email>
</person>
可能来自以下架构:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="person">
<xs:annotation>
<xs:documentation>A person</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="name">
<xs:complexType>
<xs:sequence>
<xs:element name="first" type="xs:string"/>
<xs:element name="last" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="dob" type="xs:date"/>
<xs:element name="email">
<xs:simpleType>
<xs:restriction base="xs:token"/>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这种事情可以将特定元素限制为特定数据类型等等。你所拥有的东西不能限制特定元素的类型,因为它们都需要支持任何数据类型。