Шаблон регулярного выражения XSD: это или ничего

я пытаюсь определить правило схемы в XSD, для которого строка имеет длину 8 символов:

<PostedDate>42183296</PostedDate>

и заполнение пространства также допускается:

<PostedDate>        </PostedDate>

что привело меня к XSD:

<xs:simpleType name="DateFormat">
   <xs:restriction base="xs:string">
      <xs:length value="8" />            //exactly 8 characters long
</xs:simpleType>

но значение can также может быть пустым (т. е. ноль символов):

<PostedDate></PostedDate>
<PostedDate />

что привело меня к наивной попытке:

<xs:simpleType name="DateFormat">
   <xs:restriction base="xs:string">
      <xs:length value="8" />            //exactly 8 characters long
      <xs:length value="0" />            //exactly 0 characters long
</xs:simpleType>

что, конечно, не допускается.

как часто бывает в XSD, большинство форматы не могут быть легко представлены с помощью XSD, поэтому я решил попробовать правило регулярного выражения:

.{8} | ""

который пытается преобразовать в XSD, я типа:

<xs:simpleType name="DateFormat">
    <xs:restriction base="xs:string">
        <xs:pattern value=".{8}|''" />
    </xs:restriction>
</xs:simpleType>

но это не работает:

''20101111' is not facet-valid with respect to pattern '.{8}|''' for type 'DateFormat'

я тоже пробовал

  • <xs:pattern value="[0-9]{8}|''" />
  • <xs:pattern value="([0-9]{8})|('')" />
  • <xs:pattern value="(d{8})|('')" />

может ли кто-нибудь еще вещь шаблона, который решает проблему соответствия либо - какой-то конкретный узор - пусто

бонус: может кто-нибудь указать на место в документация XSD что говорит о том, что d совпадения цифр? Или каковы другие специальные коды шаблонов?

2 ответов


Я могу предположить, что скороговорки должны выглядеть как \d{8}| Это означает "восемь цифр или ничего", но не восемь цифр или две кавычки. Однако это не объясняет, почему 20101111 не соответствует. Вы уверены, что в значении элемента нет пробелов или других дополнительных символов?
\d, как говорят, соответствуют цифрам в разделе " F. 1.1 Класс Символов Убегает"


Я также в той же ситуации, что и пустая строка, в противном случае она должна иметь 6 номеров длины. Наконец я использовал следующее. Это работает для меня

<xs:simpleType name="DateFormat">
    <xs:restriction base="xs:string">
        <xs:pattern value="|[0-9]{8}" />
    </xs:restriction>
</xs:simpleType>