Deutsche Übersetzung des Working
Drafts Die Originalversion in englischer Sprache ist zu finden
unter: Diese Übersetzung ist zu finden unter: Die aktuelle Übersetzung ist zu finden unter: Ü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. |
Copyright © 2000 W3C® (MIT, INRIA, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.
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.
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.
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.
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.
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.
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.
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.
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.
[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.
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.
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:
Jedes nicht erlaubte Zeichen wird in UTF-8 [IETF RFC 2279], in ein Byte oder mehrere Bytes, umgewandelt.
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).
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.
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:
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].
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.
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.
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.
Eine Include Location, die einen XPointer enthält, könnte einen Attributknoten oder einen Namensraumknoten identifizieren. Einen solchen Knoten zu identifizieren ist ein Fehler.
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]
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.
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:
Ein Entity Start Marker Information Item. Die [entity]-Eigenschaft wird zu einem Entity Declaration Information Item mit den folgenden Eigenschaftswerten:
[entity type] ist External General Entity.
Issue (XInclude-66-entity-type): Das scheint etwas unwahr. Sollten wir nicht einen neuen Entity-Typ schaffen, anstatt einen alten zu verwenden?
[name] ist Null.
[system identifier] ist die Include Location für include.
[public identifier] ist Null.
[base URI] ist die Include Location für include.
[notation] ist Null.
[content] ist Null.
[charset] Der Name der Zeichenverschlüsselung, in der das Entity ausgedrückt wird.
Issue (XInclude-62-text-encoding): Wie wird die Zeichenkodierung für Text erschlossen? Wir wollen nicht im Text nach einem formatspezifischen Hinweis sehen. Ist es angemessen zu schreiben, "Diese Eigenschaft wurde aus einem MIME-Header abgeleitet"?
Für jedes Zeichen im ausgewählten Bereich wird ein Character Information Item erzeugt. Der Zeichenkode wird zu dem Zeichenkode, der das Zeichen laut ISO 10646 repräsentiert. Die [element content whitespace]-Flag wird auf false gesetzt.
Ein Entity End Marker Information Item. Die [entity]-Eigenschaft wird auf die [entity]-Eigenschaft des korrespondierenden Entity Start Markers gesetzt.
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.
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:
Ein Include Start Marker Information Item. Die [parent]-Eigenschaft dieses Items wird für das Include Parent gesetzt. Die [include element]-Eigenschaft wird für das Information Item gesetzt, welches das include-Element repräsentiert.
Die Included Items. Die [parent]-Eigenschaft eines jeden Included Items wird für das jeweilige Include Parent gesetzt.
Ein Include End Marker Information Item. Die [parent]-Eigenschaft dieses Items wird für das Include Parent gesetzt. Die [include element]-Eigenschaft wird für das Information Item gesetzt, welches das include-Element repräsentiert.
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)]
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.
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?
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.
[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:
[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.
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:
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.'
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?
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.
Eine Anwendung ist konform zu XInclude, wenn sie:
XML 1.0, XML Namespaces, das XML Information Set, und XML Base unterstützt
die obligatorischen Bedingungen befolgt (muss), die in dieser Spezifikation festgeschrieben sind und alle optionalen Bedingungen (kann), die sie befolgen möchte, so unterstützt, wie es vorgeschrieben ist
Markup-Konformitätstests durchführt, entsprechend allen Konformitätsrichtlinien, die in dieser Spezifikation genannt sind.
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> |
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> |
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><?xml version='1.0'?> <data> <item><![CDATA[Brooks & Sheilds]]></item> </data></beispiel> </document> |
Eine Tabelle mit den oben angesprochenen offenen Fragen folgt: