/ / Dlaczego przykład schematu XML w podkładzie nie jest sprawdzany? - xml, xsd

Dlaczego przykład schematu XML w podkładzie nie sprawdza się? - xml, xsd

patrzę na po.xml przykład w XML primer schematu:

<?xml version="1.0"?>
<purchaseOrder orderDate="1999-10-20" xmlns="http://www.example.com/PO">
<shipTo country="US">
<name>Alice Smith</name>
<street>123 Maple Street</street>
<city>Mill Valley</city>
<state>CA</state>
<zip>90952</zip>
</shipTo>
<billTo country="US">
<name>Robert Smith</name>
<street>8 Oak Avenue</street>
<city>Old Town</city>
<state>PA</state>
<zip>95819</zip>
</billTo>
<comment>Hurry, my lawn is going wild!</comment>
<items>
<item partNum="872-AA">
<productName>Lawnmower</productName>
<quantity>1</quantity>
<USPrice>148.95</USPrice>
<comment>Confirm this is electric</comment>
</item>
<item partNum="926-AA">
<productName>Baby Monitor</productName>
<quantity>1</quantity>
<USPrice>39.98</USPrice>
<shipDate>1999-05-21</shipDate>
</item>
</items>
</purchaseOrder>

Kiedy potwierdzam to tutaj nie można sprawdzić poprawności za pomocą następującego schematu:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:po="http://www.example.com/PO" targetNamespace="http://www.example.com/PO">

<xsd:annotation>
<xsd:documentation xml:lang="en">
Purchase order schema for Example.com.
Copyright 2000 Example.com. All rights reserved.
</xsd:documentation>
</xsd:annotation>

<xsd:element name="purchaseOrder" type="PurchaseOrderType"/>

<xsd:element name="comment" type="xsd:string"/>

<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element ref="comment" minOccurs="0"/>
<xsd:element name="items"  type="Items"/>
</xsd:sequence>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>

<xsd:complexType name="USAddress">
<xsd:sequence>
<xsd:element name="name"   type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city"   type="xsd:string"/>
<xsd:element name="state"  type="xsd:string"/>
<xsd:element name="zip"    type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:NMTOKEN"
fixed="US"/>
</xsd:complexType>

<xsd:complexType name="Items">
<xsd:sequence>
<xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="productName" type="xsd:string"/>
<xsd:element name="quantity">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:maxExclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="USPrice"  type="xsd:decimal"/>
<xsd:element ref="comment"   minOccurs="0"/>
<xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="partNum" type="SKU" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>

<!-- Stock Keeping Unit, a code for identifying products -->
<xsd:simpleType name="SKU">
<xsd:restriction base="xsd:string">
<xsd:pattern value="d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>

</xsd:schema>

Z następującym błędem:

Src-resolve.4.1: Błąd podczas rozwiązywania składnika "PurchaseOrderType". Wykryto, że "PurchaseOrderType" nie ma obszaru nazw, ale komponenty bez docelowej przestrzeni nazw nie mogą być odwoływane z dokumentu schematu "null". Jeśli "PurchaseOrderType" jest przeznaczony do posiadania przestrzeni nazw, być może wymagany jest przedrostek. Jeśli jest zamierzone, że "PurchaseOrderType" nie ma przestrzeni nazw, następnie "import" bez "przestrzeni nazw" Atrybut powinien być dodany do "null".

Podobnie dzieje się, gdy biegnę xmllint --schema po.xsd po.xml:

po.xsd: 10: element element: Błąd parsera schematu: Element "{http://www.w3.org/2001/XMLSchema} element ", attribute" type ": Odniesienia od tego schematu do komponentów bez przestrzeni nazw są niedozwolone, ponieważ nie są wskazane przez instrukcję import.

(Dodałem xmlns:po="http://www.example.com/PO" targetNamespace="http://www.example.com/PO" do pierwiastka głównego w schemacie znalezionym w podkładzie w nadziei, że to zadziała, ale bez powodzenia.)

Odpowiedzi:

2 dla odpowiedzi № 1

Dla jasności, schemat i instancja dokumentują ciebieużywają zmodyfikowane warianty tych znalezionych w XSD Primer. Zmodyfikowaliście je, dodając przestrzeń nazw i zrobiliście to niepoprawnie. Na przykład zmieniono parametr PurchaseOrderType na obszar nazw, ale nie zmieniono odwołania do parametru PurchaseOrderType, aby odzwierciedlić tę zmianę; to musi być coś w stylu

<xsd:element name="purchaseOrder" type="po:PurchaseOrderType"/>

gdzie prefiks przestrzeni nazw po jest powiązany z docelową przestrzenią nazw schematu. To samo dotyczy innych odniesień do komponentów w schemacie.