【问题标题】:xsd reusing of complex type in a different namespacexsd 在不同的命名空间中重用复杂类型
【发布时间】:2013-03-13 02:56:10
【问题描述】:

我有 2 个 xsd 属于 2 个不同的命名空间。我是否可以从不同的命名空间将复杂类型作为 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"/>
  • 我可以添加子元素吗???

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-10-08
        • 2016-04-23
        • 2012-01-25
        • 1970-01-01
        • 2022-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多