Signatur
Beschreibung
Dom\Notation ist Teil der modernen, namensraumbasierten DOM-Erweiterung (ext-dom) und entspricht dem Notation-Interface aus der W3C-DOM-Spezifikation. Eine Notation beschreibt das Format einer unparsed Entity oder die Zielanwendung eines Processing Instructions und wird innerhalb der DTD eines XML-Dokuments deklariert.
Notationen können über die Dom\DocumentType-Klasse und deren notations-Eigenschaft aus einem geparsten XML-Dokument ausgelesen werden. Die Klasse stellt die beiden Eigenschaften publicId und systemId bereit, die den öffentlichen bzw. den System-Bezeichner der Notation enthalten.
In der Praxis sind Notationen ein eher selten genutztes XML-Feature. Sie treten vor allem in älteren SGML-nahen Dokumentstrukturen auf, beispielsweise um externe Binärdaten wie Bilder oder spezielle Dateiformate zu referenzieren. Der Einsatz von Dom\Notation ist sinnvoll, wenn ein XML-Dokument analysiert oder validiert werden soll, das DTD-Notationen enthält.
Objekte dieser Klasse werden nicht direkt instanziiert; sie entstehen ausschließlich durch das Parsen eines XML-Dokuments über Dom\XMLDocument::createFromString() oder Dom\XMLDocument::createFromFile(), sofern das Dokument eine DTD mit Notation-Deklarationen besitzt.
Beispiele
Notationen aus einer DTD auslesen
<?php
$xml = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE doc [
<!NOTATION gif SYSTEM "image/gif">
<!NOTATION png PUBLIC "-//W3C//NOTATION PNG 1.0//EN" "image/png">
]>
<doc></doc>
XML;
$document = Dom\XMLDocument::createFromString($xml);
$doctype = $document->doctype;
if ($doctype !== null) {
foreach ($doctype->notations as $notation) {
echo 'Name: ' . $notation->nodeName . PHP_EOL;
echo 'PublicId: ' . ($notation->publicId ?? '(leer)') . PHP_EOL;
echo 'SystemId: ' . ($notation->systemId ?? '(leer)') . PHP_EOL;
echo str_repeat('-', 40) . PHP_EOL;
}
}
Prüfen ob ein bestimmte Notation vorhanden ist
<?php
$xml = <<<'XML'
<?xml version="1.0"?>
<!DOCTYPE root [
<!NOTATION svg SYSTEM "image/svg+xml">
]>
<root/>
XML;
$document = Dom\XMLDocument::createFromString($xml);
$notations = $document->doctype?->notations;
$gesucht = 'svg';
$gefunden = false;
if ($notations !== null) {
foreach ($notations as $notation) {
if ($notation->nodeName === $gesucht) {
$gefunden = true;
echo "Notation '{$gesucht}' gefunden (SystemId: {$notation->systemId})" . PHP_EOL;
break;
}
}
}
if (!$gefunden) {
echo "Notation '{$gesucht}' nicht gefunden." . PHP_EOL;
}
// Wichtig · Fallstricke
Keine direkte Instanziierung: Dom\Notation-Objekte können nicht mit new erstellt werden. Sie entstehen ausschließlich beim Parsen eines XML-Dokuments mit DTD-Deklarationen.
Nur lesend: Gemäß DOM-Standard sind die Eigenschaften publicId und systemId schreibgeschützt. Eine programmatische Erstellung oder Veränderung von Notationen über die DOM-API wird nicht unterstützt.
Unterschied zur alten DOM-Erweiterung: Die Klasse Dom\Notation gehört zur neuen, PHP-8.4-nativen DOM-Implementierung. Die ältere Klasse DOMNotation (ohne Namensraum) existiert weiterhin für Abwärtskompatibilität, entspricht aber nicht vollständig dem aktuellen W3C-Standard.