Hallo Forum,
habe ein Problemchen, welches (noch) etwas Abseits des Alltags eines Webworkers liegt, aber z.Zt. trotzdem gelöst werden will.
Vielleicht kann mir ja jemand helfen, schließlich "bedroht" uns XML doch alle <g>
Laut aktueller XML-1.0-Recommendation sind (Parameter-)Entity-Referenzen als Attribut-Wert verboten bzw. werden nicht erkannt. Erlaubt ist einzig das Auftreten von nicht-analysierten Entities als Attributwert.
vgl: http://www.w3.org/TR/REC-xml#entproc
Klingt etwas abstrakt :))
Vielleicht ein Beispiel.
In einer DTD lassen sich sogenannte Entities definieren, die sich z.B. als Abkürzung benutzen lassen.
Steht in der DTD
<!ENTITY firma "Südwestdeutscher Rundfunk GmBH und CoKG">
kann in der XML-Datei z.B. mit &firma; auf diese Entity referenziert werden (vgl. auch ä in HTML). Der XML-Prozessor setzt dann den definierten Text ein.
Damit ließen sich z.B. sehr schön Links verwalten:
<!ENTITY pfad "logo.gif">
und in der XML-Datei eine Referenz im href bzw src Attribut. Taucht ein Link dann in mehreren Dateien auf und ändert sich die URL, muß man lediglich die DTD ändern.
OK. Nun zu meinem konkreten-Problem.
Ich habe eine XML-Datei mit folgendem Codschnipsel:
<cd>
<logo quelle=&logo;>
</cd>
und in der DTD:
<!ENTITY logo "../xml/bilder/logo.gif">
Offensichtlich soll hier ein Bild eingebunden werden. Über ein XSL-Stylesheet wird dies dann auch dargestellt auf üblichem Weg (Auslesen des Attributwertes in das src-Attribut eines img-Tags)
Der MSIE stellt mir das Bild dann dar.
Ebenso meckern diverse XML-Parser bzw. XSLT-Prozessoren mit XML-Parsern nicht (Xerces, Xalan).
Eigentlich mache ich aber doch nichts anderes als eine Entity-Referenz im Attributwert einsetzen, etwas laut XML-Spezifikation Verbotenes. Egal denkt man sich, Hauptsache es funzt, schließlich nicht zum ersten mal, dass sich keiner um die Normen kümmert.
Machs ichs nun aber wie's laut XML-Spezifikation richtig wäre, nämlich, die Entity als nicht-analysierte Definieren und dann _als_ Attributwert auftreten lassen, geht es nicht mehr.
Soll heißen: Der MSIE zeigt das Bild nicht an und die XML-Parser motzen und machen erst gar keine Verarbeitung mehr(was mich eigentlich mehr besorgt ;-):
In der DTD (mit Notationsdeklaration)
<!NOTATION GIF PUBLIC "CompuServe/Unisys Graphics Format">
<!ENTITY logo SYSTEM "../xml/bilder/logo.gif" NDATA GIF>
im XML:
<logo quellelogo=logo></logo>
(So auch in der Literatur gefunden, allerdings in nicht sonderlich gutem Buch; im Mintert z.B. steht aber auch nur Allgemeines zu dem Thema, kein konkretes Bsp.)
Also: IE stellt Bild nicht dar, der MS-Parser motzt aber nicht.
Die anderen Parser melden logischerweise fehlende Anführungszeichen um die Attributwere. Setze ich sie, setzen sie das Literal "logo" als Attributwert und das Bild wird natürlich ebenfalls nicht angezeigt.
Meine Frage nun:
Muß ich dass nun so hinnehmen. Es klappt ja schließlich. Oder verstehe ich einfach was falsch.
Kennt jemand eine korrekte Lösung oder kann mein eventuelles theoretisches Missverständnis beheben?
Viele Grüsse
Franz