我有一个没有命名空间声明的模式A,另一个模式B具有默认值和tns(都指向相同的URI)。我想在架构 B 中引用架构 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,因为它会破坏其他现有架构。
任何帮助,不胜感激。谢谢
在架构 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 的目标命名空间中不存在的类型。