Мне сложно понять, что означает ограничение длины для строк на 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>😀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 жалуется, что мой пример тоже не соответствует схеме.