Start · Sprachen · PHP · Referenz · xmlwriter_start_dtd

xmlwriter_start_dtd

Funktion

Beginnt eine DTD (Document Type Definition) im XML-Dokument mit dem angegebenen qualifizierten Namen und optionalen Public- und System-IDs.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_start_dtd(XMLWriter $writer, string $qualifiedName, ?string $publicId = null, ?string $systemId = null): bool

Beschreibung

Die Funktion xmlwriter_start_dtd() leitet eine DTD-Deklaration (<!DOCTYPE ...>) in einem XML-Dokument ein. Eine DTD legt die Struktur und die erlaubten Elemente eines XML-Dokuments fest. Diese Funktion öffnet die DTD-Deklaration, die später mit xmlwriter_end_dtd() geschlossen werden muss.

Der Parameter $qualifiedName entspricht dem Namen des Wurzelelements des XML-Dokuments. Über die optionalen Parameter $publicId und $systemId lassen sich externe DTD-Ressourcen referenzieren, etwa eine öffentlich bekannte DTD (z. B. HTML 4.01 Strict) oder eine lokale DTD-Datei über eine URI.

Diese Funktion ist Teil der prozeduralen Schnittstelle der XMLWriter-Erweiterung. Wer die objektorientierte Schnittstelle bevorzugt, kann stattdessen XMLWriter::startDtd() verwenden. Die DTD kann nach dem Öffnen durch weitere Funktionen wie xmlwriter_start_dtd_element() oder xmlwriter_start_dtd_attlist() um Deklarationen erweitert werden.

Eine vollständige DTD-Deklaration ohne externen Verweis (interne DTD) wird mit xmlwriter_end_dtd() abgeschlossen. Soll nur eine externe DTD referenziert werden, kann die Deklaration direkt nach xmlwriter_start_dtd() mit xmlwriter_end_dtd() beendet werden.

Parameter

Name Typ Default Beschreibung
$writer Pflicht XMLWriter Die XMLWriter-Instanz, auf der die Operation ausgeführt wird. Sie wird mit xmlwriter_open_memory() oder xmlwriter_open_uri() erzeugt.
$qualifiedName Pflicht string Der qualifizierte Name des Dokumenttyps, der in der DTD-Deklaration verwendet wird. Entspricht in der Regel dem Namen des Wurzelelements des XML-Dokuments.
$publicId ?string null Optionaler öffentlicher Bezeichner (Public ID) der externen DTD, z. B. "-//W3C//DTD XHTML 1.0 Strict//EN". Wird null übergeben, wird kein PUBLIC-Bezeichner gesetzt.
$systemId ?string null Optionale System-ID der externen DTD als URI, z. B. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd". Wird null übergeben, wird kein SYSTEM-Bezeichner gesetzt.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler, etwa wenn der XMLWriter nicht korrekt initialisiert wurde oder die DTD an dieser Stelle im Dokument nicht gültig ist.

Beispiele

Interne DTD mit Elementdeklaration

<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_set_indent_string($writer, '  ');

xmlwriter_start_document($writer, '1.0', 'UTF-8');

// DTD beginnen
xmlwriter_start_dtd($writer, 'note');
xmlwriter_start_dtd_element($writer, 'note', '(to,from,message)');
xmlwriter_end_dtd_element($writer);
xmlwriter_start_dtd_element($writer, 'to', '(#PCDATA)');
xmlwriter_end_dtd_element($writer);
xmlwriter_start_dtd_element($writer, 'from', '(#PCDATA)');
xmlwriter_end_dtd_element($writer);
xmlwriter_start_dtd_element($writer, 'message', '(#PCDATA)');
xmlwriter_end_dtd_element($writer);
xmlwriter_end_dtd($writer);

// Inhalt
xmlwriter_start_element($writer, 'note');
  xmlwriter_write_element($writer, 'to', 'Max');
  xmlwriter_write_element($writer, 'from', 'Anna');
  xmlwriter_write_element($writer, 'message', 'Hallo Welt!');
xmlwriter_end_element($writer);

xmlwriter_end_document($writer);

echo xmlwriter_output_memory($writer);
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (to,from,message)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT message (#PCDATA)> ]> <note> <to>Max</to> <from>Anna</from> <message>Hallo Welt!</message> </note>

Externe DTD mit Public- und System-ID referenzieren

<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);

xmlwriter_start_document($writer, '1.0', 'UTF-8');

// Externe DTD referenzieren (XHTML 1.0 Strict)
xmlwriter_start_dtd(
    $writer,
    'html',
    '-//W3C//DTD XHTML 1.0 Strict//EN',
    'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'
);
xmlwriter_end_dtd($writer);

xmlwriter_start_element($writer, 'html');
xmlwriter_write_attribute($writer, 'xmlns', 'http://www.w3.org/1999/xhtml');
  xmlwriter_start_element($writer, 'head');
    xmlwriter_write_element($writer, 'title', 'Testseite');
  xmlwriter_end_element($writer);
  xmlwriter_start_element($writer, 'body');
    xmlwriter_write_element($writer, 'p', 'Willkommen!');
  xmlwriter_end_element($writer);
xmlwriter_end_element($writer);

xmlwriter_end_document($writer);

echo xmlwriter_output_memory($writer);
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Testseite</title> </head> <body> <p>Willkommen!</p> </body> </html>

// Wichtig · Fallstricke

Reihenfolge beachten: xmlwriter_start_dtd() muss nach xmlwriter_start_document(), aber vor dem ersten Element aufgerufen werden. Eine DTD mitten im Dokumentinhalt ist nicht zulässig und kann zu ungültigem XML führen.

Abschluss nicht vergessen: Jeder Aufruf von xmlwriter_start_dtd() muss durch einen korrespondierenden Aufruf von xmlwriter_end_dtd() abgeschlossen werden, andernfalls wird das XML-Dokument unvollständig und ungültig.

Wenn nur eine externe DTD referenziert werden soll (ohne interne Deklarationen), kann xmlwriter_end_dtd() direkt im Anschluss aufgerufen werden. Interne Deklarationen werden zwischen den beiden Aufrufen eingefügt.