Zum Hauptinhalt springen

Appendix A. Notes on Processing XML Elements (Hinweise zur Verarbeitung von XML-Elementen)

Anhang A. Notes on Processing XML Elements (Hinweise zur Verarbeitung von XML-Elementen)

A.1. Notes on Empty XML Elements (Hinweise zu leeren XML-Elementen)

XML unterstützt zwei Mechanismen, um anzuzeigen, dass ein XML-Element keinen Inhalt hat. Der erste besteht darin, ein XML-Element der Form <A></A> zu deklarieren. Der zweite besteht darin, ein XML-Element der Form <A/> zu deklarieren. Die beiden XML-Elemente sind semantisch identisch.

A.2. Notes on Illegal XML Processing (Hinweise zur illegalen XML-Verarbeitung)

XML ist ein flexibles Datenformat, das es einfach macht, Daten einzureichen, die legal erscheinen, es aber tatsächlich nicht sind. Die Philosophie "Sei flexibel in dem, was du akzeptierst, und streng in dem, was du sendest" gilt immer noch, aber sie darf nicht unangemessen angewendet werden. XML ist äußerst flexibel im Umgang mit Fragen von Leerzeichen, Elementreihenfolge, Einfügen neuer Elemente usw. Diese Flexibilität erfordert keine Erweiterung, insbesondere nicht im Bereich der Bedeutung von Elementen.

Es gibt keine Freundlichkeit darin, illegale Kombinationen von XML-Elementen zu akzeptieren. Im besten Fall wird es ein unerwünschtes Ergebnis verursachen und im schlimmsten Fall kann es echten Schaden anrichten.

A.3. Example - XML Syntax Error (Beispiel - XML-Syntaxfehler)

Der folgende Anforderungskörper für eine PROPFIND-Methode ist illegal.

<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:">
<D:allprop/>
<D:propname/>
</D:propfind>

Die Definition des propfind-Elements erlaubt nur das allprop- oder das propname-Element, nicht beide. Daher ist das oben Genannte ein Fehler und muss mit einem 400 (Bad Request) beantwortet werden.

Stellen Sie sich jedoch vor, dass ein Server "freundlich" sein wollte und beschloss, das allprop-Element als wahres Element auszuwählen und darauf zu reagieren. Ein Client, der über eine bandbreitenbegrenzte Leitung läuft und beabsichtigte, einen propname auszuführen, würde eine große Überraschung erleben, wenn der Server den Befehl als allprop behandelte.

Wenn ein Server außerdem nachsichtig wäre und beschließen würde, auf diese Anfrage zu antworten, würden die Ergebnisse von Server zu Server zufällig variieren, wobei einige Server die allprop-Direktive ausführen und andere die propname-Direktive ausführen. Dies verringert die Interoperabilität, anstatt sie zu erhöhen.

A.4. Example - Unexpected XML Element (Beispiel - Unerwartetes XML-Element)

Das vorherige Beispiel war illegal, weil es zwei Elemente enthielt, die explizit verboten waren, zusammen im propfind-Element zu erscheinen. XML ist jedoch eine erweiterbare Sprache, sodass man sich vorstellen kann, dass neue Elemente für die Verwendung mit propfind definiert werden. Unten ist der Anforderungskörper eines PROPFIND und muss, wie das vorherige Beispiel, von einem Server, der das expired-props-Element nicht versteht, mit einem 400 (Bad Request) abgelehnt werden.

<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:"
xmlns:E="http://www.example.com/standards/props/">
<E:expired-props/>
</D:propfind>

Um zu verstehen, warum ein 400 (Bad Request) zurückgegeben wird, schauen wir uns den Anforderungskörper an, wie der Server, der mit expired-props nicht vertraut ist, ihn sieht.

<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:"
xmlns:E="http://www.example.com/standards/props/">
</D:propfind>

Da der Server das 'expired-props'-Element nicht versteht, muss er gemäß den in Abschnitt 17 spezifizierten WebDAV-spezifischen XML-Verarbeitungsregeln die Anfrage so verarbeiten, als ob das Element nicht vorhanden wäre. Daher sieht der Server ein leeres propfind, was nach der Definition des propfind-Elements illegal ist.

Bitte beachten Sie, dass die Erweiterung, wenn sie additiv gewesen wäre, nicht unbedingt zu einem 400 (Bad Request) geführt hätte. Stellen Sie sich beispielsweise den folgenden Anforderungskörper für ein PROPFIND vor:

<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:"
xmlns:E="http://www.example.com/standards/props/">
<D:propname/>
<E:leave-out>*boss*</E:leave-out>
</D:propfind>

Das vorherige Beispiel enthält das fiktive Element leave-out. Sein Zweck ist es, die Rückgabe jeder Eigenschaft zu verhindern, deren Name mit dem übermittelten Muster übereinstimmt. Wenn das vorherige Beispiel an einen Server übermittelt würde, der mit 'leave-out' nicht vertraut ist, wäre das einzige Ergebnis, dass das 'leave-out'-Element ignoriert und ein propname ausgeführt würde.