Ashura: XML-Dokument-Validierung erzeugt Warnungen

Beitrag lesen

Hallo.

Ich habe mich nun einmal etwas näher mit XML-Dokumenten befasst, die mit einer DTD ausgestattet werden sollen.

Zum Validieren nutze ich die validate()-Methode aus PHPs DOM.

Versuche ich aber nun, mein XML-Dokument gegen meine DTD zu validieren, erhalte ich mehrere kryptische Fehlermeldungen, welche ich mir nicht erklären kann.

Mein XML-Dokument (guestbook.xml):

<?xml version="1.0" encoding="utf-8"?>  
<!DOCTYPE guestbook SYSTEM "../DTD/guestbook.dtd">  
<guestbook>  
  <entry id="e2" visible="true">  
    <datetime>Wed, 01 Mar 2006 12:00:00 +0100</datetime>  
    <host>127.0.0.1</host>  
    <name>/me again</name>  
    <contact>  
      <email>me@example.org</email>  
      <homepage>http://example.org</homepage>  
      <icq>000000000</icq>  
    </contact>  
    <message>Hello again!</message>  
  </entry>  
  <entry id="e1" visible="true">  
    <datetime>Tue, 28 Feb 2006 00:00:00 +0100</datetime>  
    <host>127.0.0.1</host>  
    <name>/me</name>  
    <message>Hello world!</message>  
  </entry>  
</guestbook>

Meine DTD (guestbook.dtd):

  
<!ELEMENT guestbook (entry)+>  
  
<!ELEMENT entry (datetime, host, name, (contact)?, message)>  
<!ATTLIST entry  
  id       ID     #REQUIRED  
  visible  CDATA  (true|false)  "true"  

>  
  
<!ELEMENT datetime (#PCDATA)>  
<!ELEMENT host (#PCDATA)>  
<!ELEMENT name (#PCDATA)>  
<!ELEMENT contact (email, homepage, icq)?>  
<!ELEMENT message (#PCDATA)>  
  
<!ELEMENT email (#PCDATA)>  
<!ELEMENT homepage (#PCDATA)>  
<!ELEMENT icq (#PCDATA)>

Mein PHP-Script (gb.php):

<?php  
  
error_reporting(E_ALL);  
header('content-type: text/html; charset=utf-8');  
  
$str_docpath = 'data/guestbook.xml';  
  
$obj_doc = new DOMDocument();  
$obj_doc->load($str_docpath);  
  
if ($obj_doc->validate()) {  
  echo '"'.$str_docpath .'" is valid!';  
} else {  
  echo '"'.$str_docpath .'" is not valid!';  
}  
  
?>

Es wird immerzu die 6. Zeile in meiner DTD bemängelt:

Warning: DOMDocument::validate() [function.validate]: /…/DTD/guestbook.dtd:6: parser error : AttValue: " or ' expected in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: visible CDATA (true|false) "true" in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: ^ in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: /…/DTD/guestbook.dtd:6: parser error : Attribute default value declaration error in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: visible CDATA (true|false) "true" in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: ^ in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: /…/DTD/guestbook.dtd:6: parser error : Space required after the attribute default value in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: visible CDATA (true|false) "true" in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: ^ in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: /…/DTD/guestbook.dtd:6: parser error : Content error in the external subset in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: visible CDATA (true|false) "true" in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: ^ in /…/gb.php on line 11
Warning: DOMDocument::validate() [function.validate]: Could not load the external subset "../DTD/guestbook.dtd" in /…/gb.php on line 11

Ich verstehe nicht, was die Warnungen zu bedeuten haben. (Besonders geistreich: „^“)

Entferne ich die Definition des visible-Attributes und die entsprechenden Attribute aus dem XML-Dokument, validiert es.

Wo liegt hier also der Fehler? Einen Syntaxfehler kann ich nicht erkennen, ich habe mich an das SELFHTML-Beispiel gehalten.

Einen schönen Mittwoch noch.

Gruß, Ashura

--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
mathbr:del.icio.us/ mathbr:w00t/