2010-06-21 57 views
5

我想爲一些基本但具體的需求做一個簡單的xml編輯器,我不知道如何處理的事情是我想能夠擁有自己的定製xsd模式本身的屬性(或其他)。在xsd架構中的自定義屬性

像這樣的東西是什麼,我腦子裏想的:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="Book"> 
     <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="Author" type="xsd:string" listable="1" /> 
      <xsd:element name="Pages" type="xsd:int" /> 
     </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

,我想對元素是否在該模式「可列」與否的信息(注意,.xml文件沒有任何信息或線索至於元素是否可列出,listable屬性只是一種在編輯器中組織元素的方法)。

它不需要是它自己的屬性。如果有一個misc屬性或者我可以用它玩的話就沒問題。問題在於上面的模式沒有驗證(在此上下文中不支持「可列表」屬性。)

有沒有辦法將這種信息存儲在模式中?

似乎有可能創建一個新的名稱空間,但我不知道應該如何聲明這個名稱空間,以便任何元素可能在xsd中都有一個特殊的屬性(我寧願避免與xml文件混淆爲了這)。爲這個創建一個新的命名空間似乎有點矯枉過正?

或者我完全用錯誤的方式去做這件事嗎?

回答

5

此信息應該位於其自己的名稱空間中。存儲它的最佳位置是在屬性的註釋中。您可以將註釋附加到任何模式項目,並且它們可以包含爲人類可讀文檔設計的xsd:documentation元素和爲機器可處理信息指定的xsd:appinfo。所以你的例子看起來像:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:foo="http://www.example.org/bar"> 
    <xsd:element name="Book"> 
     <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="Author" type="xsd:string" > 
     <xsd:annotation> 
      <xsd:appinfo> 
       <foo:listable value="true"/> 
      </xsd:appinfo> 
     </xsd:annotation> 
      </xsd:element> 
      <xsd:element name="Pages" type="xsd:int" /> 
     </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 
+0

謝謝! 似乎正是我所需要的。 – Magnus 2010-06-22 06:29:42

+0

@Aled G:如果我想讓xml文檔中的特定元素具有特定的名稱空間,應該怎麼做。其餘元素不包含任何名稱空間聲明。在這種情況下,我應該如何編寫模式? – Ashwin 2012-05-28 04:02:59