web-dev-qa-db-ja.com

名前空間「xSchema」の要素「x」に、名前空間「xSchema」の無効な子要素「y」があります。予想される可能な要素のリスト: "y"

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」があります。予想される可能な要素のリスト: '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>
11
user2843457
The element 'orders' in namespace 'OrdersSchema' 
has invalid child element 'order' in namespace 'OrdersSchema'. 
List of possible elements expected: 'order'. 

つまり、スキーマがパーサーに名前空間のない<order>子要素を予期するように指示し、インスタンスドキュメントに名前空間の<os:order>を指定したと見なされます。

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

2
keshlam

あなたの使用

elementFormDefault="unqualified"
attributeFormDefault="qualified"

非常に珍しいことであり、おそらく問題の原因です。あなたが本当に何か変わったことをしたいのでなければ、これらは逆であるべきです。

9
Michael Kay