元素声明的XSD内容必须匹配;可疑属性

时间:2014-12-14 17:43:17

标签: xml xsd

我在生成允许我验证XML的XSD时遇到了困难。我当前的错误是第9行的错误:第47列,元素声明的内容必须匹配(注释?,(simpleType | complexType)?,(unique | key | keyref)*)。我已经检查了XML和XSD的良好结构;根据我的编辑,他们是。

我假设错误是指XSD而不是XML实例,主要是因为我的XML中第9行没有第47列。顺便说一下,XML无法改变。这是作业的一部分。

我尝试了一些让错误消失的事情。我曾经做过一次(忘了怎么做),但是我在XSD中的几乎同一个位置得到了另一个(涉及一个既有属性类型又有简单| complexType的元素)。 我已经尝试将属性移动到关闭该元素的complexType结束标记之前(所以在我的所有子元素之后我已经关闭了序列标记)。我已经尝试将它放在嵌套在complexType标记中的开头。

基本上我走了一圈,希望有人可以指出方向。我怀疑它与我如何为我的元素分配属性值有关,特别是在UpdatedBy元素的情况下,它有一个属性,它自己的文本字符串与属性分开,没有子元素。

XML代码是:

    <?xml version="1.0" encoding="UTF-8"?>
    <task
       xmlns="http://www.example.com/task"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.example.com/task task2.xsd">
        <UpdatedBy kind="SalesPerson">Lisa Moroz</UpdatedBy>
        <ShipTo country="Canada">
          <name>Maya Wells</name>
          <street>44 Gamble Avenue</street>
          <city>Toronto</city>
          <province>ON</province>
          <zip>L1M3G1</zip>
        </ShipTo>
        <ShipTo country="Canada">
          <name>Maya Wells</name>
          <street>62 Elm Street</street>
          <city>Montreal</city>
          <province>QC</province>
          <zip>K2J3H4</zip>
        </ShipTo>
        <BillTo>
          <country>Canada</country>
          <name>Maya Wells</name>
          <street>78 Audley Street</street>
          <city>Oakville</city>
          <province>ON</province>
          <zip>O3R1M5</zip>
        </BillTo>
      </task>

这是XSD:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:target="http://www.example.com/task"
    targetNamespace="http://www.example.com/task" elementFormDefault="qualified">
        <element name="name">
           <complexType>
              <sequence>
                 <element name="UpdatedBy" type="string">
                    <attribute name="kind" type="string"/>
                 </element>
                 <element name="ShipTo" maxOccurs="4">
                    <complexType>
                       <sequence>
                          <element name="name" type="string"/>
                             <simpleType>
                                <element name="street" type="string">
                                   <restriction base="string">
                                     <minLength value="5"/>
                                   </restriction>
                                </element>
                             </simpleType>
                         <element name="city" type="string"/> 
                             <simpleType>
                               <element name="province" type="string">
                                   <restriction base="string">
                                      <enumeration value="AB"/>
                                      <enumeration value="BC"/>
                                      <enumeration value="MB"/>
                                      <enumeration value="NB"/>
                                      <enumeration value="NL"/>
                                      <enumeration value="NS"/>
                                      <enumeration value="NU"/>
                                      <enumeration value="ON"/>
                                      <enumeration value="PE"/>
                                      <enumeration value="QC"/>
                                      <enumeration value="SK"/>
                                      <enumeration value="YT"/>
                                   </restriction>
                               </element>
                           </simpleType>
                        <element name="zip" type="string"/>
                      </sequence> 
                    <attribute name="country" type="string"/>
                 </complexType>
            </element>
            <element name="BillTo" minOccurs="1">
                 <complexType>
                    <sequence>
                       <element name="country" type="string"/>
                       <element name="name" type="string"/>
                         <simpleType>
                            <element name="street" type="string">
                               <restriction base="string">
                                 <minLength value="5"/>
                               </restriction>
                            </element>
                         </simpleType>
                       <element name="city" type="string"/>
                         <simpleType>
                            <element name="province" type="string">
                                <restriction base="string">
                                   <enumeration value="AB"/>
                                   <enumeration value="BC"/>
                                   <enumeration value="MB"/>
                                   <enumeration value="NB"/>
                                   <enumeration value="NL"/>
                                   <enumeration value="NS"/>
                                   <enumeration value="NU"/>
                                   <enumeration value="ON"/>
                                   <enumeration value="PE"/>
                                   <enumeration value="QC"/>
                                   <enumeration value="SK"/>
                                   <enumeration value="YT"/>
                                </restriction>
                           </element>
                        </simpleType>
                     <element name="zip" type="string"/>
                  </sequence> 
              </complexType>
              </element>
            </sequence>
          </complexType>
        </element>
    </schema>

