在我編寫應用程序的框架中,有許多xml文件,其中節點名稱並不重要。所有有價值的信息都放在屬性中。節點類型是通過其中一個屬性定義的。僅定義屬性的XSD架構
我想寫這個文件的簡單架構。我認爲它應該滿足兩大條件:
- 每一個元素可以從定義的列表屬性(例如名稱,值類型[會有更多!])
- 每一個元素可以擁有的元素序列確切的定義
如果有可能使屬性列表依賴於某些給定的(例如類型)參數,它將是非常有用的。
XSD文件可以處理這些XML文件嗎?是否有可能編寫這樣的模式?如何定義任何節點的屬性列表。
在我編寫應用程序的框架中,有許多xml文件,其中節點名稱並不重要。所有有價值的信息都放在屬性中。節點類型是通過其中一個屬性定義的。僅定義屬性的XSD架構
我想寫這個文件的簡單架構。我認爲它應該滿足兩大條件:
如果有可能使屬性列表依賴於某些給定的(例如類型)參數,它將是非常有用的。
XSD文件可以處理這些XML文件嗎?是否有可能編寫這樣的模式?如何定義任何節點的屬性列表。
您需要爲xml實例中要支持的每個可能的元素和屬性組合定義XSD類型。例如
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:all>
<!-- declarations of any of the types you can use -->
<xs:element name="MyType1" type="MyType1Type" />
<!-- etc.. -->
</xs:all>
</xs:complexType>
</xs:element>
<!-- Type definitions -->
<xs:complexType name="MyType1>
<xs:sequence>
<xs:element name="MyElement1" type="xs:string" />
<xs:element name="MyElement2" type="xs:date" />
<!-- etc.. -->
</xs:sequence>
<xs:attribute name="MyAttribute1" type="xs:string" />
<!-- etc.. -->
</xs:complexType>
<xs:complexType name="MyType2>
<xs:sequence>
<xs:element name="MyElement3" type="xs:string" />
<xs:element name="MyElement4" type="xs:date" />
<!-- etc.. -->
</xs:sequence>
<xs:attribute name="MyAttribute3" type="xs:string" />
<!-- etc.. -->
</xs:complexType>
<!-- etc.. -->
</xs:schema>
一旦你定義了所有可能的類型,那麼你可以支持任何xml文件。
希望這有助於
編輯:或者使用的xs:anyType類型。
您可以擁有一個只定義了一個complexType的模式,其中包含所有的屬性。您的挑戰是找到一個模式處理器,它的API允許您請求針對該指定類型的給定輸入元素的驗證。這樣做的一個方法是使用感知模式的XSLT處理器(以及產生大量的輸出,你可以放棄的)
<xsl:template match="*">
<xsl:copy-of select="." type="my-complex-type"/>
<xsl:apply-templates/>
</xsl:template>
將驗證對您的類型聲明的文檔中的每個元素
我的可能性是有限的,因爲我只擴展當前只處理xsd的現有類。太糟糕了:( –
不幸,正如我所說的節點名稱不提供任何信息。開發人員可以絕對插入這裏所有的定義元素名單是不可能的。 –
然後你需要使用xs:anyType類型。 –
你能提供我提到的條件的例子嗎? –