xsd从枚举或等效类型中选择多个值

时间:2014-02-11 13:03:35

标签: xml xsd

我有以下XSD示例

<xs:element name="days" minOccurs="0">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumeration value="Monday"/>
            <xs:enumeration value="Tuesday"/>
            <xs:enumeration value="Wednesday"/>
            <xs:enumeration value="Thursday"/>
            <xs:enumeration value="Friday"/>
            <xs:enumeration value="Saturday"/>
            <xs:enumeration value="Sunday"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

xml提取应该能够包含列表中的多个值,但是限制它们输入上面的枚举值,例如,&lt; days&gt; Saturday,Wednesday&lt; / days&gt;。这可能吗?

3 个答案:

答案 0 :(得分:4)

如果您可以松开逗号(在XSD中不支持作为分隔符),并且满足于空格,那么这是您的解决方案:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="days">
        <xsd:simpleType>
            <xsd:list>
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:enumeration value="Monday"/>
                        <xsd:enumeration value="Tuesday"/>
                        <xsd:enumeration value="Wednesday"/>
                        <xsd:enumeration value="Thursday"/>
                        <xsd:enumeration value="Friday"/>
                        <xsd:enumeration value="Saturday"/>
                        <xsd:enumeration value="Sunday"/>
                    </xsd:restriction>                  
                </xsd:simpleType>               
            </xsd:list>
        </xsd:simpleType>
    </xsd:element>
</xsd:schema>

你基本上使用的是一个列表,所以这样的东西是完全有效的:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<days xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Monday Tuesday Wednesday </days>

要在此处积极主动......例如,如果某人可能希望确保值的唯一性,则无法在XSD中强制执行此操作。

答案 1 :(得分:1)

因为您提到了用户输入,所以使用正则表达式可以更好地处理您的用例:

.*day(,.*day)*

您可以将*.day替换为(Monday|Tuesday|...)

答案 2 :(得分:0)

如上所述,但要明确说明:

<xs:simpleType name="DayOfWeek">
  <xs:restriction base="xs:string">
    <xs:pattern value="(Mon|Tues|Wed)(,(Mon|Tues|Wed))*"/>
  </xs:restriction>
</xs:simpleType>

此表达式包含您想要的值加 这也允许“Mon,Mon,Mon,Tues,Mon”这可能不是一个大问题,这取决于您在阅读后如何使用数据。我的意思是如果他们是旗帜那么:周一,周一,周一不是问题。