如何在一周中的几天内编写有效的xsd?

时间:2018-09-15 11:44:57

标签: xml

我是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"/>

上面定义的问题是仍然可以重复。 有办法解决吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

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

在XSD 1.1中,可以通过在dayList中添加一个xs:assertion构面来实现:

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