2009-07-19 64 views
3

我具有限定等性質的XML:XSD:模型屬性(名稱/值對)

<properties> 
    <property name="play_sound" value="true" /> 
    <property name="duration" value="30" /> 
</properties> 

是否有可能與XML模式,指定諸如條件「如果屬性名稱是‘持續時間’那麼該值必須是一個整數「。我認爲這是不可能的,建議如何在XML文件中對這類信息進行建模?

我一直在思考這樣的:

<properties> 
    <play_sound>true</play_sound> 
    <duration>30</duration> 
</properties> 

這樣我可以在我的架構定義類型restrictionos。但是,如果我有幾百種不同的屬性,未來可能會增長,會發生什麼......?

謝謝。

回答

1

XML Schema 1.0沒有這些約束。

XML Schema 1.1,目前正在開發中。

如果您使用Saxon XSLT/XQuery引擎,那麼將包含用於實驗的XML Schema 1.1的早期實現。

另一種選擇是使用Schematron

但通常這些都是在應用程序內部處理的。 XML Schema在描述數據的結構方面是公平的,但在實際驗證內容方面並不太好。

1

我不認爲你可以通過屬性名稱強制執行此操作。雖然你可以用Schematron做些事情。

在詳細的嚴格模式與寬鬆的緊湊模式之間有一個普遍的折衷。您必須根據XML文件的用途以及Xsd的使用情況來決定您的情況。

1

XSD沒有條件支持來做你想做的事。解析器驗證您的XML是否絕對至關重要?

如果是的話,你唯一的選擇是定義屬性類型(如你所描述)或屬性(例如<my_object play_sound="true" duration="30"/>

然而,通常如果發生在後一階段的驗證也沒關係(當你的XML被你的應用程序消化時),在這一點上很容易做到你想要的。

2

推薦的方法是使用特定屬性或具有特定類型的元素爲XML建模。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="properties"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="play_sound" type="xs:boolean"/> 
       <xs:element name="duration" type="xs:byte"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

<properties> 
    <play_sound>true</play_sound> 
    <duration>30</duration> 
</properties> 
相關問題