xs:sequence表示元素应该按顺序排列。假设我有xsd,如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="personinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
以下哪两个XML是正确的?
<?xml version="1.0" encoding="UTF-8"?>
<personinfo>
<firstname>Abc</firstname>
<firstname>Xyz</firstname>
<country>CountryOfAbc</country>
<country>CountryOfXyz</country>
</personinfo>
或
<?xml version="1.0" encoding="UTF-8"?>
<personinfo>
<firstname>Abc</firstname>
<country>CountryOfAbc</country>
<firstname>Xyz</firstname>
<country>CountryOfXyz</country>
</personinfo>
答案 0 :(得分:2)
都不是。
符合架构的是......
<?xml version="1.0" encoding="UTF-8"?>
<personinfo>
<firstname>Abc</firstname>
<country>CountryOfAbc</<country>
</personinfo>
... 或:
<?xml version="1.0" encoding="UTF-8"?>
<personinfo>
<firstname>Xyz</firstname>
<country>CountryOfXyz</country>
</personinfo>
如果您在本地没有XML文档,则可以使用online XML validator根据XSD架构验证XML文档。
如果你真正想要的是一个或多个personinfo
元素连续 - 例如......
<?xml version="1.0" encoding="UTF-8"?>
<people>
<personinfo>
<firstname>Abc</firstname>
<country>CountryOfAbc</country>
</personinfo>
<personinfo>
<firstname>Xyz</firstname>
<country>CountryOfXyz</country>
</personinfo>
</people>
...尝试这样的架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="people">
<xs:complexType>
<xs:sequence>
<xs:element name="personinfo" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
否则请参阅@kjhughes的答案,了解描述您在问题中提供的两个示例文档的模式。
答案 1 :(得分:2)
这两个XML文档实例都不会对该XSD有效。
此XML文档实例对您的XSD有效:
<personinfo>
<firstname>Abc</firstname>
<country>CountryOfAbc</<country>
</personinfo>
或者,您可以通过使用maxOccurs
occurrence constraint来调整XSD以使您给定的两个XML文档实例有效。
第一个例子:
<xs:element name="personinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string" maxOccurs="2"/>
<xs:element name="country" type="xs:string" maxOccurs="2"/>
</xs:sequence>
</xs:complexType>
</xs:element>
第二个例子:
<xs:element name="personinfo">
<xs:complexType>
<xs:sequence maxOccurs="2">
<xs:element name="firstname" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
答案 2 :(得分:2)
就个人而言,我更喜欢这样:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="personinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="record" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string" />
<xs:element name="country" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
因此XML将是:
<personinfo>
<record>
<firstname>Abc</firstname>
<country>CountryOfAbc</country>
</record>
<record>
<firstname>Xyz</firstname>
<country>CountryOfXyz</country>
</record>
</personinfo>