XSD重用节点或复制
我想知道执行xsd的正确方法,因为我的xsd中的某些节点可能会在其他xsd中重用。像在搜索项目的要求,我将使用XSD重用节点或复制,xsd,Xsd,我想知道执行xsd的正确方法,因为我的xsd中的某些节点可能会在其他xsd中重用。像在搜索项目的要求,我将使用 <xs:element name="Item"> <xs:complexType> <xs:sequence> <xs:element name="Name" type="xs:string"/> <xs:element name
<xs:element name="Item">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string"/>
<xs:element name="Price" type="xs:double"/>
<xs:element name="SupplierCode" type="xs:string"/>
<xs:element name="Supplier" type="xs:string"/>
<xs:element name="SupplierName" type="xs:string"/>
<xs:element name="Manufacturer" type="xs:string"/>
<xs:element ref="CustomerReviews" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="model" type="xs:string" use="required"/>
<xs:attribute name="href" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
那么我可能需要在另一个xsd中使用它
那么我应该重复它还是用它制作一个xsd并引用它呢
我当前的xsd包括
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://www.itwholesaledeluxe.com" targetNamespace="http://www.itwholesaledeluxe.com" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:include schemaLocation="Item.xsd"/>
<xs:element name="Search-Item-Request">
<xs:complexType>
<xs:sequence>
<xs:element name="Items">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" type="Item"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
然后,由于项目太大而无法发布,因此项目xsd会部分删除
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://www.itwholesaledeluxe.com">
<xs:complexType name="Item">
<xs:sequence>
<xs:element name="Name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</sequence>
</complexType>
</xs:schema>
follow DRY:如果它是同一个对象(在同一名称空间中):创建一个xsd并引用它 这样,如果对象在某个点被更改,您只需要进行一次更改。此外,为该对象生成的任何代码只需生成一次 使用以下xsd作为参考: Main.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ns1="http://www.itwholesaledeluxe.com" targetNamespace="http://www.itwholesaledeluxe.com"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:include schemaLocation="Item.xsd" />
<xs:element name="Search-Item-Request">
<xs:complexType>
<xs:sequence>
<xs:element name="Items">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" type="ns1:Item" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Item.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified"
targetNamespace="http://www.itwholesaledeluxe.com">
<xs:complexType name="Item">
<xs:sequence>
<xs:element name="Name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
假设您命名新的xsditem.xsd
:使用(例如)
将xsd文件包含在主xsd中,然后使用item元素,就好像它在主xsd中一样。它表示“item”必须引用现有的简单或复杂类型。可能您的问题在于一些小细节,甚至可能是键入错误,但从这里很难看出。。请发布相关的.xsd文件。参见我的编辑:我改变了3件事:1。type=“ns1:Item”(因为名称空间)2。三,。Item.xsd中的结束元素丢失xs:
。这对我有用,我希望对你也有用。