2017-03-14 94 views
0

我看了很多話題,還需要一些幫助。XML架構 - 我可以使用枚舉的唯一驗證進行驗證嗎?

我需要驗證一個XML,它必須包含5個元素,每個元素都有一個特定的值。他們不能重複。

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個「記錄器」,其名稱相同。

*更新了具有唯一約束的xsd。缺少一些東西來使這個驗證工作。

回答

0

是的,您可以結合使用xs:unique和xs:enumeration。只需添加一個xs:唯一約束的元素聲明爲記錄器元素的父:

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

我不知道是什麼的一部分,「把它添加到元素聲明爲記錄器元素的父」 ISN」清除。 –

+0

剛剛更新了xsd片段。感謝所有的幫助。 – fabionicastro