命名空间“xSchema”中的“x”元素在命名空间“xSchema”中有无效的子元素“y”。可能的元素列表:“y”

时间:2021-08-06 17:17:35

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验证期末编写一个模式,并最终使所有(几乎)工作。但是现在我的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>

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'.

现在,我的模式没有任何错误,但是当我将XML文件链接到它时,我得到一个错误消息:命名空间“OrdersSchema”中的元素“orders”在命名空间“OrdersSchema”中有无效的子元素“order”。可能的元素列表:“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>

2 个解决方案

#1


2  

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

http://www.w3.org/TR/xmlschema-0/ NS

#2


6  

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.

非常不寻常,可能是麻烦的根源。除非你真的想做一些不寻常的事情,否则这些事情应该是相反的。

#1


2  

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

http://www.w3.org/TR/xmlschema-0/ NS

#2


6  

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.

非常不寻常,可能是麻烦的根源。除非你真的想做一些不寻常的事情,否则这些事情应该是相反的。