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 должно содержать несколько значений из списка, но ограничивать то, что они вводят перечислением выше, например, ‹days›Saturday, Wednesday‹/days›. Это возможно?


person ZeroInfinite    schedule 11.02.2014    source источник


Ответы (3)


Если вы можете потерять запятую (не поддерживается в качестве разделителя в 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.

person Petru Gardea    schedule 11.02.2014

Похоже, ваш вариант использования лучше обрабатывается с использованием регулярных выражений, поскольку вы упомянули пользовательский ввод:

.*day(,.*day)*

Вы можете заменить *.day на (Monday|Tuesday|...).

person CSJ    schedule 11.02.2014

как указано выше, но показать явно:

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

Это выражение включает в себя нужные вам значения плюс. Это также позволяет использовать «Пн, Пн, Пн, Вт, Пн», что может не быть большой проблемой в зависимости от того, как вы используете данные после их чтения. Я имею в виду, если это флаги, то: Пн, Пн, Пн не проблема.

person Tb.    schedule 20.11.2015