感谢您的任何提示和建议:) [问题或如何在将来更好地提出我的问题;第一次发帖]

1 个答案:

答案 0 :(得分:1)

必要的更改

(1)更改

<element name="name">

<element name="task">

(2)声明如下,

    <element name="UpdatedBy" type="string">
      <attribute name="kind" type="string"/>
    </element>

需要xsd:complexType且没有@type =“string”属性:

    <element name="UpdatedBy">
      <complexType>
        <simpleContent>
          <extension base="string">
            <attribute name="kind" type="string"/>
          </extension>
        </simpleContent>
      </complexType>
    </element>

(3)在xSD中的多个位置推送xsd:element下的xsd:simpleType。

完成上述更改后,您的XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<task
    xmlns="http://www.example.com/task"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.com/task try.xsd">
  <UpdatedBy kind="SalesPerson">Lisa Moroz</UpdatedBy>
  <ShipTo country="Canada">
    <name>Maya Wells</name>
    <street>44 Gamble Avenue</street>
    <city>Toronto</city>
    <province>ON</province>
    <zip>L1M3G1</zip>
  </ShipTo>
  <ShipTo country="Canada">
    <name>Maya Wells</name>
    <street>62 Elm Street</street>
    <city>Montreal</city>
    <province>QC</province>
    <zip>K2J3H4</zip>
  </ShipTo>
  <BillTo>
    <country>Canada</country>
    <name>Maya Wells</name>
    <street>78 Audley Street</street>
    <city>Oakville</city>
    <province>ON</province>
    <zip>O3R1M5</zip>
  </BillTo>
</task>

对此更新的XSD有效:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:target="http://www.example.com/task"
        targetNamespace="http://www.example.com/task" elementFormDefault="qualified">
  <element name="task">
    <complexType>
      <sequence>
        <element name="UpdatedBy">
          <complexType>
            <simpleContent>
              <extension base="string">
                <attribute name="kind" type="string"/>
              </extension>
            </simpleContent>
          </complexType>
        </element>
        <element name="ShipTo" maxOccurs="4">
          <complexType>
            <sequence>
              <element name="name" type="string"/>
              <element name="street">
                <simpleType>
                  <restriction base="string">
                    <minLength value="5"/>
                  </restriction>
                </simpleType>
              </element>
              <element name="city" type="string"/> 
              <element name="province">
                <simpleType>
                  <restriction base="string">
                    <enumeration value="AB"/>
                    <enumeration value="BC"/>
                    <enumeration value="MB"/>
                    <enumeration value="NB"/>
                    <enumeration value="NL"/>
                    <enumeration value="NS"/>
                    <enumeration value="NU"/>
                    <enumeration value="ON"/>
                    <enumeration value="PE"/>
                    <enumeration value="QC"/>
                    <enumeration value="SK"/>
                    <enumeration value="YT"/>
                  </restriction>
                </simpleType>
              </element>
              <element name="zip" type="string"/>
            </sequence> 
            <attribute name="country" type="string"/>
          </complexType>
        </element>
        <element name="BillTo" minOccurs="1">
          <complexType>
            <sequence>
              <element name="country" type="string"/>
              <element name="name" type="string"/>
              <element name="street">
                <simpleType>
                  <restriction base="string">
                    <minLength value="5"/>
                  </restriction>
                </simpleType>
              </element>
              <element name="city" type="string"/>
              <element name="province">
                <simpleType>
                  <restriction base="string">
                    <enumeration value="AB"/>
                    <enumeration value="BC"/>
                    <enumeration value="MB"/>
                    <enumeration value="NB"/>
                    <enumeration value="NL"/>
                    <enumeration value="NS"/>
                    <enumeration value="NU"/>
                    <enumeration value="ON"/>
                    <enumeration value="PE"/>
                    <enumeration value="QC"/>
                    <enumeration value="SK"/>
                    <enumeration value="YT"/>
                  </restriction>
                </simpleType>
              </element>
              <element name="zip" type="string"/>
            </sequence> 
          </complexType>
        </element>
      </sequence>
    </complexType>
  </element>
</schema>