我正在为我的XML验证决赛编写一个模式,并最终得到了所有(几乎)工作。但现在我在XML中遇到了最奇怪的错误。我将首先展示我的架构,因为问题应该在哪里,但它没有给我带来任何错误。
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:os="OrdersSchema"
targetNamespace="OrdersSchema"
elementFormDefault="unqualified"
attributeFormDefault="qualified">
<element name="orders" type="os:orders"/>
<complexType name="orders">
<sequence>
<element name="order" type="os:order" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="order">
<sequence>
<element name="deliveryAddress">
<complexType>
<sequence>
<element name='line1' type='os:lineType'/>
<element name='line2' type='os:lineType'/>
<element name='line3' type='os:lineType'/>
<element name='line4' type='os:lineType' minOccurs='0'/>
</sequence>
<attribute name="orderId" type="string" use="required" >
</attribute>
<attribute name="type" type="os:typeType" use="required"/>
</complexType>
<unique name="uniqueOrderIdPerOrder">
<selector xpath="os:order"/>
<field xpath="orderId"/>
</unique>
</element>
<element name='items'>
<complexType>
<attribute name='productId' type='os:productIdType'/>
<attribute name='quantity'>
<simpleType>
<restriction base='positiveInteger'>
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name='note' minOccurs='0' type='string'/>
</sequence>
</complexType>
<simpleType name='lineType'>
<restriction base='string'>
<minLength value='1'/>
</restriction>
</simpleType>
<simpleType name='typeType'>
<restriction base='string'>
<enumeration value='standard'/>
<enumeration value='express'/>
</restriction>
</simpleType>
<simpleType name='productIdType'>
<restriction base='string'>
<pattern value='(?i)p[-\s](150|1[0-4][0-9]|[[1-9][0-9]|[1-9])\.[a-z][a-z][a-z][a-z][a-z][a-z]'/>
<pattern value='A...+[$XYZ]\b'/>
</restriction>
</simpleType>
</schema>
现在,我的架构完全没有错误,但是当我将XML文件链接到它时,我收到一条错误消息:命名空间'OrdersSchema'中的元素'orders'在命名空间'OrdersSchema'中有无效的子元素'order' ”。预期可能元素列表:'订单'。
这是一个应该验证的代码,如果有人想尝试的话:
<?xml version="1.0" encoding="utf-8" ?>
<os:orders xmlns:os="OrdersSchema">
<os:order orderId="ord0001" type="standard">
<deliveryAddress>
<line1>5, Elmstreet</line1>
<line2>90210 Beverly Hills</line2>
<line3>California</line3>
</deliveryAddress>
<items>
<item productId="P 150.aabaac" quantity="5" />
</items>
<note>Deliver after 5 pm.</note>
</os:order>
<os:order orderId="ord0003" type="express">
<deliveryAddress>
<line1>Voskenslaan 30</line1>
<line2>BE9000 Gent</line2>
<line3>Oost-Vlaanderen</line3>
<line4>Belgium</line4>
</deliveryAddress>
<items>
<item productId="A3546sdfsdf6546sdf654Z" quantity="10" />
<item productId="p 149.SLKDOZ" quantity="5" />
<item productId="P 100.xcvZEr" quantity="15" />
</items>
</os:order>
<os:order orderId="ord0002" type="express">
<deliveryAddress>
<line1>Voskenslaan 32</line1>
<line2>BE9000 Gent</line2>
<line3>Oost-Vlaanderen</line3>
<line4>Belgium</line4>
</deliveryAddress>
<items>
<item productId="P-99.ruioze" quantity="15" />
<item productId="A123qze46548X" quantity="50" />
<item productId="P 1.sqmfze" quantity="1" />
<item productId="AoknY" quantity="20" />
</items>
<note>This is <b>very urgent</b> !</note>
</os:order>
</os:orders>
答案 0 :(得分:8)
您使用
elementFormDefault="unqualified"
attributeFormDefault="qualified"
非常不寻常,可能是麻烦的根源。除非你真的想做一些与众不同的事情,否则这些应该是相反的。
答案 1 :(得分:2)
The element 'orders' in namespace 'OrdersSchema'
has invalid child element 'order' in namespace 'OrdersSchema'.
List of possible elements expected: 'order'.
换句话说,它认为您的架构告诉解析器期望一个非命名空间的<order>
子元素,并且您在实例文档中提供了一个命名空间<os:order>
。