Deutsche Übersetzung des Working Drafts
XML Inclusions (XInclude) Version 1.0

Die Originalversion in englischer Sprache ist zu finden unter:
http://www.w3.org/TR/2000/WD-xinclude-20001026
(erhältlich in: HTML, XML)

Diese Übersetzung ist zu finden unter:
http://www.schumacher-netz.de/TR/2000/WD-xinclude-20001026-de.html

Die aktuelle Übersetzung ist zu finden unter:
http://www.schumacher-netz.de/TR/xinclude.html

Übersetzer: Stefan Schumacher (sts@schumacher-netz.de)

Dieses Dokument ist ein Working Draft, ein Arbeitsdokument, das zur Diskussion um XInclude aufruft.

Einige Fehler im originalen Working Draft wurden bei dieser Übersetzung berücksichtigt und unter Berufung auf das öffentliche Archiv, bzw. auf die Kommentare von Jonathan Marsh berichtigt.

Dieses Dokument kann Übersetzungsfehler enthalten. Kommentare oder Anregungen senden Sie bitte per Email an den Übersetzer.

W3C Logo

XML Inclusions (XInclude) Version 1.0

W3C Working Draft 26 October 2000

Diese Version:
http://www.w3.org/TR/2000/WD-xinclude-20001026
(erhältlich in: HTML, XML)
Aktuelle Version:
http://www.w3.org/TR/xinclude
Vorherige Version:
http://www.w3.org/TR/2000/WD-xinclude-20000717
Editoren:
Jonathan Marsh (Microsoft) <jmarsh@microsoft.com>
David Orchard (Jamcracker) <dorchard@jamcracker.com>

Vorwort

Dieses Dokument gibt ein Verarbeitungsmodell und eine Syntax für allgemein anzuwendende Inklusion an. Inklusion wird durch die Zusammenfassung verschiedener XML-Infosets in ein einzelnes zusammengesetztes Infoset erreicht. Die Spezifikation der XML-Dokumente (Infosets), die zusammengefasst werden sollen, und die Handhabung des Zusammenfassungsprozesses werden in XML-harmonischer Syntax (Elemente, Attribute, URI-Verweise) ausgedrückt.

Status dieses Dokuments

Die XML Core Working Group erwartet mit diesem Working Draft "2000 October 26 XInclude working draft" Kommentare zu der Spezifikation.

Die W3C-Mitglieder und andere Interessierte sind dazu eingeladen, diese Spezifikation einzusehen, Kommentare zu senden, und über erste Implementierungserfahrungen zu berichten. Der Arbeitsbereich dieser Spezifikation wurde in dem XML Inclusion Proposal (XInclude), W3C Note vom 23. November 1999 [XInclude] umrissen. Der Sinn der Veröffentlichung dieses Drafts ist es, der Öffentlichkeit von unserem Fortschritt in diesem Bereich zu berichten und Rückmeldung über das aktuelle Working Draft zu erlangen. Hier soll angemerkt werden, dass diese Spezifikation planmäßig die letzte diesbezügliche Veröffentlichung der Arbeitsgruppe in der nahen Zukunft sein wird.

Obwohl die Arbeitsgruppe entschieden hat, dieses Working Draft zu veröffentlichen, bleiben noch offene Fragen, die in diesem Draft gestellt werden. Nach den Rückmeldungen der Nutzergemeinschaft ist das Draft zu seiner Element-basierten Syntax des Working Drafts vom 22. März zurückversetzt worden.

Kommentare zu diesem Working Draft sollten an www-xml-xinclude-comments@w3.org gesendet werden. Die Kommentare werden in einem öffentlichen Archiv aufbewahrt. Obwohl wir Implementierungserfahrungen begrüßen, wird die XML Core Working Group keine frühe Implementierung erlauben, um die Möglichkeit zu wahren, Veränderungen an dieser Spezifikation vornehmen zu können, bevor die endgültige Version verabschiedet wird.

Es ist nicht zulässig, W3C Working Drafts als Referenzmaterial zu verwenden oder anders als "in Arbeit" zu zitieren. Eine Liste der aktuellen W3C Working Drafts kann unter http://www.w3.org/TR/ eingesehen werden.

Inhaltsverzeichnis

1. Einleitung
  1.1. Beziehung zu XLink
  1.2. Beziehung zu XML External Entities
  1.3. Beziehung zu DTDs
  1.4. Beziehung zu XML Schemata
  1.5. Beziehung zu Grammatik-abhängigen Inklusionen
2. Terminologie
3. Verarbeitungsmodell
  3.1. Die Include Location
  3.2. Included Items bei parse="xml"
    3.2.1. Document Information Items
    3.2.2. Mehrfachknoten
    3.2.3. Bereiche
    3.2.4. Element, Comment, und Processing Instruction Information Items
    3.2.5. Attribute and Namespace Declaration Information Items
    3.2.6. Verschlüsselungen
    3.2.7. Inklusions-Schleife
  3.3. Included Items bei parse="text"
  3.4. Erzeugen des Ergebnis-Infoset
    3.4.1. Bleibende Eigenschaften des Infosets
  3.5. Infoset-Erweiterungen
    3.5.1. Include Start Marker
    3.5.2. Include End Marker
4. Syntax
5. Konformität
  5.1. Markup-Konformität
  5.2. Anwendungs-Konformität

Anhänge

