问题
I am writing a schema for my XML validation final, and finally got everything (just about) working. But now I'm getting the strangest error in my XML. I'll start by showing my schema since that's where the problem should be located yet it gives me no errors.
<?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>
Now, my schema gives no errors at all, but when I link my XML file to it, I get an error saying: The element 'orders' in namespace 'OrdersSchema' has invalid child element 'order' in namespace 'OrdersSchema'. List of possible elements expected: 'order'.
Here's a code that should validate, if anyone wants to try it out:
<?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>
回答1:
The element 'orders' in namespace 'OrdersSchema'
has invalid child element 'order' in namespace 'OrdersSchema'.
List of possible elements expected: 'order'.
In other words, it thinks your schema told the parser to expect a non-namespaced <order>
child element, and you provided a namespaced <os:order>
in the instance document.
http://www.w3.org/TR/xmlschema-0/#NS
回答2:
Your use of
elementFormDefault="unqualified"
attributeFormDefault="qualified"
is highly unusual, and is probably the source of the trouble. Unless you really want to do something unusual, these should be the other way around.
来源:https://stackoverflow.com/questions/21009632/the-element-x-in-namespace-xschema-has-invalid-child-element-y-in-namespac