XML Данные недействительны по отношению к шаблону '[A-FH-Z] [AZ] | [AZ] [A-QS-Z]' - PullRequest
0 голосов
/ 20 марта 2020

Я получаю приведенную ниже ошибку при использовании «34» в качестве моего значения:

Cv c -pattern-valid: значение '34' не является действительным по отношению к фасету с учетом шаблона ' [A-FH-Z] [AZ] | [AZ] [A-QS-Z] 'Для типа' TKodKrajuJPK '., Строка' 86 ', столбец' 56 '.

Ниже приведено образец Типа из XSD:

<xsd:simpleType name="TKodKraju">
        <xsd:union memberTypes="etd:TKodKraju tns:TKodKrajuISO"/>
    </xsd:simpleType>
    <xsd:simpleType name="TKodKrajuISO">
        <xsd:annotation>
            <xsd:documentation>Uzupełnienie słownika kodów krajów o brakujące kody wg ISO 3166 oraz unijny kod dla Grecji - EL</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:normalizedString">
            <xsd:enumeration value="SX">
                <xsd:annotation>
                    <xsd:documentation>WYSPA SINT MAARTEN (CZĘŚĆ HOLENDERSKA WYSPY)</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="BQ">
                <xsd:annotation>
                    <xsd:documentation>BONAIRE, SINT EUSTATIUS I SABA</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="SS">
                <xsd:annotation>
                    <xsd:documentation>SUDAN POŁUDNIOWY</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="CW">
                <xsd:annotation>
                    <xsd:documentation>CURAÇAO</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="EL">
                <xsd:annotation>
                    <xsd:documentation>GRECJA</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="TKodKrajuJPK">
        <xsd:annotation>
            <xsd:documentation>Wyklucznie ze słownika kodów krajów kodu dla Grecji - GR</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="tns:TKodKraju">
            <xsd:pattern value="[A-FH-Z][A-Z]"/>
            <xsd:pattern value="[A-Z][A-QS-Z]"/>
        </xsd:restriction>
    </xsd:simpleType>

Насколько я понял, это должна быть заглавная буква в диапазоне A-Z. Однако, когда я использую 'AA', он по-прежнему выдает ошибку:

Cv c -datatype-valid.1.2.3: 'AA' не является допустимым значением типа объединения 'TKodKrajuJPK'. , Строка '86', столбец '56'.

Но когда я использую BB, ошибка устраняется.

Может кто-то уточнить, какие действительные значения и какой шаблон следует Я вставил?

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Похоже, есть две ошибки проверки, о которых вы нам рассказываете.

Во-первых, «34» не соответствует регулярному выражению, поскольку допускает только заглавные буквы.

Во-вторых, «AA» является недействительным по более сложным причинам. Тип TKodKrajuJPK определяется как ограничение TKodKraju, а TKodKraju определяется как объединение etd:TKodKraju и tns:TKodKrajuISO. Таким образом, чтобы быть действительным, «AA» должен удовлетворять ограничениям (a) для типа TKodKrajuJPK (что он делает) и (b) для одного из типов etd:TKodKraju и tns:TKodKrajuISO.

You мы не показали нам тип etd:TKodKraju, поэтому мы не знаем, является ли он действительным против этого (но свидетельства предполагают, что это не так), и, конечно, он недействителен для типа tns:TKodKrajuISO. потому что это перечисление 5 указанных c значений.

Поэтому я думаю, что нам нужно посмотреть, является ли AA действительным в отношении типа etd:TKodKraju, и я подозреваю, что это не так.

0 голосов
/ 20 марта 2020

Это регулярные выражения. Они определяют диапазоны допустимых заглавных букв.

Кажется, что ваш XML содержит числовое значение 34. Что, очевидно, недопустимо. Кроме того, вам нужно проверить, что стоит за предложением <xsd:restriction base="tns:TKodKraju">. Без этого условия AA проходит проверку.

Последнее представление в исходной публикации, фрагменты XSD, означает, что значение должно пройти первую проверку по счетчику «SX», «BQ», « SS ", et c. и только после этого шаблоны регулярных выражений.

XML

<?xml version="1.0"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="kod.xsd">
    <kod>AA</kod>
</root>

XSD

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="kod"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="kod">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern value="[A-FH-Z][A-Z]"/>
                <xs:pattern value="[A-Z][A-QS-Z]"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>

Выход

Running custom validation engine Saxonica 9.8.0.12 Validator...
SAXON-EE 9.8.0.12J from Saxonica validate complete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...