Проверка правильности меньше (<) и больше (>) в XML с помощью XSD?
У меня есть этот XML:
<?xml version="1.0" encoding="utf-8"?>
<data>
<A>2>1</A>
<B>0<1</B>
</data>
и я хочу проверить это с помощью этого XSD:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="A">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[^<>]+" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="B">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[^<>]+" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
Я использую xmllint для проверки, а затем я получил эту ошибку:
Ошибка достоверности схемы: Элемент 'A': [facet 'pattern'] Значение '2>1' не принято шаблоном '[^<>]'.
Ошибка достоверности схемы: Элемент 'B': [facet 'pattern'] Значение '0<1' не принято шаблоном '[^ <>]'
Как все видят, у меня нет <
или же >
в стихии A
а также B
, я имею 2>1
а также 0<1
, Прежде чем xmllint проверяет XML, он передает 2>1
в 2>1
а также 0<1
в 0<1
, а затем проверяет и сообщает, что они не верны!
Как я могу позволить строку "2>1"
а также "0<1"
передать шаблон, который запрашивает, чтобы строка не имела символ меньше или больше?
1 ответ
Этот обновленный XSD,
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="A" type="ltGtExpType"/>
<xs:element name="B" type="ltGtExpType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="ltGtExpType">
<xs:restriction base="xs:string">
<xs:pattern value="\d+[<>]\d+" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
проверит ваш XML,
<?xml version="1.0" encoding="utf-8"?>
<data>
<A>2>1</A>
<B>0<1</B>
</data>
успешно.
Тем не менее, вы, кажется, пытаетесь различить <
а также <
(и между >
а также >
) на уровне XSD. Это невозможно или необходимо для каких-либо разумных требований в любом случае. Синтаксический анализатор XML выполнит эти замены до проверки. Более того, синтаксический анализатор XML уже в рамках проверки правильности сформировал ошибку, касающуюся любого литерала. <
встреченные символы, которые не являются частью начального тега.