2

我知道错误的含义,但据我所知, Order 元素已在架构中正确声明。这与我声明架构位置的方式有关吗?我不确定如何修复声明。有什么想法吗?

我的 XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<Order 
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://lolteamrecruiter.com order.xsd">
  <Customer id="n12">Aaron Rodgers</Customer>
  <Product>
    <Name>Old Time Souvenir Football</Name>
    <SKU>244</SKU>
    <Quantity>12</Quantity>
    <Price currency="taco">21.95</Price>
    <ShipTo>
      <Street>135 Airline Highway</Street>
      <City>Green Bay</City> <State>WI</State> <Zip>02882</Zip>
    </ShipTo>
  </Product>
  <Product>
    <Name>Official Packer Football</Name>
    <SKU>256</SKU>
    <Quantity>1</Quantity>
    <Price currency="USD">France</Price>
    <Discount>.10</Discount>
    <ShipTo>
      <GiftRecipient>Gertrude Rodgers</GiftRecipient>
      <Street>271 Old Homestead Way</Street>
      <City>San Francisco</City> <State>CA</State> <Zip>02895</Zip>
    </ShipTo>
    <GiftMessage>Happy Mothers Day to a great Mom! Love, Aaron</GiftMessage>
  </Product> 
  <Subtotal currency='USD'>263.40</Subtotal>
  <Tax rate="7.0" 
       currency='USD'>18.44</Tax>
  <Shipping  method="USPS" currency='USD'>8.95</Shipping>
  <Total currency='USD' >290.79</Total>
</Order>

我的 XSD

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:element name="Order">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Customer" type="xs:string">
        <xs:complexType>
            <xs:attribute name="id" type="xs:string"  use="required"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="Product" minOccurs="1" maxOccurs="unbounded">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Name" type="xs:string"/>
                <xs:element name="SKU" type="xs:string"/>
                <xs:element name="Quantity" type="xs:string"/>
                <xs:element name="Price" type="currRestrict">
                    <xs:complexType>
                        <xs:attribute name="currency" type="currencyType" use="required"/>
                    </xs:complexType>               
                </xs:element>
                <xs:element name="Discount" type="xs:string" minOccurs="0" maxOccurs="1"/>
                <xs:element name="ShipTo">
                      <xs:complexType>
                        <xs:sequence>
                            <xs:element name="GiftRecipient" type="xs:string"/>
                            <xs:element name="street" type="xs:string"/>
                            <xs:element name="City" type="xs:string"/>
                            <xs:element name="State" type="xs:decimal"/>
                            <xs:element name="Zip" type="xs:decimal"/>
                        </xs:sequence>
                      </xs:complexType>
                </xs:element>
                <xs:element name="GiftMessage" type="xs:string" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Subtotal" type="xs:decimal">
        <xs:complexType>
            <xs:attribute name="currency" type="currencyType" use="required"/>
        </xs:complexType>               
      </xs:element>
       <xs:element name="Tax" type="xs:decimal">
        <xs:complexType>
            <xs:attribute name="currency" type="currencyType" use="required"/>
            <xs:attribute name="rate" type="currencyType"/>
        </xs:complexType>               
      </xs:element>
       <xs:element name="Shipping" type="xs:string">
        <xs:complexType>
            <xs:attribute name="currency" type="currencyType" use="required"/>
            <xs:attribute name="method" type="methodType" default="UPS"/>
        </xs:complexType>               
      </xs:element>
      <xs:element name="Total" type="xs:decimal">
        <xs:complexType>
            <xs:attribute name="currency" type="currencyType" use="required"/>
        </xs:complexType>               
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:simpleType name="currencyType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="USD"/>
      <xs:enumeration value="CAN"/>
      <xs:enumeration value="GBP"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="methodType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="UPS"/>
      <xs:enumeration value="USPS"/>
      <xs:enumeration value="Overnight"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="currRestrict">
    <xs:restriction base="xs:decimal">
    </xs:restriction>
</xs:simpleType>

</xs:schema>
4

1 回答 1

3

您的实例文档有xmlns="http://www.w3schools.com",但您的架构没有 targetNamespace。因此,模式给出了Order命名空间中命名的元素的声明,但验证器正在寻找Order在命名空间中http://www.w3schools.com命名的元素的声明。

添加targetNamespace="http://www.w3schools.com"xs:schema开始标记并修复xsi:schemaLocation以匹配 - 它当前使用错误的命名空间 URI。

xsi:schemaLocation="http://www.w3schools.com order.xsd"

实例文档的命名空间、架构的 targetNamespace 以及映射到架构的命名空间都xsi:schemaLocation必须相同。

于 2013-09-30T21:24:04.753 回答