fjh: Entity-Referenz bzw. -Auftreten in/als Attributwert

Beitrag lesen

Hallo Thomas

Auf die Gefahr hin, dass es langsam etwas verwirrend wird mit den Begrifflichkeiten ;-) nochmal kurz zusammengefasst (mit all euren Korrekturen) so wie ich es jetzt -hoffentlich korrekt - auffasse:

<!ENTITY logo "../xml/bilder/logo.gif">

ist eine interne *geparste* Entität (trotz URI-Angabe). Der Text in Anführungszeichen wird eingesetzt für die Entity-Referenz &logo; (also nur ein Replacement-Text!).
Referenzen auf interne Entities in Attributwerten ("Reference in Attribute Value") sind in Anführungszeichen laut XML-1.0-Recommendation erlaubt.
Klappt problemlos, kein Parser motzt und das Bild wird auch angezeigt mit entsprechendem Style-Sheet.

DTD
<!ENTITY logo "../xml/bilder/logo.gif">
<!ELEMENT logo (#PCDATA)>
    <!ATTLIST logo quellelogo ENTITY #REQUIRED>

XML-Datei:
<logo quellelogo="&logo;" />

XSLT-Datei
<div class="logo">
  <img border="0" width="132" height="100" alt="">
    <xsl:attribute name="src">
      <xsl:value-of select="logo/@quelle"/>
    </xsl:attribute>
  </img>
</div>

Folgendes in der DTD macht aus der internen Entity eine externe - wegen des SYSTEM bzw. PUBLIC Schlüsselwortes - und unparsed - wegen des Schlüsselwortes NDATA - Entity:

In DTD:
<!ENTITY logo SYSTEM  "../xml/bilder/logo.gif" NDATA gif>
mit zugehöriger Notationsdeklaration:
<!NOTATION gif PUBLIC "-//CompuServe/Unisys Graphics Format//EN">

Eine Referenz auf eine externe *unparsed* Entity ist laut XML-1.0-Recommendation  nur *als* Attributwert erlaubt ("Occurence as Attribute Value").

Also muß ich zusätzlich folgendes für ein Attribut in der DTD deklarieren:
<!ELEMENT logo (ENTITY)>
    <!ATTLIST logo quellelogo ENTITY #REQUIRED>

und kann dann in der XML-Datei referenzieren:
<logo quellelogo="logo"></logo>

Ergebnis: MSIE 5 zeigt Bild nicht an
Xalan generiert mit obigem XSLT-Stylesheet eine HTML-Datei, die im Attributwert den String "logo" stehen hat. Folge: Bild wird nicht angezeigt.
Keine Fehlermeldung des Parsers. Es wird offensichtlich die Konstruktion akzeptiert, klar ist ja auch wohlgeformt und gültig, aber nicht erkannt das der String "logo" als Attributwert eine externe Entität referenziert.
Irgendwie auch merkwürdig: als Attributwert eine Referenz auf ein externes Objekt. Eigentlich würde ich denken: man verweist im XML-Content direkt auf die externe Entität: also mit
<logo>&logo;</logo> direkt auf das Bild, aber das ist verboten laut Spec und die Parser monieren das auch entsprechend.

Bis dann
Franz