Alles über XML & Co. (XML Schema, XSLT, XPath, XQuery)

Montag, Oktober 09, 2006

Warum nicht jeder statt nur die anderen?

Gute Frage! Also: warum verwendet man in XML Schema für Erweiterungspunkte (extension points) nicht xs:any namespace="##any" anstelle von xs:any namespace="##other" und erlaubt somit als Erweiterungselemente auch Elemente aus dem eigenen Namensraum? Damit erreicht man ja noch mehr Flexibilität im Sinne einer einfacheren Erweiterbarkeit.

Stimmt, damit wird das Erweitern für denjenigen, der schreibt, einfacher, aber in gleichem Maße macht es das Lesen, das Suchen und das Validieren schwieriger. Ein Programm kann nun nicht mehr damit rechnen, auf ein Element abc nur an einer bestimmten Stelle zu treffen. Das macht die Programmierung unnötig kompliziert und damit fehleranfällig.
Einfach ist nicht einfach einfach.
Außerdem hat ein Element einen Kontext und damit einen guten Grund, warum es nur an einer Stelle (oder an einer begrenzten Anzahl) auftauchen darf. Der Kontext gibt dem Element eine Semantik und die geht mit der Willkür verloren - ich empfehle hier "Alice im Spiegelland" als weiterführende Fachliteratur:
»Wenn ich ein Wort verwende«, behauptete Hampti-Dampti hochmütig, »dann hat es genau die Bedeutung, die ich haben will - nicht mehr und nicht weniger.«
Und was ist, wenn das Element tatsächlich an der jeweiligen Erweiterungstelle auftauchen darf? Ist es dann gerechtfertigt? Nein, denn wenn man schon beim Entwurf weiß, dass es da auftauchen darf, dann kann man es auch so spezifizieren. Dann klappt's btw auch mit der AutoCompletion :)
Alles sollte so einfach wie möglich gemacht sein, aber nicht einfacher. (Einstein)
Schließlich verletzt es das Prinzip des Seperation of Concerns (SoC): Ein Namensraum legt nämlich Verantwortlichkeiten fest und
"mit größerer Freiheit geht auch größere Verantwortung einher" (so oder so ähnlich meine Mutter als ich so ca. 12 war)
Umgekehrt stellt sich mir die Frage, warum man ##other überhaupt zulassen möchte, wenn Einfachheit kein Grund ist? Sinn macht es da, wo Elemente ohnehin keinen Kontext besitzen und durcheinander gewürfelt werden dürfen, Beispiel XHTML bzw. allgemein Mixed Content:
<xs:complexType mixed="true">
<xs:sequence minOccurs="0 maxOccurs="unbounded">
<xs:any namespace="##any" processContents="lax" />
</xs:sequence>
</xs:complexType>
Siehe auch

0 Comments:

Kommentar veröffentlichen

Links to this post:

Link erstellen

<< Home