xsd架构不适用于xml文件

时间:2015-04-02 08:13:01

标签: xml xsd

在这里使用XSD和XML进行噩梦。有一个简单的xml文件(代表我在数据库中的表)和一个XSD Schema,我试图相互验证它们,每次都会出现一些错误。最好的是不同的验证器在同一文件上显示完全不同的错误。这是我第一次处理这个并且没有使用XML的经验。有人可以请正确指出我的错误并简要解释一下吗?我不是在找你们为我做这一切。只是把我放在正确的方向。 谢谢,安迪

XSD架构

    <?xml version="1.0"?>
<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.w3schools.com"
           xmlns="http://www.w3schools.com"
           elementFormDefault="qualified">
  <xs:element name="Users">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="user">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="userID">
                <xs:simpleType>
                  <xs:restriction base="xs:integer">
                    <xs:minInclusive value="0"/>
                    <xs:maxInclusive value="120"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="firstName">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="([a-zA-Z])*"/>
                    <xs:minLength value="2"/>
                    <xs:maxLength value="28"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="lastName">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="([a-zA-Z])*"/>
                    <xs:minLength value="2"/>
                    <xs:maxLength value="28"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="email">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"/>
                    <xs:minLength value="6"/>
                    <xs:maxLength value="80"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="DOB">
                <xs:simpleType>
                  <xs:restriction base="xs:date">
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="tellNo">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] "/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="userTypeID">
                <xs:simpleType>
                  <xs:restriction base="xs:integer">
                    <xs:minInclusive value="0"/>
                    <xs:maxInclusive value="120"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XML文件

    <?xml version="1.0" encoding="UTF-8"?>
<Users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="user.xsd">

  <user userid="1">
        <firstName>Andrew</firstName>
        <lastName>Golota</lastName>
        <email>a.golota@wbc.us</email>
        <DOB>1964-10-24</DOB>
        <tellNo>078222446589</tellNo>
        <userTypeID>1</userTypeID>
    </user>

    <user userid="13">
        <firstName>Barrack</firstName>
        <lastName>Obama</lastName>
        <email>b.obama@whitehouse.us</email>
        <DOB>1970-08-12</DOB>
        <tellNo>079886365212</tellNo>
        <userTypeID>3</userTypeID>
    </user>

    <user userid="11">
        <firstName>Bill</firstName>
        <lastName>Clinton</lastName>
        <email>b.clinton@whitehouse.us</email>
        <DOB>1960-12-07</DOB>
        <tellNo>078537278867</tellNo>
        <userTypeID>2</userTypeID>
    </user>

    <user userid="5">
        <firstName>Michael</firstName>
        <lastName>Grant</lastName>
        <email>m.grant1966@wbc.us</email>
        <DOB>1966-03-08</DOB>
        <tellNo>078339789608</tellNo>
        <userTypeID>4</userTypeID>
    </user>

    <user userid="2">
        <firstName>Mike</firstName>
        <lastName>Tyson</lastName>
        <email>m.tyson@wbc.us</email>
        <DOB>1966-12-01</DOB>
        <tellNo>076255545422</tellNo>
        <userTypeID>1</userTypeID>
    </user>

    <user userid="4">
        <firstName>Mike</firstName>
        <lastName>Mollo</lastName>
        <email>m.mollo@wbc.us</email>
        <DOB>1970-09-07</DOB>
        <tellNo>076255545117</tellNo>
        <userTypeID>3</userTypeID>
    </user>

    <user userid="12">
        <firstName>Monica</firstName>
        <lastName>Levinsky</lastName>
        <email>m.levinsky@slutload.com</email>
        <DOB>1988-12-06</DOB>
        <tellNo>078553323285</tellNo>
        <userTypeID>1</userTypeID>
    </user>

    <user userid="14">
        <firstName>Osama</firstName>
        <lastName>BinLaden</lastName>
        <email>o.binladen@hideout.com</email>
        <DOB>1926-06-06</DOB>
        <tellNo>078552592921</tellNo>
        <userTypeID>2</userTypeID>
    </user>

    <user userid="3">
        <firstName>Riddick</firstName>
        <lastName>Bowe</lastName>
        <email>r.bowe@wbc.us</email>
        <DOB>1962-02-14</DOB>
        <tellNo>078222556575</tellNo>
        <userTypeID>2</userTypeID>
    </user>

    <user userid="0">
        <firstName>Tomasz</firstName>
        <lastName>Adamek</lastName>
        <email>t.adamek@wbc.us</email>
        <DOB>1970-04-04</DOB>
        <tellNo>077456757842</tellNo>
        <userTypeID>1</userTypeID>
    </user>

</Users>

1 个答案:

答案 0 :(得分:2)

这似乎是因为targetNamespace在您的架构中设置为"http://www.w3schools.com",而不是在您的XML实例中。

2个解决方案:

  1. 您需要此命名空间,并且必须在XML中设置:

     <Users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="user.xsd"
         xmlns="http://www.w3schools.com">
    
  2. 您不需要它,您可以在架构中丢弃它,并按照以下方式修改它:

    <xs:schema version="1.0"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified" attributeFormDefault="unqualified">
    
  3. 您会注意到您有一堆新错误,因为未声明属性userid(实际上您声明了标记),依此类推......

    PS:巴拉克•奥巴马(Barack Obama)写的只有一个&#39; r&#39; ...:)