Thomas J.S.: Entity-Referenz bzw. -Auftreten in/als Attributwert

Beitrag lesen

Hallo Franz!

Jetzt versuche ich auch die anderen Postings zu miteinbeziehen.

und in der DTD:
<!ENTITY logo "../xml/bilder/logo.gif">

Das Problem damit, daß es sich hier da es eine URI ist, um einen externen Entity handelt.
Demnach müsste es aber (wie du auch schreibst) so definert werden:
<!ENTITY logo SYSTEM  "../xml/bilder/logo.gif" NDATA gif> (gif kleingeschreiben)
Dazu sollte die NOTATION so aussehen (es ist hier nur theoretischg, denn ich nicht weiss wie Unisys/Copuserve das behandelt) :
<!NOTATION gif PUBLIC "-//CompuServe//NOTATION Unisys Graphics Format//EN">

Eigentlich mache ich aber doch nichts anderes als eine Entity-Referenz im Attributwert einsetzen, etwas laut XML-Spezifikation Verbotenes.

Das ist nicht ganz richtg.
<q>Reference in Attribute Value as a reference within either the value of an attribute in a start-tag, or a default value in an attribute declaration; corresponds to the nonterminal AttValue.</q>
Es kann also so aussehen:

<logo scr='&home;/bilg.gif'>

Verboten ist es nur bei unparsed Entities als "a reference to an external entity in an attribute value.". Also genau das was du haben möchtest.

=======dein posting====
korrekt, aber in meinem anderen Posting, hab ich geschrieben, dass ich mich vertan habe. Ist eben gar keine externe Entität auf die referenziert wird, sondern ne interne (vgl. http://www.w3.org/TR/REC-xml#sec-internal-ent)

erst mit
<!NOTATION GIF PUBLIC "CompuServe/Unisys Graphics Format">
<!ENTITY logo SYSTEM  "../xml/bilder/logo.gif" NDATA GIF>

Nein. Denn eine "internal entity is a parsed entity" und "There is no separate physical storage object".
Hier <!ENTITY logo "../xml/bilder/logo.gif"> definerst du im Grunde nur einen 'repalcement text' für 'logo'.

Es ist eine andere (gute) Frage ob und wie xml-parser das behandeln.

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 ;-):

Es könnte wie oben geschrieben an deine NOTATION liegen. Aber was bemängeln die Parser?

Kennt jemand eine korrekte Lösung

Aber wie bitte tritt eine unparsed Entity, also z.B. ein GIF-Bild in einem Attribut auf? Mir völlig unklar.

Du kannt im ENTITY einiges machen so z.B. folgendes:

<!ELEMENT img - O EMPTY >
<!ATTLIST img
          src %URI; #REQUIRED

(wobei ich das jetzt aus dem html dtd für img geholt habe)

<!ENTITY logo
"<img src="bild.gif" />"

Wobei das hier SGML-mäßig ok ist, weiss ich nicht wie es von Parser ausgeführt wird.

Grüße
Thomas