Регулярное выражение в определении схемы XML не выполняется - PullRequest
0 голосов
/ 06 декабря 2010

Я получаю следующую ошибку при проверке XML по схеме.

Value 'this/is/a/simple/node-path' is not facet-valid 
with respect to pattern '^(\w+[\w\-/])+\w' for type 'PathModel'.

Определение типа PathModel определяется как simpleType, как показано в следующем фрагменте. Используется <path>this/is/a/simple/node-path</path>

<xs:simpleType name="PathModel">
  <xs:restriction base="xs:string">
    <xs:pattern value="^(\w+[\w\-/])+\w" />
  </xs:restriction>
</xs:simpleType>

Ожидаемый результат указан в таблице соответствия.

this/is/a/simple/node-path       MATCHING
/this/is/a/simple/node-path      NOT MATCHING
this/is/a/simple/node-path/      NOT MATCHING
this/is/a/simple/nodep%th        NOT MATCHING (special characters)

Что не так? Спасибо

Ответы [ 2 ]

5 голосов
/ 06 декабря 2010

Удалить ведущий символ ^.


<xs:simpleType name="PathModel">
  <xs:restriction base="xs:string">
    <xs:pattern value="(\w+[\w\-/])+\w" />
  </xs:restriction>
</xs:simpleType>

Это единственное допустимое значение из предоставленного вами набора:


this/is/a/simple/node-path

Это должно помочь вам (проверено в моей Eclipse IDE).

Причина видна, например, здесь: http://www.regular -expressions.info / xml.html

"По сравнению с другими разновидностями регулярных выражений, разновидность схемы XML довольно ограничена в функциях. Поскольку она используется только для проверки соответствия всего элемента шаблону или нет, а не для извлечения совпадений из больших блоков данных. XML-схема всегда неявно привязывает все регулярное выражение. Регулярное выражение должно соответствовать всему элементу, чтобы элемент считался допустимым. Если у вас есть шаблон regexp, средство проверки XML-схемы будет применять его так же, как скажем, Perl, Java или .NET будут делать с шаблоном ^regexp$. "

0 голосов
/ 06 декабря 2010

Насколько я вижу, регулярное выражение кажется верным и должно давать результаты, показанные в вашей таблице соответствия, в соответствии со спецификацией XSD. Используя Microsoft .NET Framework 2 с тестовым набором, используя ваши значения пути и регулярное выражение, я получаю именно ваши ожидаемые результаты.

Итак, возможные причины того, что вы видите:

  • В используемой вами реализации XSD есть ошибка.
  • Ваш код не проверяет то, что вы думаете, он проверяет (хотя это кажется маловероятным, учитывая сообщение об ошибке, которое вы видите)

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

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