【问题标题】:XML Schema - can I use unique with enumeration for validation?XML Schema - 我可以使用唯一的枚举进行验证吗?
【发布时间】: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。缺少一些东西来使这个验证工作。

【问题讨论】:

    标签: xml xsd schema


    【解决方案1】:

    是的,您可以结合使用 xs:unique 和 xs:enumeration。只需在 logger 元素的父元素声明中添加一个 xs:unique 约束:

    <xs:unique name="uniquity">
      <xs:selection xpath="logger"/>
      <xs:field xpath="@name"/>
    </xs:unique>
    

    【讨论】:

    • 我不确定“将它添加到记录器元素的父元素的元素声明”的哪一部分不清楚。
    • 刚刚更新了xsd sn-p。感谢所有帮助。
    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2017-09-05
    • 1970-01-01
    • 2013-09-02
    相关资源
    最近更新 更多