我需要在XML模式中描述以下內容:一個元素必須出現一次或多次,但是該元素的一次出現必須具有該屬性「屬性」 設置值 「導航」一個或多個元素,至少一個具有給定值的屬性
例子:
<manifest>
<item href="example" id="02" properties="cover-image" /> <!-- optional item -->
<item href="dummy" id="sample" properties="nav" /> <!-- mandatory item with "nav" value for "properties" attribute -->
<item href="example" id="02" properties="mathlm scripted" /> <!-- optional item -->
</manifest>
我的 「最好」 的嘗試是:
<xs:element name="manifest">
<xs:complexType>
<xs:choice>
<xs:element name="item" minOccurs="1" maxOccurs="1" ><!-- at least one (item property="nav")-->
<xs:complexType>
<xs:attribute name="href" type="xs:string" use="required" />
<xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="media-type" type="xs:string" use="required" />
<xs:attribute name="fallback" type="xs:string" />
<xs:attribute name="properties" type="xs:string" use="required" fixed="nav" />
<xs:attribute name="media-overlay" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="item" minOccurs="0" maxOccurs="unbounded" >
<xs:complexType>
<xs:attribute name="href" type="xs:string" use="required" />
<xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="media-type" type="xs:string" use="required" />
<xs:attribute name="fallback" type="xs:string" />
<xs:attribute name="properties" type="xs:string" />
<xs:attribute name="media-overlay" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:choice>
<xs:attribute name="id" type="xs:string" />
</xs:complexType>
</xs:element>
壞嘗試雖然,因爲驗證給了我以下錯誤:
local complex type: The content model is not determinist.
很顯然,這個模式是不確定的,因爲如果他是應該與第一檢查中遇到item
元素驗證不能決定或者這個元素的2個定義中的第二個......
......但是我怎麼能做到這一點呢?這可能嗎?
你可以使用模式1.1嗎?在這種情況下,你可以使用斷言('')。 – potame
@potame我現在找不到答案,但我認爲我不能(在PHP中使用'DOMDocument :: schemaValidate()')。幾個月前我有另一個問題(條件子元素取決於「type」屬性我記得我發現的答案是:當php集成模式1.1時,這將是可能的......我將在那個方向進一步搜索。 – fpierrat