首页 > 解决方案 > XML 数据对于模式“[A-FH-Z][AZ]|[AZ][A-QS-Z]”不是 Facet-valid

问题描述

使用“34”作为我的值时出现以下错误:

Cvc-pattern-valid:值 '34' 对于模式 '[A-FH-Z][AZ]|[AZ][A-QS-Z]' 对于类型 'TKodKrajuJPK' 而言不是 Facet-valid。,行“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”时,它仍然会出错:

Cvc-datatype-valid.1.2.3:“AA”不是联合类型“TKodKrajuJPK”的有效值。,“86”行,“56”列。

但是当我使用BB的时候错误就解决了。

有人可以澄清什么是有效值以及我应该输入哪种模式?

标签: xmlxsd

解决方案


这些是正则表达式。它们定义了有效大写字母的范围。

您的 XML 似乎包含一个数值 34。这显然是无效的。此外,您需要检查<xsd:restriction base="tns:TKodKraju">子句背后的内容。如果没有该子句,AA则通过验证。

原帖中最新曝光的 XSD 片段意味着该值需要通过对枚举器“SX”、“BQ”、“SS”等的第一次验证,然后是正则表达式模式。

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

推荐阅读