A. Verweise
B. Verweise (nicht-normativ)
C. Beispiele (nicht-normativ)
  C.1. Grundlegende Inklusions-Beispiele
  C.2. Beispiel einer Bereichs-Inklusion
  C.3. Beispiel einer Text-Inklusion
D. Liste offener Fragen (nicht-normativ)

1. Einleitung

Viele Programmiersprachen besitzen einen Inklusionsmechanismus, um Modularität zu vereinfachen. Bezeichnersprachen bedürfen ebenfalls oft eines solchen Mechanismusses. Dieses Dokument schlägt einen generischen Mechanismus vor, um XML-Dokumente (wie in ihren Information Sets niedergelegt) für Anwendungen zusammenzufassen, die eine solche Vereinfachung fordern. Die Syntax entspricht vorhandenen XML-Formen - Elemente, Attribute und URI-Verweise.

Die Anforderungen, an denen sich die Entwicklung von XInclude orientieren soll, können im XML Inclusion Proposal, W3C Note vom 23. November 1999 [XInclude] eingesehen werden.

1.1. Beziehung zu XLink

XInclude weicht von den Möglichkeiten eines Verweisaufbaus ab, die in der XML Linking Language [XLink] beschrieben sind, besonders von Verweisen mit dem Attributwert show="embed". Solche Verweise haben eine Syntax, die unabhängig vom Medientypen anzeigt, dass ein Quellmedium grafisch in die Darstellung eines Dokuments eingebunden werden soll. XLink gibt kein bestimmtes Verarbeitungsmodell an, sondern vereinfacht nur die Erkennung eines Verweises und die Ermittlung der bezüglichen Metadaten durch eine übergeordnete Anwendung.

XInclude, auf der anderen Seite, gibt eine Transformation an, die vom Medientypen abhängig ist (XML zu XML). Es bestimmt ein besonderes Verarbeitungsmodell, um Infosets zusammenzufassen. Die XInclude-Verarbeitung geschieht auf einem niedrigeren Level, oft durch einen generischen XInclude-Prozessor, der die erzeugten Informationen einer übergeordneten Anwendung zugänglich macht.

Einfache Knoteninklusion, wie in dieser Spezifikation beschrieben, unterscheidet sich von der Transklusion, die kontext-spezifische Informationen wie z.B. style erhält.

1.2. Beziehung zu XML External Entities

Es gibt zahlreiche Unterschiede zwischen XInclude und XML External Entities [XML], die sie zu ergänzenden Technologien machen.

Die Verarbeitung von externen Entities (wie auch des Restes der DTDs) geschieht beim Parsing. XInclude arbeitet mit Infosets und somit entgegengesetzt zum Parsing.

Die Deklaration externer Entities benötigt ein DTD oder ein internes Subset. Das hat einige Abhängigkeiten für die Inklusion zur Folge, zum Beispiel fordert die Syntax einer DOCTYPE-Deklaration, dass das document-Element benannt ist, in vielen Fällen offensichtlich entgegengesetzt zur Inklusion. Validierende Programme müssen die Definition des gesamten Content Models kennen. XInclude verhält sich entgegengesetzt zur Validation und zum Namen des document-Elements.

Externe Entities sind indirekt - ein externes Entity muss deklariert und benannt, und separat aufgerufen werden. XInclude verwendet direkte Verweise. Anwendungen, die XML-Ausgaben inkrementell erzeugen, können davon profitieren, die Inklusionen nicht vorher deklarieren zu müssen.

Die Syntax interner Subsets ist für viele Authoren, die einfache, wohlgeformte XML-Dokumente schreiben möchten, zu unförmig. Die XInclude-Syntax basiert auf bekannten XML-Formen.

1.3. Beziehung zu DTDs

XInclude definiert keine Beziehung zur DTD-Verarbeitung. XInclude beschreibt eine Transformation "Infoset-zu-Infoset" und keine Veränderung im Bearbeitungsverhalten von XML 1.0. XInclude definiert keinen Mechanismus zur DTD-Verarbeitung der erzeugten Infosets.

1.4. Beziehung zu XML Schemata

XInclude definiert keine Beziehung zu einem aufgeforsteten Infoset, das durch die Anwendung eines XML-Schemas erzeugt wird. Solch ein erzeugtes Infoset kann als Eingabe-Infoset verwendet werden, bzw. kann so eine Aufforstung als Ergebnis einer angewendeten Inklusion entstehen.

1.5. Beziehung zu Grammatik-abhängigen Inklusionen

Besondere Inklusionsmechanismen wurden in bestimmten XML-Grammatiken eingeführt. XInclude besitzt einen generischen Mechanismus zur Erkennung und Verarbeitung von Inklusionen und setzt deshalb weniger Programmiererfahrung voraus. Es gewährleistet bessere Performance und weniger Programmcodeabhängigkeit.

2. Terminologie

[Definition: ] Die Schlüsselworte muss, nicht dürfen, erforderlich, kann, empfehlen und optional in dieser Spezifikation sind zu verstehen, wie in [IETF RFC 2119] beschrieben.

3. Verarbeitungsmodell

Inklusion, wie in diesem Dokument definiert, ist ein bestimmter Typ der 'XML Information Set' [XML Infoset] Transformation.

