XSD 如何引用不同名称空间中具有相同名称的 XML 元素
How XSD refers to XML elements with same name in different namespaces
我有这个 XML 架构,其中包含一个序列,该序列具有两个名称相同但命名空间不同的引用。
Address
元素在 Address1.xsd 和 Address2.xsd
中定义
我想知道这是否被标准接受。
<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>
是的,您的示例是正确的,并且演示了引用两个 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>
我有这个 XML 架构,其中包含一个序列,该序列具有两个名称相同但命名空间不同的引用。
Address
元素在 Address1.xsd 和 Address2.xsd
我想知道这是否被标准接受。
<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>
是的,您的示例是正确的,并且演示了引用两个 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>