2010-02-23 129 views
4

我有一個項目,其中加載了一個xsd文檔,並基於該項目爲每個元素創建了一個編輯器。然後實現該模式的xml被加載到編輯器中。這可以是字符串的簡單文本框,日期的日期選擇器或更復雜的數據,如具有關聯的元數據的章節。
編輯器是通用的,所以編輯器是根據模式生成的。對於簡單類型(如字符串和日期),我們可以使用type屬性。但是對於更復雜的自定義類型,我們需要向xsd文檔添加一個屬性,該屬性定義要使用的編輯器子元素。如何將屬性添加到xml模式元素?

因此我添加了一個名爲UIType的自定義屬性,但w3模式架構不允許這樣做。 有沒有什麼方法可以擴展w3模式模式,並且不需要創建它的副本並添加我需要的內容,但實際上可以擴展它?或者是否有另一種更聰明的方法呢?

謝謝。

只是爲了說清楚;我不想將該屬性添加到實際的xml數據,而是添加到模式中。

下面是模式的一個例子:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified"> 
    <xs:element name="PublishDate" type="xs:date" /> 
    <xs:element name="Chapters"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element maxOccurs="unbounded" name="Chapter" UIType="ChapterPicker" > 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="ID" type="xs:int" /> 
          <xs:element name="FileID" type="xs:int" /> 
          <xs:element name="Title" type="xs:string" /> 
          <xs:element name="Artist" type="xs:string" /> 
          <xs:element name="Year" type="xs:int" /> 
          <xs:element name="Timestamp" type="xs:string" /> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

我想知道這一點。 – 2010-02-23 14:15:28

回答

2

您似乎已經被創建擴展類型。您不限於使用「xs:int」或「xs:string」作爲類型。您可以通過提取complexType元素並命名它們來定義自己的類型。然後,您可以將其名稱用作其他元素的類型。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified"> 
    <xs:element name="PublishDate" type="xs:date" /> 
    <xs:element name="Chapters" type="Chapters_t" /> 
    <xs:complexType name="Chapters_t"> 
     <xs:sequence> 
      <xs:element maxOccurs="unbounded" name="Chapter" UIType="ChapterPicker" > 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="ID" type="xs:int" /> 
         <xs:element name="FileID" type="xs:int" /> 
         <xs:element name="Title" type="xs:string" /> 
         <xs:element name="Artist" type="xs:string" /> 
         <xs:element name="Year" type="xs:int" /> 
         <xs:element name="Timestamp" type="xs:string" /> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
+0

Ahh frig,我想我在前段時間甚至在w3schools上讀到過這個... 我認爲這應該可以解決問題。我會放棄它。一旦我測試了它,我會在稍後給你接受。 – 2010-02-23 14:30:36

+0

它的工作原理。這太簡單了。謝謝。 – 2010-02-23 14:47:39

+0

不客氣。 – Ioan 2010-02-23 15:50:15