XSD如何引用不同名称空间中具有相同名称的XML元素

时间:2015-08-18 18:14:16

标签: xml reference xsd namespaces xml-namespaces

我有这个XML Schema,它包含一个带有两个具有相同名称但名称空间不同的引用的序列。 Address1.xsd Address2.xsd

中定义了Address个元素

我想知道这是否被标准所接受。

 <xsd:schema targetNamespace="http://xmlns.oracle.com/bpmn/bpmnCloudProcess/Testnamespace/Process" 
    xmlns:tns7="http://my.namespace.com2" xmlns:tns6="http://my.namespace.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

        <xsd:import namespace="http://my.namespace.com" schemaLocation="Address1.xsd"/>
        <xsd:import namespace="http://my.namespace.com2" schemaLocation="Address2.xsd"/>

        <xsd:element name="start">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element ref="tns6:Address"/>
                    <xsd:element ref="tns7:Address"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>

 </xsd:schema>

1 个答案:

答案 0 :(得分:0)

是的,您的示例是正确的,并演示了引用两个Address元素的正确方法,这些元素通过位于不同的命名空间中来区分。请确保Address1.xsd的targetNamespace等于http://my.namespace.com,而Address2.xsd的targetNamespace等于http://my.namespace.com2。以下是一致定义的所有三个XSD:

主XSD

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema 
     targetNamespace="http://xmlns.oracle.com/bpmn/bpmnCloudProcess/Testnamespace/Process" 
     xmlns:tns7="http://my.namespace.com2"
     xmlns:tns6="http://my.namespace.com"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:import namespace="http://my.namespace.com"
              schemaLocation="Address1.xsd"/>
  <xsd:import namespace="http://my.namespace.com2"
              schemaLocation="Address2.xsd"/>

  <xsd:element name="start">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="tns6:Address"/>
        <xsd:element ref="tns7:Address"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>

Address1.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://my.namespace.com" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="Address"/>

</xsd:schema>

Address2.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://my.namespace.com2" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="Address"/>

</xsd:schema>