[Definition: ] Die Quelldatei für die Inklusionstransformation besteht aus einem Quell-Infoset. [Definition: ] Die Ausgabe, Ergebnis-Infoset genannt, besteht aus einem neuen Infoset, welches aus dem Quell-Infoset und den Infosets zusammengesetzt wird, deren Quellen durch URI-Verweise in include-Elementen identifiziert werden. Folglich wird ein Mechanismus zur Auflösung von URIs vorausgesetzt, der die identifizierten Quellen als Infoset zurückgeben kann. Wohlgeformte XML-Entities, die keine Infoset-Definition besitzen (z.B. eine externe Entity-Datei mit mehreren Top-Level-Elementen), liegen außerhalb des Rahmens dieser Spezifikation, sowohl in Bezug auf die Verwendung als Quell-Infoset als auch in Bezug auf die Verwendung als Ergebnis-Infoset.

Inklusion wird durch die Anwesenheit von include-Elementen im Quell-Infoset angezeigt. [Definition: ] Ein include-Element ist jedes Element, das die syntaktischen Voraussetzungen erfüllt, die in dieser Spezifikation festgelegt sind. [Definition: ] Die von dem URI-Verweis des include-Elements lokalisierten Informationseinheiten werden Included Items genannt. Das Ergebnis-Infoset ist im Wesentlichen eine Kopie des Quell-Infoset, bei dem alle include-Elemente durch ihre korrespondierenden Included Items ersetzt worden sind.

3.1. Die Include Location

Der Wert des href-Attributs wird als URI-Verweis interpretiert. Die erlaubten Zeichen für den Wert des href-Attributs entsprechen denen für XML, mit anderen Worten [Unicode]. Einige Unicode-Zeichen sind jedoch nicht innerhalb eines URI-Verweises erlaubt, deshalb müssen Prozessoren diese Zeichen kodieren und ersetzen, um einen gültigen URI-Verweis aus dem Attributwert zu erhalten.

