要素が異なる 2 つの XML XSD タイプを検証します。
この商品の XML。
<oils hostDbID="6" hostDetailId="289" model="1l dans 5w30 c3"
host="norauto" trademark="oil-dans" id="noil-237789"
product-type="oils">
<url>http://www.oils.es/product/_289.html</url>
<img>http://medias.es/images_prod/oil_5_w_30_c3_1l.jpg</img>
<price>11.95</price>
<currency>€</currency>
<manufacture>autoOil</manufacture>
<viscosity>5W30</viscosity>
<liters>1 L</liters>
<composition>sint</composition>
<norm type="Acea">C2</norm>
<norm type="API">SM/CF</norm>
<norm type="VW">505.00</norm>
<norm type="Mercedes-Benz">229.31</norm>
<norm type="BMW">LONGLIFE 04</norm>
<content>
Norma C3 A3/B3/B4 LL.
</content>
</oils>
これは XSD です:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="tire" type="tire" />
<xs:element name="oils" type="oil" />
<xs:complexType name="product">
<xs:sequence>
<xs:element type="xs:anyURI" name="url" />
<xs:element type="xs:double" name="price" />
<xs:element type="xs:float" name="ecorate"
minOccurs="0" maxOccurs="unbounded" />
<xs:element type="xs:string" name="currency" />
<xs:element type="xs:boolean" name="vat" />
<xs:element type="xs:anyURI" name="img" />
<xs:element type="xs:string" name="content" />
<xs:element name="specs" maxOccurs="unbounded"
minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="spec" maxOccurs="unbounded"
minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name"
use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="features" maxOccurs="unbounded"
minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="feature" maxOccurs="unbounded"
minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name"
use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:int" name="hostDbID" />
<xs:attribute type="xs:string" name="hostDetailId" />
<xs:attribute type="xs:string" name="host" />
<xs:attribute type="xs:string" name="id" />
<xs:attribute type="xs:string" name="product-type" />
</xs:complexType>
<xs:complexType name="tire">
<xs:complexContent>
<xs:extension base="product">
<xs:attribute type="xs:string" name="speed" />
<xs:attribute type="xs:int" name="load" />
<xs:attribute type="xs:int" name="wheels" />
<xs:attribute type="xs:int" name="height" />
<xs:attribute type="xs:int" name="width" />
<xs:attribute type="xs:int" name="season" />
<xs:attribute type="xs:string" name="model" />
<xs:attribute type="xs:string" name="trademark" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="oil">
<xs:complexContent>
<xs:extension base="product">
<xs:attribute type="xs:string" name="model"/>
<xs:attribute type="xs:string" name="trademark"/>
</xs:extension>
</xs:complexContent>
<xs:sequence>
<xs:element type="xs:string" name="manufacture"/>
<xs:element type="xs:string" name="viscosity"/>
<xs:element type="xs:string" name="liters"/>
<xs:element type="xs:string" name="composition"/>
<xs:element name="norm"
maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string"
name="type" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="products">
<xs:complexType>
<xs:sequence>
<xs:element name="tire" maxOccurs="unbounded"
minOccurs="0" type="tire" />
<xs:element name="oils" maxOccurs="unbounded"
minOccurs="0" type="oil" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
問題は、の:
<xs:sequence>
<xs:element type="xs:string" name="manufacture"/>
<xs:element type="xs:string" name="viscosity"/>
<xs:element type="xs:string" name="liters"/>
<xs:element type="xs:string" name="composition"/>
<xs:element name="norm" maxOccurs="unbounded"
minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string"
name="type" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
私はxmllintを使用しました。私が得るエラーはこれです:
Element '{http://www.w3.org/2001/XMLSchema}element': The content is not valid.
"oil" の complexType で要素の内容が正しくありません。有効な要素がありません。製品オイルにさらにアイテムの拡張機能を追加するにはどうすればよいですか?. ありがとう。
ソリューション:
<xs:complexType name="fullOil">
<xs:complexContent>
<xs:extension base="oil">
<xs:sequence>
<xs:element type="xs:string"
name="manufacture"/>
<xs:element type="xs:string" name="viscosity"/>
<xs:element type="xs:string" name="liters"/>
<xs:element type="xs:string" name="composition"/>
<xs:element name="norm"
maxOccurs="unbounded"
minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string"
name="type"
use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>