在我的 XML 文档中,我有两个同名的标签,都称为 item,我现在已经为此文档创建了一个 XML 架构,考虑到我有两个同名的标签,我的 XML 架构准确吗?
XML文档
<?xml version="1.0" encoding="UTF-8"?>
<shiporder orderid="889923" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item> <!--First Item Tag-->
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item> <!--Second Item Tag-->
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
XML模式
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="shiporder">
<xs:complexType >
<xs:sequence>
<xs:element name="orderperson"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
` <xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="item"> <!--Only 1 item tag defined in the schema-->
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:stri+ng"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:integer"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
为了匹配您的 XML 实例,您应该在 XML 架构中进行一些更改。
(我假设你想声明item
并不是items
.)
首先,你定义item
作为子元素shipto
当我相信(从你的 XML 实例和标签的含义)它可能应该处于同一级别:
<xs:element name="shiporder">
<xs:complexType >
<xs:sequence>
<xs:element name="orderperson"/>
<xs:element name="shipto">
...
</xs:element>
<xs:element name="item">
...
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
允许多个item
你可以声明maxOccurs="unbounded"
或定义一个下限:
<xs:element name="item" maxOccurs="unbounded">
您还需要在中声明该属性shiporder
。应该在complexType
定义:
<xs:element name="shiporder">
<xs:complexType >
<xs:sequence>
...
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" />
</xs:complexType>
</xs:element>
最后,你必须决定是否note
是可选的还是非可选的。如果是可选的,则声明
<xs:element name="note" type="xs:string" minOccurs="0"/>
因为默认是1
。如果它不是可选的,那么您必须将其包含在 XML 实例中,否则它将无法验证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)