如何在XML中强制执行具有特定属性值的元素?
例如:
<events>
<event type="system" desc="this is a system event"/>
<event type="bla1" desc="this is bla1 event"/>
<event type="bla2" desc="this is bla2 event"/>
</events>
我需要一个规则来确保类型为attribute ='system'的event元素存在(一次)。 所有其他事件元素都是可选的;
答案 0 :(得分:4)
如果您使用的是XML Schema 1.0 ,则无法直接表达约束。您可以通过Schematron或XSLT直接在XML Schema 1.0之外完成。
如果您使用的是XML Schema 1.1 ,则可以xs:assert
通过<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.0">
<xs:element name="events">
<xs:complexType>
<xs:sequence>
<xs:element name="event" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="desc" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:assert test="count(event[@type = 'system']) = 1"/>
</xs:complexType>
</xs:element>
</xs:schema>
:
{{1}}