我的XSD文件中的命名空间(子元素)有什么问题

时间:2015-01-16 23:05:04

标签: xml validation namespaces

我的visualbasic中出现了以下错误

  

元素'顺序'在命名空间' OrdersSchema'有无效的孩子   元素' deliveryAddress'。预期的可能元素列表:   '是DeliveryAddress'在命名空间' OrdersSchema'。

如果我明白这是正确的但是没有交付给一个订单的孩子吗?那为什么抱怨它不期待呢?或者我在思考道路上是错的

<?xml version="1.0" encoding="utf-8"?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema"
            xmlns:os="OrdersSchema"
            targetNamespace="OrdersSchema"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified">
      <element name="orders">
      <complexType >
        <sequence>
          <element name="order" maxOccurs="unbounded">
           <complexType>
        <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>
            </complexType>
            <unique name="uniqueOrderIdPerOrder">
              <selector xpath="os:order"/>
              <field xpath="orderId"/>
            </unique>
          </element>
          <element name='items'>
            <complexType>
              <sequence>
              <element name="item">
                <complexType>

                <attribute name='productId' type='os:productIdType'/>
              <attribute name='quantity'>            
                <simpleType>
                  <restriction base='positiveInteger'>
                  </restriction>
                </simpleType>
              </attribute>
                  </complexType>
              </element>
            </sequence>
            </complexType>
          </element>
          <element name='note' minOccurs='0' type='string'/>
        </sequence>
             <attribute name="orderId" type="string" use="required" >
             </attribute>
             <attribute name="type" type="os:typeType" use="required"/>
           </complexType>
          </element>
        </sequence>
      </complexType>
      </element>
      <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文件?这个文件无法更改我需要构建我的XSD来验证这个xml

<?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 个答案:

答案 0 :(得分:0)

XML和/或XSD存在许多问题。你的问题并不清楚你可以自由改变。对于初学者,可以通过在os:元素之前添加deliveryAddress命名空间前缀来修复您在问题中提供的特定错误:

<os:deliveryAddress orderId="o1">
    ....
</os:deliveryAddress>

您很快就会发现许多其他元素同样必须放在OrdersSchema命名空间中。也可以使用os:作为前缀。

可能必须修复XSD中的第一个正则表达式模式,或者可能必须为XML处理器设置特殊选项才能接受它。 Xerces报道:

  

InvalidRegex:模式值   '(我)P- \ S [A-Z] [A-Z] [A-Z] [A-Z] [A-Z] [A-Z] |一种... + [$ XYZ] \ B'   不是有效的正则表达式。报告的错误是:'这   当前选项设置不支持表达式。'。

XSD设计本身是有问题的,它将items元素定义为空(其中XML具有item元素的items子元素。也许这是XSD而不是应该在这里更改的XML。