Шаблон XSD, соответствующий порядку приоритета слов, разделенных запятыми - PullRequest
5 голосов
/ 30 ноября 2009

У меня есть такой тег

<order>foo,bar,goo,doo,woo</order>

, что мне нужно проверить с помощью xsd.

Как написать шаблон регулярного выражения, соответствующий строке, содержащей:

  1. Список элементов любой из {foo, bar, goo, doo, woo} максимум один раз
  2. или пусто.

Допустимые примеры:

<order>foo,bar,goo,doo,woo</order>
<order>foo,bar,goo</order>
<order>foo,doo,goo,woo</order>
<order>woo,foo,goo,doo,bar</order>
<order></order>

Invalid:

<order>foo,foo</order>
<order>,</order>
<order>fo</order>
<order>foobar</order>

Это должно работать в различных парсерах XML / XSD .

Ответы [ 2 ]

3 голосов
/ 30 ноября 2009

Я не думаю, что вы можете выразить все правила в регулярном выражении. Тем более, будет трудно обеспечить соблюдение принципа «максимум один раз». Это самое близкое, что я придумал,

<xs:simpleType name="order">
    <xs:annotation>
      <xs:documentation>
      Comma-separated list of anything
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[^,]+(,\s*[^,]+)*"/>
    </xs:restriction>
</xs:simpleType>

Возможно, вы захотите использовать пробел в качестве разделителя. Это чаще встречается в файлах XML. XML-схема имеет встроенный тип "list" , определенный для списка, разделенного пробелами.

0 голосов
/ 08 декабря 2009

Я могу написать файл схемы, если они следуют некоторой последовательности .. как {foo, bar, goo, doo, woo}
но в вашем случае вы говорите, что они могут появиться в ЛЮБОЙ ПОСЛЕДОВАТЕЛЬНОСТИ ..
так (5P5 + 5P4 + 5P3 + 5P2 + 5P1 + 1) = 326 паттернов .. !!!

Если бы была какая-то последовательность, как я упомянул ... то число шаблонов было бы .. 32 .. терпимо ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...