RegEx для ограничения количества единиц кода UTF-16 для файла XSD - PullRequest
0 голосов
/ 15 октября 2019

Я работаю над файлом XSD для файлов XML, которые необходимо отправить в устаревшую систему. Эта устаревшая система имеет ограничения размера поля, указанные в # кодовых единицах UTF-16.

Например, поле description может содержать не более 35 кодовых единиц UTF-16.

Я сейчас пытаюсь придумать регулярное выражение, которое можно вставить в XSD, чтобы оно ограничивало значение соответствующего поля не более чем 35 единицами кода UTF-16.

MyПервая попытка была такой:

    <xs:element name="description">
        <xs:annotation>
            <xs:documentation>A description for the document</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:annotation>
                <xs:documentation>A sequence of up to 35 UTF-16 code units</xs:documentation>
            </xs:annotation>
            <xs:restriction base="xs:string">
                <xs:pattern value="^(|([\x{0}-\x{FFFF}][\x{0}-\x{FFFF}]|[\x{10000}-\x{10FFFF}]){0,17}[\x{0}-\x{FFFF}]?|[\x{0}-\x{FFFF}]?([\x{0}-\x{FFFF}][\x{0}-\x{FFFF}]|[\x{10000}-\x{10FFFF}]){0,17})$"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>

Некоторая предыстория этого регулярного выражения:

  • Символ BMP (базовая многоязычная плоскость) ([\x{0}-\x{FFFF}]) представлен в виде одного UTF-Кодовая единица 16.
  • Символ астральной плоскости ([\x{10000}-\x{10FFFF}]) представляется в виде двух кодовых единиц UTF-16 (в качестве суррогатной пары).

Моя (неудачная) идея быладля реализации этого ограничения:

  • Существует не более 17 групп, которые являются либо a) парой символов BMP, либо b) одним символом астральной плоскости.
  • Это не более 17группам может предшествовать или следовать один символ BMP.

Но, очевидно, это не работает для строк типа a?a?a, где между двумя символами астральной плоскости находится один символ BMP.

Возможно, существует другой способ реализации ограничения дляколичество единиц кода UTF-16 в файле XSD?

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