Php DOMDocument验证中的XSD架构无效

Php DOMDocument验证中的XSD架构无效,php,xml,xsd,xml-validation,Php,Xml,Xsd,Xml Validation,我有一个格式如下的XML文档: <?xml version="1.0" encoding="utf-8"?> <books-feed xmlns="{NS-URL}"> <generation-date>{DATE}</generation-date> <book id="{BOOK-ID}"> <title>{BOOK-TITLE}</title> <author>{BOOK-AUT

我有一个格式如下的XML文档:

<?xml version="1.0" encoding="utf-8"?>
<books-feed xmlns="{NS-URL}">
<generation-date>{DATE}</generation-date>
<book id="{BOOK-ID}">
    <title>{BOOK-TITLE}</title>
    <author>{BOOK-AUTHOR}</author>
    .......................................... ← other information tags [any]
</book>
.............................................. ← other <book> elements
</books-feed>

{DATE}
{书名}
{作者}
.......................................... ← 其他信息标签[任何]
.............................................. ← 其他要素
我正试图用这个XSD模式验证这个文件:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="books-feed">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="generation-date" type="xsd:string"/>
            <xsd:element name="book" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:any maxOccurs="unbounded" processContents="lax"/>
                    </xsd:sequence>
                    <xsd:attribute name="id" type="xsd:integer" use="required"/>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>
</xsd:schema>


所以DOMDocument::schemaValidate()返回FALSE。名称空间(books feed xmlns=“{NS-URL}”不等于模式xmlns)中是否存在此问题?或者我需要在模式中插入xmlns图书提要的xsd:attribute(in将导致“无效模式”警告)。或者什么?

实际问题应该记录在错误日志中

或者,请参见以下评论:

要点:


设置
libxml\u使用内部错误(true)
,然后使用
libxml\u获取错误()
检索错误。然后再次关闭它,使用
libxml\u use\u internal\u errors(false)

是的,您必须确保您的XSD具有与根元素之一匹配的targetNamespace

<xsd:schema xmlns="{NS-URL}" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="{NS-URL}" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="books-feed">
          ....
  </xsd:element>
</xsd:schema>

....
假设您希望XSD与提供的XML匹配,那么您的有效XSD可能如下所示:

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema xmlns="{NS-URL}" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="{NS-URL}" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="books-feed">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="generation-date" type="xsd:string" />
        <xsd:element maxOccurs="unbounded" name="book">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="title" type="xsd:string" />
              <xsd:element name="author" type="xsd:string" />
                    <xsd:any maxOccurs="unbounded" processContents="lax" minOccurs="0"/>
            </xsd:sequence>
            <xsd:attribute name="id" type="xsd:string" use="required" />
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

谢谢!我使用的是libxml\u use\u internal\u errors(true),但libxml\u get\u errors()提供了有关问题的更多信息。