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/