Отличается ли проверка шаблона в XSD? - PullRequest
3 голосов
/ 25 июня 2019

Я пытаюсь проверить элемент XML с проверкой шаблона XSD, используя приведенный ниже шаблон, и он не работает. Требуемое поведение - разрешить всем символам исключать символы, указанные в выражении шаблона.

<xsd:pattern value="^[^&gt;&lt;{}|^`\[\]\\\\]*$"/>

Valid data : TESTING
Invalid data : TE{ST]`I<NG

Но приведенный выше шаблон дает ошибку проверки допустимых данных (ТЕСТИРОВАНИЕ) также в XSD, но то же самое работает нормально, если я использую этот шаблон в пакете соответствия выражений java regualr. Пожалуйста, помогите.

1 Ответ

3 голосов
/ 25 июня 2019

В отличие от заявленных в нескольких комментариях и ответах на этот вопрос, такие объекты, как &gt; и &lt;, можно без проблем использовать в регулярных выражениях схемы XML.

Однако якоря, такие как символ вставки (^) и доллар ($) не поддерживаются.

С учетом следующей схемы с удаленными из шаблона якорями:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > 
  <xsd:element name="test" type="test"/> 

  <xsd:simpleType name="test"> 
    <xsd:restriction base="xsd:string"> 
      <xsd:pattern value="[^&gt;&lt;{}|^`\[\]\\\\]*"/> 
    </xsd:restriction> 
  </xsd:simpleType> 
</xsd:schema>

Это будет корректно подтверждено:

<test>testing</test>

Пока таких не будет:

<test>{testing</test>

<test>&gt;testing</test>
...