Схема XML; несколько из списка допустимых значений атрибутов

Я достаточно новичок в работе со схемами XML, поэтому извините за мою некомпетентность, если это более тривиально, чем я сам полагаю.

Я пытаюсь создать обязательный атрибут, который должен содержать одно или несколько строковых значений, разделенных пробелами, из списка. Список представляет собой 4 типичных метода HTTP-запроса; получить , опубликовать , поместить и удалить .

Итак, допустимые элементы будут включать:

<rule methods="get" />
<rule methods="get post" />
<rule methods="post put delete" />

В то время как недопустимые элементы будут включать:

<rule methods="get get" />
<rule methods="foobar post" />
<rule methods="get;post;put" />

Я пытался обмануть перечисления и длину, но не думаю, что понимаю, что мне нужно делать ( или, если на то пошло, возможно ли это на самом деле, хотя кажется, что это должно быть )


Вот где я сейчас, благодаря @tdrury:

<xs:attribute name="methods" use="required">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
            <xs:pattern value="(?:(?:get|post|put|delete)\s?){1,4}" />
        </xs:restriction>
    </xs:simpleType>
</xs:attribute>

Что работает, за исключением повторения ( , например get get или post post post ) и отсутствие пробелов (, например getpost или postputdelete )


Edit :

Немного поигравшись с этим, я пришел к идее: перечислить все возможные последовательности. К счастью, этот список ( на данный момент ) привязан к четырем обычным транспортным методам: get , post , put и удалить , поэтому я подумал:

<xs:restriction base="xs:string">
    <xs:whiteSpace value="collapse" />
    <xs:enumeration value="delete" />
    <xs:enumeration value="put" />
    <xs:enumeration value="put delete" />
    <xs:enumeration value="post" />
    <xs:enumeration value="post delete" />
    <xs:enumeration value="post put" />
    <xs:enumeration value="post put delete" />
    <xs:enumeration value="get" />
    <xs:enumeration value="get delete" />
    <xs:enumeration value="get put" />
    <xs:enumeration value="get put delete" />
    <xs:enumeration value="get post" />
    <xs:enumeration value="get post delete" />
    <xs:enumeration value="get post put" />
    <xs:enumeration value="get post put delete" />
</xs:restriction>

Может ли кто-нибудь увидеть причину, по которой это не будет хорошей идеей?

5
задан Dan Lugg 10 January 2012 в 03:43
поделиться