我研究了很多主题,但仍需要一些帮助。
我需要验证一个必须包含5个元素的XML,每个元素都有一个特定的值。他们不能重复。
xml片段: ...
<logger name="br.com.xxxx" additivity="false">
<level value="info"/>
<appender-ref ref="FILE-rolling"/>
</logger>
<logger name="br.com.web.aq" additivity="false">
<level value="info"/>
<appender-ref ref="FILE-rolling"/>
</logger>
<logger name="br.com.data.connector" additivity="false">
<level value="info"/>
<appender-ref ref="FILE-rolling"/>
</logger>
<!--FACES LOGGER-->
<logger name="javax.faces" additivity="false">
<level value="info"/>
<appender-ref ref="FILE-rolling"/>
</logger>
<!--MYFACES LOGGER-->
<logger name="org.apache.myfaces" additivity="false">
<level value="info"/>
<appender-ref ref="FILE-rolling"/>
</logger>
到目前为止,我的xsd只是验证值列表,如下所示:
<xsd:element name="configuration">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="3" maxOccurs="3" ref="property"/>
<xsd:element minOccurs="1" maxOccurs="1" ref="appender"/>
<xsd:element minOccurs="5" maxOccurs="5" name="logger">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="level"/>
<xsd:element ref="appender-ref"/>
</xsd:sequence>
<xsd:attribute name="additivity" type="xsd:string" use="required" fixed="false"/>
<xsd:attribute name="name" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:token">
<xsd:enumeration value="br.com.xxxx"/>
<xsd:enumeration value="br.com.web.aq"/>
<xsd:enumeration value="br.com.connector"/>
<xsd:enumeration value="javax.faces"/>
<xsd:enumeration value="org.apache.myfaces"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
<xsd:unique name="uniquity">
<xsd:selector xpath="logger"/>
<xsd:field xpath="@name"/>
</xsd:unique>
</xsd:element>
但就目前而言,XML可以拥有2个记录器&#39;同名。
*使用唯一约束更新了xsd。缺少一些可以使验证工作的东西。
答案 0 :(得分:0)
是的,您可以结合使用xs:unique和xs:enumeration。只需在记录器元素的父元素的元素声明中添加xs:unique约束:
<xs:unique name="uniquity">
<xs:selection xpath="logger"/>
<xs:field xpath="@name"/>
</xs:unique>