无法验证XSD

时间:2013-11-27 12:52:18

标签: php xml libxml2 xsd-validation

我遇到与No matching global declaration available for the validation root类似的问题,但它无法帮助我解决验证XML的问题。 在php.net的评论中,我读到了根元素的子元素也需要命名空间或其他东西。我试过变种,但它不会解决问题,也不会改变信息。有谁知道什么是错的?

libxml Version => 2.7.6
libxml
libxml2 Version => 2.7.6
libxslt compiled against libxml Version => 2.7.6

PHP:

print_r($xml->schemaValidate('customer.xsd'));

错误:

PHP Warning:  DOMDocument::schemaValidate():
Element '{http://xxx.de/ecom-customer}customerExport':
No matching global declaration available for the validation root.

XML开头:

<?xml version="1.0" encoding="UTF-8"?>
<xxx:customerExport xmlns:xxx="http://xxx.de/ecom-customer">
  <datasource>PROD</datasource>
...

XSD部分:

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xxx="http://xxx.de/ecom-customer"
targetNamespace="http://xxx.de/ecom-customer"
jxb:version="2.0">

<xsd:element name="customerExport" type="xxx:customerExport"
    xmlns="xxx">
    <xsd:annotation>
        <xsd:appinfo>
            <jxb:class name="CustomerExportRoot" />
        </xsd:appinfo>
    </xsd:annotation>
</xsd:element>

1 个答案:

答案 0 :(得分:2)

您的架构文档应指定您声明命名空间http://xxx/ecom-customer的元素(和其他内容)。使用根元素上的targetNamespace属性。

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           targetNamespace="..."
>

  ...
  <xs:element name="customerExport">...</xs:element>
  ...
</xs:schema>

实际上,您的架构声明了一个扩展名为{}customerExport的元素,而不是扩展名为{http://xxx/ecom-customer}customerExport的元素。