在具有目标命名空间的模式中引用无命名空间模式元素

时间:2013-10-14 15:57:10

标签: xml xsd

我有一个没有名称空间声明的模式A,另一个模式B有一个默认和tns(都指向同一个uri)。我想在Schema B中引用Schema A中的一个元素。我该怎么做?这是我的模式:

架构A(messageType.xsd):

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
<xs:element name="message" type="messageType" minOccurs="0" />
 <xs:complexType name="messageType">
        <xs:sequence>
            <xs:element name="messageId" type="xs:string" minOccurs="0" />
            <xs:element name="severity" type="severityType" minOccurs="0" />
        </xs:sequence>
    </xs:complexType>
</xs:schema>

架构B(比如messageText.xsd):

<xs:schema elementFormDefault="unqualified" xmlns="http://www.myorg/schema/ref" targetNamespace="http://www.myorg/schema/ref" xmlns:xs="http://www.w3.org/2001/XMLSchema">

   <xs:import schemaLocation="messageType.xsd" />
   <xs:element name="messages" type="inheritedMessageType"/>

  <xs:complexType name="inheritedMessageType">
    <xs:complexContent>
      <!-- messageType is declared in no namespace schema messageType.xsd -->
      <xs:extension base="messageType">
          <xs:element name="messageText" type="xs:string"/>
      </xs:extension>
    </xs:complexContent>
   </xs:complexType>
</xs:schema>

我想从messageText.xsd引用messageType.xsd中声明的messageType, 但是无法向messageType.xsd添加名称空间,因为它会破坏其他现有模式。

感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:2)

在架构B中,而不是

xmlns="http://www.myorg/schema/ref"

将其更改为

xmlns:tns="http://www.myorg/schema/ref"

这意味着架构B中对其自己的元素和类型的任何引用都需要使用tns:前缀,例如

<xs:element name="messages" type="tns:inheritedMessageType"/>

但是现在没有前缀的普通messageType将引用无命名空间类型(来自模式A),而不是模式B的目标命名空间中不存在的类型。