如果XML文档中有两个具有相同名称的标记,是否必须为每个标记使用两个不同的模式,或者可以使用1个模式,它是否会验证?下面是一个使用2个模式的示例,但我只使用了一个模式,哪一个是正确的?
使用2个架构的XML文档
<?xml version="1.0" encoding="ISO-8859-1"?>
<receipt xmlns: cu="http://www.mydomain.com/customer"
xmlns: pr="http://www.mydomain.com/product"> <!--two schema's being referenced-->
<cu:customer> <!--Using Schema 1-->
<cu:name> Michael Johnson </cu:name>
<cu:areaCode> BH2 3XY </cu:areaCode>
</cu:customer>
<products>
<pr:product> <!--Using Schema 2-->
<pr:name>RAM</pr:name>
<pr:quantity>100</pr:quantity>
</pr:product>
</products>
</receipt>
我的XML文档使用1个架构(有2个同名的标签,称为项目)
<?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>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>
XML Schema:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder">
<xs:complexType >
<xs:sequence>
<xs:element type="xs:string" name="orderperson"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
<xs:element type="xs:string" name="address"/>
<xs:element type="xs:string" name="city"/>
<xs:element type="xs:string" name="country"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/> <!--optional-->
<xs:element name="quantity" type="xs:integer"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:int" /> <!--must be required-->
</xs:complexType>
</xs:element>
答案 0 :(得分:0)
您可以在第三个模式中定义项目,然后将其包含在其他模式中。
见Can I have one XML Schema (XSD) include another XML-Schema?。并http://www.w3schools.com/schema/el_include.asp
答案 1 :(得分:0)
第一个xml使用两个不同的模式,因此使用两个不同的名称空间。 是的,您可以从不同的模式派生xml
第二个xml有两个元素并没有错。可重复元素是如何表示对象列表或类似的东西,在这种情况下是项目列表。
<item> is defined to be occurring more than once as per the schema.
maxOccurs="unbounded" so it is valid xml as per the schema.
Is that not true?
<xs:element name="item" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/> <!--optional-->
<xs:element name="quantity" type="xs:integer"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>