【发布时间】:2017-03-16 20:53:59
【问题描述】:
我研究了很多主题,但仍然需要一些帮助。
我需要验证一个必须有 5 个元素的 XML,每个元素都有一个特定的值。他们不能重复。
xml sn-p: ...
<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 个同名的“记录器”。
*使用唯一约束更新了 xsd。缺少一些东西来使这个验证工作。
【问题讨论】: