一个或多个元素,至少一个具有给定属性值
One or more elements, at least one with given value for an attribute
我需要在 XML 架构中描述以下内容:一个元素必须出现 1 次或多次,但是 该元素只能出现一次必须将属性 "properties" 设置为值 "nav"
示例:
<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>
我的 "best" 尝试是:
<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.
很明显,这个模式不是确定性的,因为验证器无法决定他是否应该使用该元素的 2 个定义中的第一个或第二个来检查遇到的 item
元素。 ..
...但是我怎样才能做到这一点?这可能吗?
这无法使用 XSD 1.0 实现,它需要 XSD 1.1 和断言。我认为 PHP 中的默认模式验证器不支持 XSD 1.1.
我需要在 XML 架构中描述以下内容:一个元素必须出现 1 次或多次,但是 该元素只能出现一次必须将属性 "properties" 设置为值 "nav"
示例:
<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>
我的 "best" 尝试是:
<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.
很明显,这个模式不是确定性的,因为验证器无法决定他是否应该使用该元素的 2 个定义中的第一个或第二个来检查遇到的 item
元素。 ..
...但是我怎样才能做到这一点?这可能吗?
这无法使用 XSD 1.0 实现,它需要 XSD 1.1 和断言。我认为 PHP 中的默认模式验证器不支持 XSD 1.1.