Xml架构,如何确保一个元素存在特定的属性值

时间:2013-10-23 13:59:43

标签: xml xsd

如何在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元素存在(一次)。 所有其他事件元素都是可选的;

1 个答案:

答案 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}}