Xml 在不同命名空间中重用复杂类型的xsd

Xml 在不同命名空间中重用复杂类型的xsd,xml,xsd,Xml,Xsd,我有两个xsd属于两个不同的命名空间。我是否可以从不同的名称面板中引用复杂类型作为xsd中的元素,并向其添加子元素 Global.xsd-命名空间-命名空间 <xs:complexType name = "body" mixed="true"> <xs:sequence> <xs:choice maxOccurs="unbounded" minOccurs="0"> <xs:element name="fontStyle" typ

我有两个xsd属于两个不同的命名空间。我是否可以从不同的名称面板中引用复杂类型作为xsd中的元素,并向其添加子元素

Global.xsd-命名空间-命名空间

<xs:complexType name = "body" mixed="true">
<xs:sequence>
    <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="fontStyle" type="fontStyle"/>
        <xs:element name="link" type="link"/>
        <xs:element name="mark" type="mark"/>
        <xs:element name="orderedList" type="orderedList"/>
        <xs:element name="table" type="table"/>
        <xs:element name="toc" type="toc"/>
        <xs:element name="unorderedList" type="unorderedList"/>
    </xs:choice>
</xs:sequence>
</xs:complexType>

test.xsd命名空间-测试

<xs:element name="body" type="n:body"/>

  • 我可以添加子元素吗

  • 当然可以,为什么不呢。比如:

    <xsd:schema
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="urn:m"
        xmlns:m="urn:m"
        xmlns:n="urn:n"
        elementFormDefault="qualified">
    
        <xsd:import namespace="urn:n" schemaLocation="n.xsd"/>
    
        <xsd:element name="body" type="n:body"/>
    
        <xsd:element name="extendedBody" type="m:extendedBody"/>
    
        <xsd:complexType name="extendedBody">
            <xsd:complexContent>
                <xsd:extension base="n:body">
                    <xsd:sequence>
                        <xsd:element name="additionalElement" type="xsd:string"/>
                    </xsd:sequence>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:schema>
    
    
    
    但是请注意,XML将类似于:

    <m:extendedBody>
        <n:toc>...</n:toc>
        <m:additionalElement>...</m:additionalElement>
    </m:extendedBody>
    
    
    ...
    ...
    

    (虽然我没有检查解决方案,但这只是给出一个想法。很可能混合/选择扩展不起作用。)

    是的,您只需要像这样扩展类型:

    <xs:complexType name="moreBodyType">
        <xs:complexContent>
            <xs:extension base="n:body">
                <xs:sequence>
                    // put extra child elements here
                                       <xs:element name="morestuff" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    
    //在此处放置额外的子元素
    
    现在你可以做:

    <xs:element name="morebody" type="n:MoreBodyType" />