unicode正则表达式的PHP-XSD架构验证错误 说明:

unicode正则表达式的PHP-XSD架构验证错误 说明:,php,xml,validation,xsd,schema,Php,Xml,Validation,Xsd,Schema,当我尝试使用包含Unicode正则表达式的给定XSD模式验证XML文件时 表达式中,函数DOMDocument::schemaValidate返回验证错误。 XSD模式是W3C格式良好的,验证通过了另一个模式 验证工具。 如果XSD模式是这样的格式(没有正方形),则不会出现问题 括号): XSD模式: 实际结果: 这不是对您问题的完整回答,但可能需要一些澄清: XSD中的正则表达式,即使它可能类似于带有preg_match的正则表达式,也是另一回事。因此,假设某些东西必须与XSD一起工作,因

当我尝试使用包含Unicode正则表达式的给定XSD模式验证XML文件时 表达式中,函数DOMDocument::schemaValidate返回验证错误。 XSD模式是W3C格式良好的,验证通过了另一个模式 验证工具。 如果XSD模式是这样的格式(没有正方形),则不会出现问题 括号):


XSD模式:
实际结果:
这不是对您问题的完整回答,但可能需要一些澄清:

XSD中的正则表达式,即使它可能类似于带有
preg_match
的正则表达式,也是另一回事。因此,假设某些东西必须与XSD一起工作,因为它确实与
preg_match
一起工作,这只是猜测,而不是严格的测试

带有属性
Ll
的小写字母是由Unicode定义的,XSD库应该支持它

也许这是一个关于范畴否定性的问题,因为它只说非否定性的东西,而不是非否定性的角色类别中的东西

尝试:


架构良好,您的架构处理器存在错误或不一致性。模式处理器实现与XSD规范中定义的方言有些不同的正则表达式方言其实并不少见:懒惰的实现者只是直接将正则表达式传递给他们选择的库。

XSD模式验证是给我的。我不能更改它,否则我就足以删除方括号。然后你需要修复库组件。我认为它应该按照规范工作,所以库已损坏,需要修复。这是一款免费软件,你可以对它进行修补,并将修补程序添加到新版本中。那么你认为这是一个php错误吗?我试图在php网站上报告它,但我还没有收到任何回应。我无法判断它是一个bug还是一个特性。但是,这肯定不是PHP,而是底层库(可能是XSLT)。您应该在这里留下一个问题的bug报告链接。问题是,其他验证器(例如Notepad++XML工具)的验证也会失败,但根据w3c规范,验证在形式上是正确的。
<xsd:pattern value="\P{Ll}+"/>
function libxml_display_errors()
{
   $errors = libxml_get_errors();

   print_r($errors);

   libxml_clear_errors();
}

libxml_use_internal_errors(true);

$dom = new DOMDocument();
$dom->load('test.xml');

if ( !$dom->schemaValidate('test.xsd') ) {
  echo "XML Error\n";
  libxml_display_errors();
} else {
  echo "XML ok\n";
}
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xsd:simpleType name="noLowerCase">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="[\P{Ll}]+"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="DatiUtenteType">
        <xsd:sequence>
            <xsd:element name="Cognome" type="noLowerCase"/>
            <xsd:element name="Nome" type="noLowerCase"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="DataExchangeFisso">
        <xsd:sequence>
            <xsd:element name="DatiUtente" type="DatiUtenteType"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:element name="ListOfDataExchange">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="DataExchangeFisso" type="DataExchangeFisso" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
<?xml version="1.0" encoding="UTF-8"?>
<ListOfDataExchange>
  <DataExchangeFisso>
    <DatiUtente>
      <Cognome>FOO</Cognome>
      <Nome>BAR</Nome>
    </DatiUtente>
  </DataExchangeFisso>
</ListOfDataExchange>
XML ok
XML Error
Array
(
    [0] => LibXMLError Object
        (
            [level] => 2
            [code] => 1839
            [column] => 0
            [message] => Element 'Cognome': [facet 'pattern'] The value 'FOO' is not accepted by the pattern '[\P{Ll}]+'.
            [file] => /var/www/html/test.xml
            [line] => 5
        )

    [1] => LibXMLError Object
        (
            [level] => 2
            [code] => 1824
            [column] => 0
            [message] => Element 'Cognome': 'FOO' is not a valid value of the atomic type 'noLowerCase'.
            [file] => /var/www/html/test.xml
            [line] => 5
        )

    [2] => LibXMLError Object
        (
            [level] => 2
            [code] => 1839
            [column] => 0
            [message] => Element 'Nome': [facet 'pattern'] The value 'BAR' is not accepted by the pattern '[\P{Ll}]+'.
            [file] => /var/www/html/test.xml
            [line] => 6
        )

    [3] => LibXMLError Object
        (
            [level] => 2
            [code] => 1824
            [column] => 0
            [message] => Element 'Nome': 'BAR' is not a valid value of the atomic type 'noLowerCase'.
            [file] => /var/www/html/test.xml
            [line] => 6
        )
)
[^\p{Ll}]+