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

我想知道执行xsd的正确方法,因为我的xsd中的某些节点可能会在其他xsd中重用。像在搜索项目的要求,我将使用

<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>


假设您命名新的xsd
item.xsd
:使用(例如)
将xsd文件包含在主xsd中,然后使用item元素,就好像它在主xsd中一样。它表示“item”必须引用现有的简单或复杂类型。可能您的问题在于一些小细节,甚至可能是键入错误,但从这里很难看出。。请发布相关的.xsd文件。参见我的编辑:我改变了3件事:1。type=“ns1:Item”(因为名称空间)2。三,。Item.xsd中的结束元素丢失
xs:
。这对我有用,我希望对你也有用。