2012-10-02 82 views
0

比方說,我有一個XML這樣的事情:是否可以通過額外的XSD爲元素定義XML屬性?

<root xmlns="default" xmlns:add="additional"> 
    <element foo="fromDefault" /> 
    <add:element foo="fromDefault" add:bar="fromAdditional" /> 
</root> 

我想這樣做是爲了合併兩個element定義,以避免重複,像這樣:

<root xmlns="default" xmlns:add="additional"> 
    <element foo="fromDefault" add:bar="fromAdditional" /> 
</root> 

但我米甚至不知道這是否可能。

我有一種感覺,因爲我們使用了一些類似的符號根元素,比如它可能是可行的:

<root xmlns:xsi="..." 
     xsi:schemaLocation="..."> 

遺憾的是我沒能找到任何文檔/參考/教程/有關此問題的任何東西,有人可以幫助我澄清,如果我想要做什麼是可能的(或不),並與我分享一些鏈接?

在此先感謝!

+0

不知道你的問題是什麼。您的第二個XML示例是格式完美的XML。您的問題是爲這個XML編寫一個模式,還是將第一個XML示例轉換爲第二個,或者是什麼?不確定你認爲「額外的XSD」會帶給派對。 –

+0

我對整個概念有點不確定,但是,我想爲此編寫架構(* default *和* additional *)。我應該在兩個模式定義中創建相同的xsd元素嗎? – rlegendi

+1

在我能回答之前,我需要更多地瞭解你想要達到的目標。 –

回答

1

我認爲你正在尋找的東西是這樣的:

additional.xsd

<xs:schema 
    targetNamespace="additional" 
    elementFormDefault="qualified" 
    xmlns="additional" 
    xmlns:mstns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:attribute name="bar" type="xs:string"/> 

</xs:schema> 

default.xsd

<xs:schema 
    targetNamespace="default" 
    elementFormDefault="qualified" 
    xmlns="default" 
    xmlns:mstns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:add="additional"> 

    <xs:import namespace="additional" schemaLocation="additional.xsd"/> 

    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="element" minOccurs="1" maxOccurs="1"> 
      <xs:complexType> 
      <xs:attribute name="foo" type="xs:string"/> 
      <xs:attribute ref="add:bar"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

的第一個模式只定義了「額外的東西(在示例中只是一個屬性),第二個模式導入它定義了其他所有內容,在需要的地方引用附加內容。

+0

看起來很酷,讓我試試吧! – rlegendi

相關問題