首页 > 解决方案 > 如何为一周中的几天编写有效的 xsd ?

问题描述

我是 xml 新手,并尝试为至少一天且没有重复的天数列表编写 xsd。

我想允许在 xml 中以下列形式定义天数,例如:

<!-- working days -->
<days>
    monday
    tuesday
    wednesday
</days>

该元素不能为空、包含重复或错误写入的日期。

我编写了以下代码来验证 xml:

<xs:simpleType name="day">
    <xs:restriction base="xs:string">
        <xs:enumeration value="sunday"/>
        <xs:enumeration value="monday"/>
        <xs:enumeration value="tuesday"/>
        <xs:enumeration value="wednesday"/>
        <xs:enumeration value="thirsday"/>
        <xs:enumeration value="friday"/>
        <xs:enumeration value="saturday"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="dayList">
    <xs:list itemType="day"/>
    <xs:minLength value="1"/>
    <xs:maxLength value="7"/>
</xs:simpleType>

<xs:element name="days" type="dayList"/>

上面定义的问题是重复仍然是可能的。有没有办法解决这个问题?

谢谢你。

标签: xml

解决方案


XSD 1.0 中无法将列表中的项目限制为唯一。

它可以在 XSD 1.1 中通过向xs:assertiondayList 添加一个方面来完成:

test="count($value) eq count(distinct-values($value))"

推荐阅读