Nicht erlaubt sind alle Nicht-ASCII-Zeichen, sowie die in Abschnitt 2.4 der [IETF RFC 2396] ausgeschlossenen Zeichen, mit Ausnahme des Rautezeichens (#), des Prozentzeichens (%) und der eckigen Klammern, die in [IETF RFC 2732] wieder erlaubt werden. Nicht erlaubte Zeichen müssen wie folgt ersetzt werden:

  1. Jedes nicht erlaubte Zeichen wird in UTF-8 [IETF RFC 2279], in ein Byte oder mehrere Bytes, umgewandelt.

  2. Jedes Oktett, das einem nicht erlaubten Zeichen zugeordnet ist, wird durch den für URIs vorgeschriebenen Mechanismus ersetzt (Wandlung in %HH, wobei HH der hexadezimale Wert für den Byte-Wert ist).

  3. Das originale Zeichen wird durch die erzeugte Zeichenkette ersetzt.

Der Basis-URI für relative URIs ist der Basis-URI des include-Elements wie in XML Base [XML Base] definiert. [Definition: ] Der URI, der durch die Auflösung zu einem absoluten URI entsteht, wird Include Location genannt.

3.2. Included Items bei parse="xml"

Ist parse="xml" gesetzt, wird die Include Location aufgelöst und die Quelle wird geladen. Diese Quelle wird als XML-Quelle behandelt und in ein Information Set verarbeitet. [Definition: ] include-Elemente in diesem Infoset werden rekursiv verarbeitet, um das Acquired Infoset zu erhalten.

Issue (XInclude-70-time-dependent-resources): URIs, auf die zu verschiedenen Zeiten zugegriffen wird (sagen wir während eines XInclude-Durchlaufs mit zwei identischen include-Elementen im gleichen Dokument), können verschiedene Ergebnisse zur Folge haben. Müssen wird darüber etwas schreiben?

Quellen, die aus irgendeinem Grund nicht zugänglich sind (weil die Quelle vielleicht nicht existiert, Verbindungsschwierigkeiten oder Sicherheitsbeschränkungen den Zugriff verhindern, auf das URI-Schema nicht zugegriffen werden kann oder ein Syntaxfehler in einem XPointer besteht), resultieren in einem Fehler. Quellen, die nicht-wohlgeformtes XML enthalten, resultieren in einem Fehler.

Issue (XInclude-58-invalid-xml): Das setzt den Gebrauch eines nicht-validierenden Parsers voraus, oder bietet zumindest keine Vorsorge gegen das Auftauchen von Validationsfehlern. Ist das unterspezifiziert?

Ein Fragment des URI-Verweises wird als XPointer [XPointer] interpretiert, wenn parse="xml" gesetzt ist. Der XPointer zeigt an, dass eine untergeordnete Quelle oder ein Teil der erhaltenen Quelle das Ziel der Inklusion ist.

Issue (XInclude-68-mime-xpointer): Wann sind XPointer erlaubt? Wenn der Typ der Quelle text/xml oder application/xml ist? Oder wenn parse="xml" gesetzt ist?
Issue (XInclude-69-non-xpointer-fragments): Welches Verhalten zeigen die Fragmente für nicht-XML-Quellen? Ignorieren wir Fragmente, die keine XPointer sind oder werfen wir einen Fehler aus?

Die Included Items werden aus dem Acquired Infoset wie folgt gewonnen:

3.2.1. Document Information Items

Eine Include Location kann einen Dokumentenknoten identifizieren (zum Beispiel einen URI-Verweis ohne einen XPointer, oder ein XPointer der genau auf die Dokumentenwurzel zeigt). In diesem Fall sind die Included Items die [children] des Document Information Items des betreffenden Acquired Infosets, außer für das "Dokumententypdeklaration-Information-Item-Kind", sofern eines existiert.

Issue (XInclude-60-top-level-whitespace): Das Infoset sorgt nicht dafür, dass Leerzeichen außerhalb des document-Elements erhalten bleiben. Folglich wird dieses Leerzeichen von XInclude ausgelassen. Ist das nicht erwünscht, muss das Infoset Vorsorge für die Ausgabe des Leerzeichens treffen.
Issue (XInclude-61-wrap-document): Binden wir das in ein Document Entity ein, um die Basis-URL und den Zeichensatz zu erhalten? Wie sieht die Beziehung zwischen Document Information Item und dem Document Entity aus? Das minimale Infoset muss kein Document Entity besitzen.
Anmerkung des Authors: Beispiele der Leerzeichen hinzufügen, die ignoriert werden können, bzw. nicht ignoriert werden dürfen.
Issue (XInclude-56-doctype): Sie geben nicht an (soweit ich sagen kann), was mit doctype-Knoten in inkludierten Dokumenten passieren soll. [Donald Ball http://lists.w3.org/Archives/Public/www-xml-xinclude-comments/2000Jul/0014.html].

3.2.2. Mehrfachknoten

Eine Include Location mit einem XPointer kann Unterquellen identifizieren, die aus mehr als einem Knoten bestehen. In diesem Fall ist die Zusammenfassung der Included Items die Zusammenfassung der Information Items des Acquired Infoset, abhängig von den Knoten, auf die vom XPointer verwiesen wird, und zwar in der Reihenfolge, in der sie im Acquired Infoset erscheinen.

Ist das document-Element im Quell-Infoset ein include-Element, ist es ein Fehler zu versuchen, es durch mehr als ein einzelnes Element zu ersetzen.

3.2.3. Bereiche

Eine Include Location mit einem XPointer kann eine Bereichszusammenfassung identifizieren, die einen Bereich oder mehrere Bereiche repäsentiert.

Jeder Bereich entspricht einer Zusammenfassung von Information Items in dem Acquired Infoset. [Definition: ] Ein Information Item wird bezeichnet als von einem Bereich ausgewählt, wenn es (in der Dokumentreihenfolge) nach dem Startpunkt des Bereichs und vor dem Endpunkt des Bereichs auftaucht. [Definition: ] Ein Information Item wird bezeichnet als von einem Bereich teilweise ausgewählt, wenn es nur den Startpunkt des Bereichs oder den Endpunkt des Bereichs enthält. Laut Definition kann ein Charakter Information Item nicht teilweise ausgewählt sein.

[Definition: ] Ein Information Item ist potenziell inkludiert wenn es entweder von einem Bereich ausgewählt oder teilweise ausgewählt ist. Die Eigenschaft [children] der ausgewählten Information Items wird nicht verändert. Die Eigenschaft [children] der teilweise ausgewählten Information Items ist die Zusammenstellung der Information Items, die entweder ausgewählt oder teilweise ausgewählt sind, und so fort.

Der Satz der Included Items ist die Gesamtheit, in Dokumentreihenfolge mit entfernten Duplikaten, der potenziell inkludierten Information Items in Bezug auf jeden Bereich.

3.2.4. Element, Comment, und Processing Instruction Information Items

Eine Include Location, die einen XPointer enthält, kann einen Elementknoten, einen Kommentarknoten oder einen Verarbeitungsanweisungsknoten indentifizieren, beziehungsweise ein Element Information Item, ein Comment Information Item oder ein Processing Instruction Information Item repräsentieren. In diesem Fall besteht der Satz der Included Items aus dem Information Item des korrespondierenden Element-, Kommentar- oder Verarbeitungsanweisungs-Knotens in dem Acquired Infoset.

3.2.5. Attribute and Namespace Declaration Information Items

Eine Include Location, die einen XPointer enthält, könnte einen Attributknoten oder einen Namensraumknoten identifizieren. Einen solchen Knoten zu identifizieren ist ein Fehler.

3.2.6. Verschlüsselungen

Beachten Sie, dass die Zeichensätze der einschließenden und eingeschlossenen Quellen unterschiedlich sein können. Das berührt das resultierende Infoset nicht, aber es könnte bei einer späteren Serialisierung gebraucht werden.

Issue (XInclude-67-determining-encoding): Wird ein Dokument per HTTP übertragen, enthält der HTTP-Kopf vielleicht einen encoding-Wert. Wenn ein Dokument, das auf diese oder eine andere Weise übertragen wird, ein XML-Dokument ist, kann es (muss aber nicht) eine <?xml?>-Deklaration enthalten, die einen encoding-Wert angibt. Aber wenn ein Dokument über nfs:, afs:, file: oder ftp: übertragen wird, und keine <?xml ... encoding='...'?>-Deklaration enthält oder als Text inkludiert werden soll, welche Verschlüsselung verwendet es dann.

Es gibt einen eindeutigen Bedarf für xinclude:encoding. Der Wert dieses Attributs ist ein EncName, wie in XML 1.0 spec., Abschnitt 4.3.3, Regel [81] definiert ist. Er gibt an, wie eine Quelle übersetzt werden muss. [ http://lists.w3.org/Archives/Public/www-xml-xinclude-comments/2000Jul/0021.html]

3.2.7. Inklusions-Schleife

Wenn ein include-Element rekursiv verarbeitet wird, wird es als Fehler angesehen, wenn ein include-Element mit einer Include Location verarbeitet wird, die schon in der Inklusionskette verarbeitet wurde.

Issue (XInclude-59-include-location-simplification): Das verwendet die Definition von 'Include Location' wieder, die sowohl absolutisiert als auch an die Vorschriften angepasst ist. Wir haben zuvor entschieden, dass nur die Absolutisierung notwendig war. Ist das Ersetzen von Zeichen in diesem Fall schädlich? Es vereinfacht die Spez...

Mit anderen Worten, das Folgende ist erlaubt:

  • Ein include-Element mit dem Attribut parse="text" kann auf das Dokument verweisen, das dieses include-Element enthält.

  • Ein include-Element kann einen anderen Teil der gleichen lokalen Quelle identifizieren.

  • Zwei nicht verschachtelte inclulde-Elemente können eine Quelle identifizieren, die selbst ein include-Element enthält.

Das Folgende ist nicht erlaubt:

  • Ein include-Element mit parse="xml" (oder einem nicht angegebenen parse-Wert), das auf sich selbst oder irgendeinen seiner Nachfahren zeigt.

  • Ein include-Element, das auf irgendein include-Element oder Nachfahren davon zeigt, die bereits in einer höheren Ebene verarbeitet wurden.

3.3. Included Items bei parse="text"

Wenn parse="text" gesetzt wird, wird die Include Location aufgelöst und die Quelle wird übertragen. Diese Quelle wird als reiner Text behandelt.

[Definition: ] Ein Zeichenbereich (der ausgewählte Bereich) kann durch einen Fragment Identifier identifiziert werden. Die Syntax des Fragment Identifiers wird nach der Syntax für Fragment Identifier für den Medientyp text/plain interpretiert. Ist kein Fragment Identifier vorhanden, enthält der ausgewählte Bereich alle Zeichen in dem Dokument.

Beachte: Es gibt zur Zeit keinen Standard, der Fragment Identifier für den Medientyp text/plain definiert. Deshalb wird es im Moment als Fehler angesehen, einen Fragment Identifier anzugeben, wenn parse="text" gesetzt ist.

Die Zeichen im ausgewählten Bereich werden wie folgt in Included Items konvertiert:

Quellen, die in etwas anderes als Text auflösen, wenn parse="text" gesetzt ist, erzeugen einen Fehler.

Issue (XInclude-45-fail-text): Es ist einfach festzustellen, dass es sich nicht um eine XML-Quelle handelt - sie ist nicht wohlgeformt. Gibt es einen ähnlichen wohldefinierten Mechanismus, um den Erfolg einer Inklusion mit parse="text" festzustellen? Oder müssen wir auf dem Medientyp text/* verbleiben? ( Wir verbleiben absichtlich nicht bei text/xml, weil wir Dinge wie image/svg ermöglichen wollen.

3.4. Erzeugen des Ergebnis-Infosets

Das Ergebnis-Infoset ist eine Kopie des Quell-Infosets, in dem jedes include-Element wie folgt ersetzt wird:

Das Information Item für das include-Element ist gefunden. [Definition: ] Die [parent]-Eigenschaft dieses Items bezieht sich auf ein Information Item, das Include Parent genannt wird. Die [children]-Eigenschaft des Include Parent wird verändert, indem ihm das "include-Element Information Item" genommen wird. Anstelle des include-Elements werden die folgenden Information Items in dieser Reihenfolge eingefügt:

Interne Dokumentverweise innerhalb von include-Elementen müssen gegen das Quell-Infoset aufgelöst werden. Die Folge davon ist, dass die Reihenfolge, in der die include-Elemente verarbeitet werden, das Ergebnis nicht beeinflusst.

Im folgenden Beispiel zeigt die zweite Inklusion immer auf das erste <xinclude:include>-Element und nicht auf sich selbst, unabhängig von der Reihenfolge, in der die Inklusionen verarbeitet werden.

<x xmlns:xinclude="http://www.w3.org/1999/XML/xinclude">

  <xinclude:include href="something.xml"/>

  <xinclude:include href="#xpointer(x/xinclude:include[1])"

             parse="text"/>

</x>
Issue (XInclude-57-sax): In Abschnitt 3.1 wird gesagt, dass interne XPointer-Verweise gegen das originale Quell-Dokument aufgelöst werden müssen. Das ist mit DOM nicht schwer zu realisieren (doch ziemlich aufwendig, wenn es nur durch das Klonen des Originaldokuments gemacht wird), aber ich glaube, es wird ziemlich kompliziert, es mit SAX umzusetzen. [Donald Ball http://lists.w3.org/Archives/Public/www-xml-xinclude-comments/2000Jul/0014.html].
Issue (XInclude-36-infoset-entities): Das Infoset bringt Entity Information Items http://www.w3.org/TR/xml-infoset#infoitem.entity hervor. XInclude legt nicht fest, ob Entity Information Items über das Infoset kopiert werden oder nicht.
Issue (XInclude-55-entity-fixup): Aber es erscheint mir, dass Dummy Entity Start/End Items um die inkludierten Knoten herum eingefügt werden sollten, wenn Entity Start/End Items durch XInclusion erhalten bleiben. Damit wird sichergestellt, dass sie ausgewogen sind (auf die gleiche Weise wie unausgewogene Elementstrukturen angepasst werden). [Richard Tobin: http://lists.w3.org/Archives/Member/w3c-xml-core-wg/2000JulSep/0017.html (nur W3C-Mitglieder)]

3.4.1. Bleibende Eigenschaften des Infosets

Als eine Infoset-Transformation arbeitet XInclude mit der logischen Struktur eines XML-Dokuments, nicht mit ihrer Text-Serialisation. Alle anderen Eigenschaften eines Information Items, die nicht von diesem Proposal modifiziert werden, bleiben bei der Inklusion erhalten.

3.4.1.1. Namensraum-Deklarationen

Ein Quell-Infoset kann Namespace Declaration Information Items enthalten. Die Namensraum-URI-Eigenschaft wird als Teil des Element Information Items angesehen, und zusammenfließende Infosets behalten den Namensraum des Items. Das kann zu einem anderen Ergebnis führen als ein einfaches "Kopieren und Einfügen" einer XML-Textquelle. Ein serialisiertes Ergebnis-Infoset kann zusätzliche Namensraum-Deklarationen enthalten, wenn eine Unterquelle inkludiert wird.

Zum Beispiel resultiert das folgende Dokument:

<foo xmlns:x="uri1">

 <xinclude:include href="common.xml#xptr(a/b)"/>

</foo>

das einen Knoten aus common.xml einschließt:

<a xmlns:x="uri2">

  <b>

    <x:a/>

  </b>

</a>

in einem Dokument, das so serialisiert werden könnte:

<foo xmlns:x="uri1">

  <b xmlns:x="uri2">

    <x:a/>

  </b>

</foo>

Dieses unterscheidet sich von dadurch von einem "Kopieren und Einfügen" auf Textebene, dass es die Integrität der Items des uri2-Namensraums beibehält. Ein einfaches "Kopieren und Einfügen" könnte zur Abbildung der Elementnamen auf einen unbeabsichtigten Namensraum führen oder zu einem nicht wohlgeformten Dokument in Bezug auf die Namensräume.

Serialisation, im Besonderen dort, wo zusätzliche Namensraum-Deklarationen auftauchen können, wird nicht von dieser Spezifikation erzwungen.

Issue (XInclude-52-infoset-properties): Wir sagen ausdrücklich, dass die Namensraum-Eigenschaft name eines Elements erhalten bleibt, wenn die Infosets zusammengefügt werden. Was ist mit der Namensraum-Eigenschaft in-scope? Sie scheint gebraucht zu werden, um qnames in den inkludierten Knoten aufzulösen. Was ist mit der Eigenschaft declared namespaces? Allgemein formuliert, sollte es eine Liste der Infoset-Eigenschaften geben, die erhalten oder gelöscht werden müssen.
Issue (XInclude-63-accidental-scoping): Sollten wir die Namesraum-Eigenschaft in-scope erhalten, könnten wir in die Situation geraten, dass ein Element weniger in-scope-Namensräume hat als sein Elternteil. Es gibt keine Syntax, um Namensräume "wegzudeklarieren". Wenn ein Ergebnis-Infoset serialisiert und dann wieder zurückverarbeitet wird, wird es nicht identisch mit dem originalen Ergebnis-Infoset sein. Auf der anderen Seite ist es unwahrscheinlich (unmöglich), dass zu irgendeinem der zusätzlichen in-scope-Namensräumen innterhalb des inkludierten Texts verwiesen wird. Gibt es irgendwelche Situationen, in denen diese Information schädlich ist?
3.4.1.2. Base URI

Die base-URI-Eigenschaft des Acquired Infosets wird durch die Zusammenführung des Infosets nicht geändert, und bleibt nach der Verarbeitung unverändert. So werden relative URI-Verweise im Included Infoset zum gleichen URI aufgelöst, auch wenn sie eventuell in ein Dokument mit einer anderen Base URI inkludiert wurden. Ein serialisiertes Ergebnis-Infoset muss eventuell xml:base-Attribute hinzufügen, um diesen Umstand anzuzeigen.

3.5. Infoset-Erweiterungen

3.5.1. Include Start Marker

[Definition: ] Ein Include Start Marker Information Item markiert den Anfang einer Gruppe von Information Items, die aus einer Inklusion resultieren.

Ein Include Start Marker Information Item hat die folgenden Eigenschaften:

[include element]
Das Element Information Item, welches das include-Element repräsentiert, das die Inklusion verursacht hat.
[parent]
Das Element Information Item, welches dieses Information Item in seiner [children]-Eigenschaft enthält.

3.5.2. Include End Marker

[Definition: ] Ein Include End Marker Information Item markiert das Ende einer Gruppe von Information Items, die aus einer Inklusion resultieren.

Ein Include End Marker Information Item hat die gleichen Eigenschaften wie ein Include Start Marker. Die Werte dieser Eigenschaften sind die gleichen wie die des korrespondierenden Include Start Markers.

4. Syntax

XInclude definiert einen Namensraum, der mit dem URI http://www.w3.org/1999/XML/xinclude verbunden ist. Zur Vereinfachung wird in dieser Spezifikation das Präfix "xinclude" verwendet, um diesen Namensraum-URI anzuzeigen.

Der XInclude-Namensraum enthält ein einzelnes Element xinclude:include, das als das include-Element dient. Dieses Element hat die folgenden Attribute:

href
Einen URI-Verweis, der den Ort der Quelle angibt, die inkludiert werden soll. Dieses Attribut ist erforderlich.
parse
Eine Aufzählung, die angibt, ob die Quelle als verarbeitetes XML oder als Text inkludiert werden soll. Der Wert "xml" zeigt an, dass die Quelle als XML verarbeitetet werden muss und die Infosets zusammengefügt werden müssen. Der Wert "text" zeigt an, dass die Quelle als der Inhalt eines Textknotens eingefügt werden muss. Dieses Attribut ist optional.
Issue (XInclude-64-no-parse-attribute): http://lists.w3.org/Archives/Public/www-xml-xinclude-comments/2000Aug/0000.html: Wenn xinclude:parse optional ist, bezeichnen Sie bitte den Default-Wert genauer (zur Zeit ist er nur im DTD-Fragment angegeben).

Vorgeschlagene Lösung: Hinzufügen von 'Wenn nicht angegeben, wird der Wert "xml" angenommen (auch ohne die Deklaration eines Default-Wertes). Andere Werte als "xml" und "text" sind Fehler.'

id
Die ID dieses Elements. Dieses Attribut ist vorgesehen, um das include-Element zu adressieren. Damit das Attribut id als Typ ID erkannt wird, muss es als solches deklariert werden, zum Beispiel in einer DTD. Dieses Attribut ist optional.
Issue (XInclude-65-id-attribute): Als Teil der Rückkehr zur Element-Syntax, führe ich das ID-Attribut wieder ein. Ist das in Ordnung?

Attribute aus anderen Namensräumen können mit dem Element xinclude:include verwendet werden. Ungeeignete Attributnamen sind für zukünftige Versionen dieser Spezifikation reserviert.

Der Inhalt des Elements xinclude:include ist nicht durch diese Spezifikation definiert.

Das folgende DTD-Fragment zeigt eine Beispiel-Deklaration für das Element xinclude:include:

<!ELEMENT xinclude:include EMPTY>

<!ATTLIST xinclude:include

    xmlns:xinclude "http://www.w3.org/1999/XML/xinclude"  #FIXED

    href           CDATA               #REQUIRED

    parse          (xml|text)          "xml"

    id             ID                  #IMPLIED

>
Issue (XInclude-31-which-namespace): Die Autoren schlagen vor, dass der Namensraum xml: der Namensraum des include-Elements sein sollte. Der Gebrauch des Namensraums xml: erlaubt allen XML-Dokumenten, den Inklusionsmechanismus zu verwenden ohne einen zusätzlichen Namensraum zu deklarieren, um die Inklusion zu unterstützen. Da die Inklusion nützlich für die meisten oder alle XML-Vokabulare ist, schlagen wir vor, dass es vernünftig ist, sie dem Namensraum xml: hinzuzufügen.
Issue (XInclude-71-versioning): Wie sieht unsere Versionsstrategie aus? Brauchen wir jetzt Dinge, wie zum Beispiel ein version-Attribut, um XInclude 2.0 zu ermöglichen?

5. Konformität

5.1. Markup-Konformität

Ein Element Information Item ist XInclude-konform, wenn es die syntaktischen Anforderungen für include-Elemente erfüllt, die in dieser Spezifikation definiert wurden. Diese Spezifikation legt den DTDs keine besonderen Zwänge auf; Konformität bezieht sich nur auf Elemente und Attribute.

5.2. Anwendungs-Konformität

Eine Anwendung ist konform zu XInclude, wenn sie:


Anhänge

A. Verweise

IETF RFC 2119
RFC 2119: Key words for use in RFCs to Indicate Requirement Levels. Internet Engineering Task Force, 1997. (Siehe http://www.ietf.org/rfc/rfc2119.txt.)
IETF RFC 2279
RFC 2279: UTF-8, a transformation format of ISO 10646. Internet Engineering Task Force, 1998. (Siehe http://www.ietf.org/rfc/rfc2279.txt.)
IETF RFC 2396
RFC 2396: Uniform Resource Identifiers. Internet Engineering Task Force, 1995. (Siehe http://www.ietf.org/rfc/rfc2396.txt.)
IETF RFC 2732
RFC 2732: Format for Literal IPv6 Addresses in URL's. Internet Engineering Task Force, 1999. (Siehe http://www.ietf.org/rfc/rfc2732.txt.)
Unicode
The Unicode Consortium. The Unicode Standard. (Siehe http://www.unicode.org/unicode/standard/standard.html.)
XML
Tim Bray, Jean Paoli, and C.M. Sperberg-McQueen, Editoren. Extensible Markup Language (XML) 1.0. World Wide Web Consortium, 1998. (Siehe http://www.w3.org/TR/REC-xml.)
XML Base
Jonathan Marsh, Editor. XML Base. World Wide Web Consortium, 1999. (Siehe http://www.w3.org/TR/xmlbase.)
XML Infoset
John Cowan and David Megginson, Editoren. XML Information Set. World Wide Web Consortium, 1999. (Siehe http://www.w3.org/TR/xml-infoset.)
XML Names
Tim Bray, Dave Hollander, and Andrew Layman, Editoren. Namespaces in XML. Textuality, Hewlett-Packard, and Microsoft. World Wide Web Consortium, 1999. (Siehe http://www.w3.org/TR/REC-xml-names/.)
XPointer
Steve DeRose, Ron Daniel, Eve Maler, Editoren. XML Pointer Language (XPointer). World Wide Web Consortium, 1999. (Siehe http://www.w3.org/TR/xptr.)

B. Verweise (nicht-normativ)

XInclude
Jonathan Marsh, David Orchard, Editoren. XML Inclusion Proposal (XInclude). World Wide Web Consortium, 1999. (Siehe http://www.w3.org/TR/1999/NOTE-xinclude-19991123.)
XLink
Steve DeRose, Eve Maler, David Orchard, and Ben Trafford, Editoren. XML Linking Language (XLink). World Wide Web Consortium, 2000. (Siehe http://www.w3.org/TR/xlink/.)

C. Beispiele (nicht-normativ)

C.1. Grundlegendes Inklusions-Beispiel

Das folgende XML-Dokument enthält ein include-Element, das zu einem externen Dokument zeigt.

<?xml version='1.0'?>

<document xmlns:xinclude="http://www.w3.org/1999/XML/xinclude">

  <p>120 Mz ist ausreichend für einen durchschnittlichen Benutzer.</p>

  <xinclude:include href="disclaimer.xml"/>

</document>

disclaimer.xml enthält:

<?xml version='1.0'?>

<disclaimer>

  <p>Die hier dargestellten Meinungen sind die eines

  Individuums und sollten nicht als offizielle Aussage dieser

  Organisation interpretiert werden.</p>

</disclaimer>

Das resultierende Infoset, das aus der Auflösung der Inklusionen in diesem Dokument entsteht, könnte wie folgt serialisiert werden:

<?xml version='1.0'?>

<document xmlns:xinclude="http://www.w3.org/1999/XML/xinclude">

  <p>120 Mz ist ausreichend für einen durchschnittlichen Benutzer.</p>

  <disclaimer>

  <p>Die hier dargestellten Meinungen sind die eines 

  Individuums und sollten nicht als offizielle Aussage dieser 

  Organisation interpretiert werden.</p>

</disclaimer>

</document>

C.2. Beispiel einer Bereichs-Inklusion

Das Folgende stellt das Ergebnis einer Inklusion dar, die einen Bereich inkludiert, der von einem XPointer angegeben wird.

<?xml version='1.0'?>

<document>

  <p>Der relevante Auszug ist:</p>

  <zitat>

    <xinclude:include xmlns:xinclude="http://www.w3.org/1999/XML/xinclude"

       href="quell.xml#xpointer(string-range(kapitel/p[1],'Satz 2')  

                        /range-to (string-range(kapitel/p[2]/i,'3.',1,7)))"/>

  </zitat>

</document>

quell.xml enthält:

<kapitel>

  <p>Satz 1.  Satz 2.</p>

  <p><i>Satz 3.  Satz 4.</i>  Satz 5.</p>

</kapitel>

Das resultierende Infoset, das aus der Auflösung der Inklusionen in diesem Dokument entsteht, könnte wie folgt serialisiert werden:

<?xml version='1.0'?>

<document>

  <p>Der relevante Auszug ist:</p>

  <zitat>

    <p>Satz 2.</p>

  <p><i>Satz 3.</i></p>

  </zitat>

</document>

C.3. Beispiel einer Text-Inklusion

Das folgende XML-Dokument inkludiert ein Arbeitsbeispiel in ein Dokument.

<?xml version='1.0'?>

<document xmlns:xinclude="http://www.w3.org/1999/XML/xinclude">

  <p>Das Folgende ist der Quelltext der Datei "data.xml":</p>

  <beispiel><xinclude:include href="data.xml" parse="text"/></beispiel>

</document>

data.xml enthält:

<?xml version='1.0'?>

<data>

  <item><![CDATA[Brooks & Sheilds]]></item>

</data>

Das resultierende Infoset, das aus der Auflösung der Inklusionen in diesem Dokument entsteht, könnte wie folgt serialisiert werden:

<?xml version='1.0'?>

<document xmlns:xinclude="http://www.w3.org/1999/XML/xinclude">

  <p>Das Folgende ist der Quelltext der Datei "data.xml":</p>

  <beispiel>&lt;?xml version='1.0'?&gt;

&lt;data&gt;

  &lt;item&gt;&lt;![CDATA[Brooks &amp; Sheilds]]&gt;&lt;/item&gt;

&lt;/data&gt;</beispiel>

</document>

D. Liste der offenen Fragen (issues) (nicht-normativ)

Eine Tabelle mit den oben angesprochenen offenen Fragen folgt:

XInclude-31-which-namespace
XInclude-36-infoset-entities
XInclude-45-fail-text
XInclude-52-infoset-properties
XInclude-55-entity-fixup
XInclude-56-doctype
XInclude-57-sax
XInclude-58-invalid-xml
XInclude-59-include-location-simplification
XInclude-60-top-level-whitespace
XInclude-61-wrap-document
XInclude-62-text-encoding
XInclude-63-accidental-scoping
XInclude-64-no-parse-attribute
XInclude-65-id-attribute
XInclude-66-entity-type
XInclude-67-determining-encoding
XInclude-68-mime-xpointer
XInclude-69-non-xpointer-fragments
XInclude-70-time-dependent-resources
XInclude-71-versioning