2013-10-14 74 views
1

我有一個架構A沒有名稱空間聲明,另一個架構B具有默認和tns(都指向相同的URI)。我想在Schema 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> 

我想引用爲messageType宣佈爲messageType。來自messageText.xsd的xsd, ,但不能將名稱空間添加到messageType.xsd,因爲它會破壞其他現有模式。

任何幫助表示讚賞。由於

回答

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的目標命名空間。

相關問題