Hallo,
mit Hilfe der DOM Functions von PHP zu validieren (über die Methoden loadHtml() und validate()).
Dabei bekomme ich, zu meiner Überraschung, folgende Meldung:
Warning: DOMDocument::validate(): standalone: body declared in the external subset contains white spaces nodes in [...]
Und wenn du es so versuchst?
<?php
$dom = new DOMDocument;
$dom->validateOnParse = true;
$dom->Load('test.html');
?>
ob die Endung .html hier eine Rolle spielt, kann ich dir aber nicht sagen.
Wenn ich dann die white spaces zwischen body und p eliminiere, wird das Dokument als valide angesehen.
Was habe ich verpasst? In XHTML 1.0 Strict hat mir doch bisher kein Validations-Service white space im Body angemeckert?
Darf ich ein XHTML-Dokument etwa nicht mehr schön lesbar formatieren ...?
In der Tat sehr merkwürdig, da libxml2 ja alle Test der "OASIS XML Tests Suite" bestanden haben soll.
Eventuell bekommst du eine besser Fehlermeldung so:
http://at.php.net/libxml_get_errors
Außerdem dauert die Validierung verhältnismäßig lange - logisch, wenn die DTD und zugehörige Ressourcen immer von PHP/meinem Apachen aus dem www geholt werden müssen, zumal auf dieser Ebene vermutlich kein Caching implementiert ist.
Das ist korrekt, die DTD wird aus dem WWW geholt und alles wir sehr langsam (http://www.php.net/manual/en/ref.dom.php#54777)
Also wollte ich mir die DTD lokal ablegen, und dann im Doctype meines XHTML-Dokumentes darauf verweisen.
Das ist schon teilweise richtig, aber wenn du es "ganz" richtig machen willst, erstellst du dazu einen entsprchenden Katalogeintrag. (wirk wie cacheing).
Siehe: http://www.whump.com/moreLikeThis/link/03815
Wie müsste ich jetzt in meiner lokalen Version der DTD den Inhaltstyp von body anpassen, damit white space darin nicht mehr angemeckert wird? Geht es überhaupt?
Gar nicht, denn du müsstest in der DTD
<!ELEMENT body %Block;>
zu
<!ELEMENT body (#PCDATA, %Block;)*> ändern und dann wäre es nicht mehr die richtige XHTML-DTD.
Grüße
Thomas