2

私はそのようなフォーマットの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>

そして、私はこの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をスキーマに挿入する必要があります(「無効なスキーマ」警告が発生します)。または何?

4

2 に答える 2

2

実際の問題はerror_logに記録する必要があります。

または、次のコメントを参照してください:http ://www.php.net/manual/en/domdocument.schemavalidate.php#71014

要旨:

を使用してエラーを設定libxml_use_internal_errors(true)して取得しますlibxml_get_errors()。その後、を使用して、再びオフにしますlibxml_use_internal_errors(false)

于 2012-10-27T13:39:13.973 に答える
0

はい、ルート要素の1つと一致するtargetNamespaceを持つXSDがあることを確認する必要があります。

<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>
于 2012-10-27T13:42:56.740 に答える