使用 XSD 方面模式验证 XML 时出现问题
Problem validating XML with XSD facet pattern
我正在尝试使用 xmllint 根据 XSD 验证我的 XML 字符串,但我不断收到此错误:
file_0.xml:6: element No: Schemas validity error : Element '{http://www.mrq.gouv.qc.ca/T5}No': [facet 'pattern'] The value 'NP666666' is not accepted by the pattern '(NP|np)d{6}'."
"file_0.xml:6: element No: Schemas validity error : Element '{http://www.mrq.gouv.qc.ca/T5}No': 'NP666666' is not a valid value of the local atomic type.
我实际上得到了 34 个错误,但它们都很相似。除数字外,其他所有部分都通过。
我的代码在 JavaScript 上,我正在手工制作要传递给 XML 的对象。
XML :
<P><Annee>2019</Annee>
<TypeEnvoi>1</TypeEnvoi>
<Preparateur><No>NP999999</No>
<Nom1>Garderie Papillons</Nom1>
<Adresse><Ligne1>5 Street name</Ligne1>
<Ville>Toronto</Ville>
<Province>QC</Province>
<CodePostal>G5T6R4</CodePostal>
</Adresse>
</Preparateur>
<NoCertification>RQ-19-99-999</NoCertification>
<NomLogiciel>NomLogiciel</NomLogiciel>
<CourrielResponsable>CourrielResponsable</CourrielResponsable>
<IdPartenaireReleves>1234567891234567</IdPartenaireReleves>
<IdProduitReleves>1234567891234567</IdProduitReleves>
</P>
XSD:
<xsd:element
name="P"
type="PStruct" />
<xsd:complexType
name="PStruct">
<xsd:sequence>
<xsd:element
name="Annee"
type="AnImpositionType">
</xsd:element>
<xsd:element
name="TypeEnvoi"
type="Indicateur1-4-6Type">
</xsd:element>
<xsd:element
name="Preparateur">
<xsd:complexType>
<xsd:sequence>
<xsd:element
name="No">
<xsd:simpleType>
<xsd:restriction
base="xsd:string">
<xsd:pattern
value="(NP|np)\d{6}" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element
name="Type"
type="Indicateur1-3Type"
minOccurs="0">
</xsd:element>
<xsd:element
name="Nom1"
type="Char30Type">
</xsd:element>
<xsd:element
name="Nom2"
type="Char30Type"
minOccurs="0">
</xsd:element>
<xsd:element
name="Adresse"
type="Adresse2Struct"
minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element
name="Informatique"
type="RessourceStruct"
minOccurs="0">
</xsd:element>
<xsd:element
name="Comptabilite"
type="RessourceStruct"
minOccurs="0">
</xsd:element>
<xsd:element
name="NoCertification">
<xsd:simpleType>
<xsd:restriction
base="xsd:string">
<xsd:pattern
value="RQ-\d{2}-\w{2}-\w{3}" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element
name="NomLogiciel"
type="Char40Type"
minOccurs="0">
</xsd:element>
<xsd:element
name="VersionLogiciel"
type="Char15Type"
minOccurs="0">
</xsd:element>
<xsd:element
name="CourrielResponsable"
type="Char60Type"
minOccurs="0">
</xsd:element>
<xsd:element
name="CourrielLangue"
type="LangueType"
minOccurs="0">
</xsd:element>
<xsd:element
name="IdPartenaireReleves"
type="Char16FixeType">
</xsd:element>
<xsd:element
name="IdProduitReleves"
type="Char16FixeType">
</xsd:element>
<xsd:element
name="NoCasEssai"
type="Char25Type"
minOccurs="0">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
(NP|np)d{6}
匹配 NPdddddd
或 npdddddd
.
您的意思可能是 (NP|np)\d{6}
,它将匹配数字而不是文字 d
个字母。
根据评论中的交流更新:
XSD 似乎被作为字符串处理,因此 \d{6}
在用于验证之前被解释为仅转义为 d{6}
。
我正在尝试使用 xmllint 根据 XSD 验证我的 XML 字符串,但我不断收到此错误:
file_0.xml:6: element No: Schemas validity error : Element '{http://www.mrq.gouv.qc.ca/T5}No': [facet 'pattern'] The value 'NP666666' is not accepted by the pattern '(NP|np)d{6}'."
"file_0.xml:6: element No: Schemas validity error : Element '{http://www.mrq.gouv.qc.ca/T5}No': 'NP666666' is not a valid value of the local atomic type.
我实际上得到了 34 个错误,但它们都很相似。除数字外,其他所有部分都通过。 我的代码在 JavaScript 上,我正在手工制作要传递给 XML 的对象。
XML :
<P><Annee>2019</Annee>
<TypeEnvoi>1</TypeEnvoi>
<Preparateur><No>NP999999</No>
<Nom1>Garderie Papillons</Nom1>
<Adresse><Ligne1>5 Street name</Ligne1>
<Ville>Toronto</Ville>
<Province>QC</Province>
<CodePostal>G5T6R4</CodePostal>
</Adresse>
</Preparateur>
<NoCertification>RQ-19-99-999</NoCertification>
<NomLogiciel>NomLogiciel</NomLogiciel>
<CourrielResponsable>CourrielResponsable</CourrielResponsable>
<IdPartenaireReleves>1234567891234567</IdPartenaireReleves>
<IdProduitReleves>1234567891234567</IdProduitReleves>
</P>
XSD:
<xsd:element
name="P"
type="PStruct" />
<xsd:complexType
name="PStruct">
<xsd:sequence>
<xsd:element
name="Annee"
type="AnImpositionType">
</xsd:element>
<xsd:element
name="TypeEnvoi"
type="Indicateur1-4-6Type">
</xsd:element>
<xsd:element
name="Preparateur">
<xsd:complexType>
<xsd:sequence>
<xsd:element
name="No">
<xsd:simpleType>
<xsd:restriction
base="xsd:string">
<xsd:pattern
value="(NP|np)\d{6}" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element
name="Type"
type="Indicateur1-3Type"
minOccurs="0">
</xsd:element>
<xsd:element
name="Nom1"
type="Char30Type">
</xsd:element>
<xsd:element
name="Nom2"
type="Char30Type"
minOccurs="0">
</xsd:element>
<xsd:element
name="Adresse"
type="Adresse2Struct"
minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element
name="Informatique"
type="RessourceStruct"
minOccurs="0">
</xsd:element>
<xsd:element
name="Comptabilite"
type="RessourceStruct"
minOccurs="0">
</xsd:element>
<xsd:element
name="NoCertification">
<xsd:simpleType>
<xsd:restriction
base="xsd:string">
<xsd:pattern
value="RQ-\d{2}-\w{2}-\w{3}" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element
name="NomLogiciel"
type="Char40Type"
minOccurs="0">
</xsd:element>
<xsd:element
name="VersionLogiciel"
type="Char15Type"
minOccurs="0">
</xsd:element>
<xsd:element
name="CourrielResponsable"
type="Char60Type"
minOccurs="0">
</xsd:element>
<xsd:element
name="CourrielLangue"
type="LangueType"
minOccurs="0">
</xsd:element>
<xsd:element
name="IdPartenaireReleves"
type="Char16FixeType">
</xsd:element>
<xsd:element
name="IdProduitReleves"
type="Char16FixeType">
</xsd:element>
<xsd:element
name="NoCasEssai"
type="Char25Type"
minOccurs="0">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
(NP|np)d{6}
匹配 NPdddddd
或 npdddddd
.
您的意思可能是 (NP|np)\d{6}
,它将匹配数字而不是文字 d
个字母。
根据评论中的交流更新:
XSD 似乎被作为字符串处理,因此 \d{6}
在用于验证之前被解释为仅转义为 d{6}
。