XML длина проверки схемы строки - PullRequest
0 голосов
/ 20 января 2020

Мне сложно понять, что означает ограничение длины для строк на XML языке схемы. Я протестировал две разные реализации валидатора XMLSchema и получил противоречивые результаты. Для тестирования я использовал следующую схему и файл:

<?xml version="1.0" encoding="UTF-8"?>
<test xmlns="http://www.example.org/NewXMLSchema"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://www.example.org/NewXMLSchema NewXMLSchema.xsd ">
   <id>&#x1f600;xx</id>
</test>

и

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/NewXMLSchema" xmlns:tns="http://www.example.org/NewXMLSchema" elementFormDefault="qualified">
    <simpleType name="MyFixedString">
       <restriction base="string">
          <maxLength value="3"></maxLength>
       </restriction>
    </simpleType>
    <complexType name="NewComplexType">
        <sequence>
            <element name="id" type="tns:MyFixedString"></element>
        </sequence>
    </complexType>
    <element name="test" type="tns:NewComplexType"></element>
</schema>

Пишет в IDE ошибка при подчеркивании элемента id строкой чтения, что это не так схема соответствует. Код python, выполненный с Python 3, говорит, что файл XML соответствует схеме. Интересно, соответствует ли схема XML файла или нет. Я думаю, дело в том, как рассчитываются символы (независимо от того, что именно означает этот термин): длина строки - это число кодовых точек Юникода или число суррогатов utf16 или количество графем.

Возможно ли, что реализация (Python 3, которая использовала AFAIK UFT-32) и Java (UTF-16) просочилась в проверку XMLSchema?

Есть какие-либо предложения?

- Мик

Кстати: встроенный процессор схемы Java 8 жалуется, что мой пример тоже не соответствует схеме.

1 Ответ

1 голос
/ 20 января 2020

Правильная семантика maxLength заключается в том, что он применяется к количеству символов Unicode (кодовые точки), а не к количеству октетов (или 16-битных кодовых единиц) в любой конкретной кодировке строки.

Все ли валидаторы схемы на самом деле соответствуют этому определению, я не могу сказать. Но определение ясно.

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

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