Entity-Referenz bzw. -Auftreten in/als Attributwert
fjh
- xml
0 Simon0 fjh
0 Calocybe0 Thomas J.S.0 fjh
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
Hi Franz!
<logo quellelogo=logo></logo>
Ich stecke zwar nicht ganz so in der Materie (zumindest weiß ich, was Entities sind), aber hast du das wirklich so gefunden?
Oder muss da nicht da nicht &logo; stehen, statt einfach nur logo?
Eine gute Referenz zu DTDs ist http://members.aol.com/xmldoku/. Vielleicht findest du ja da was.
MfG Simon
Hi Simon
<logo quellelogo=logo></logo>
Ich stecke zwar nicht ganz so in der Materie (zumindest weiß ich, was Entities sind), aber hast du das wirklich so gefunden?
Ja, habe ich genauso gefunden.
Und zwar bei Michael Seeboerger-Weichselbaum <i>XML - Das Einsteigerseminar</i>.
Dort steht auch, das der IE das nicht kann und man dort anders vorgehen muß. Dachte zuerst könnte ja sein, weil auch der Parser nicht meckert vom MS. Da das Buch aber äußerst schlampig gelayoutet ist und auch ansonsten einiges nicht so ganz astrein beschrieben ist (obwohl sehr praxisbezogen und billig <g>) kam mir das dann nicht ganz so glaubwürdig vor.
Alle anderen Quellen, die ich so kenne, auch Deine (danke übrigens) bleiben sehr allgemein, was Entities angeht und v.a. Entities als Attribute!
Oder muss da nicht da nicht &logo; stehen, statt einfach nur logo?
Ja dachte ich auch, aber dann meldet der Parser wieder (auch der MS-Parser) völlig zurecht (laut Spec), dass die Anführungszeichen fehlen. Mit Anführungszeichen gehts dann aber.
Gut ist die Sache aber doch, da man durch die Lückenhaftigkeit der Sekundärliteratur gezwungen ist, sich durch die Spezifikationen zu ackern und dabei ne Menge lernt (wann hab ich zum letzten mal ‚tatsächlich in ne HTML-Spec geschaut!).
Also mein Lösungsweg ist gar nicht verboten laut Spec, da es sich um eine Referenz auf ein internes Entity handelt, die durchaus erlaubt ist.
<!ENTITY logo "../xml/bilder/logo.gif">
Sie haben einen Inhalt der eben sogleich auch definiert wird und nicht auf eine externe Quelle verweist.
Gut, das habe ich nun kapiert.
Bleibt aber noch die Frage wie ich nun ein Bild über Entities einbinden kann.
Eigentlich müßte dies über ein nicht-analysiertes, externes Entity gehen:
In der DTD
<!NOTATION GIF PUBLIC "CompuServe/Unisys Graphics Format">
<!ENTITY logo SYSTEM "../xml/bilder/logo.gif" NDATA GIF>
und im XML:
<bild>&logo;</bild>
Aber das ist verboten! Möglich ist dies nur über Attributwerte! Aber wie nun, wenn nicht so wie im Buch beschrieben.
Die relevanten Passagen in der Recommendation verstehe ich nicht:
1)"Parsed entities are invoked by name using entity references; unparsed entities by name, given in the value of ENTITY or ENTITIES attributes." http://www.w3.org/TR/REC-xml#sec-physical-struct
und 2) mit Bezug zum ENTITY value:
"Validity Constraint: Entity Name
Values of type ENTITY must match the Name production, values of type ENTITIES must match Names; each Name must match the name of an unparsed entity declared in the DTD." http://www.w3.org/TR/REC-xml#sec-attribute-types
Ein Königreich für ein Beispiel!
Gruß
Franz
MfG Simon
Hallo
Ich muss vorausschicken, dass ich gerade erst anfange, mich mit dem XML stuff zu beschaeftigen. Steht also nicht so auf sicheren Beinen, was jetzt folgt.
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.
Was ist "nicht-analysiert"? Meinst Du "unparsed"? Eine Uebersetzung dieser Begriffe ins Deutsche halte ich fuer ausserordentlich verwirrend und unzweckmaessig. (Verwirrend sind die vielen Begriffe ohnehin schon.)
Halten wir fest, dass Du "*als* Attributwert verboten" schreibst, jedoch nicht "*im* Attributwert".
Ich habe eine XML-Datei mit folgendem Codschnipsel:
<cd>
<logo quelle=&logo;>
</cd>
und in der DTD:
<!ENTITY logo "../xml/bilder/logo.gif">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.
Verboten ist hier zuerst mal, dass Du den Attributwert nicht in Anfuehrungszeichen " oder ' gesetzt hast. Mein XML-Parser (Expat; verwendet vom Perl-Modul XML::Parser) meckert dies auch gleich an. Desweiteren ist das logo-Tag nicht geschlossen.
Schreibst Du also
<logo quelle="&logo;" />
ist alles in Ordnung. Hier findet sich die Entity reference dann ja auch *im* Attributwert, was alles andere als verboten ist. *Als* Attributwert geht ja eigentlich nicht so recht, denn dann muesste man es ja ohne Anfuehrungszeichen schreiben, was schon wieder nicht wellformed ist.
Zu dem Rest mit der External Entity kann ich nichts sagen, soweit bin ich noch nicht in der Spec. ;-)
So lange
Hi Calocybe,
Ich muss vorausschicken, dass ich gerade erst anfange, mich mit dem XML stuff zu beschaeftigen.
ich auch, ich auch, stecke halt nur gerade tiefer drin, weil ich in der Firma so'n bißchen XML als Format für unsere Dokus... "verkaufen" möchte. Sonst muß ich mich nämlich in das schreckliche Word weiter einarbeiten, was mir gar nicht so recht gefallen will.
Und da kann ich dann nicht mit Halbwissen ankommen ;-)
Was ist "nicht-analysiert"? Meinst Du "unparsed"? Eine Uebersetzung dieser Begriffe ins Deutsche halte ich fuer ausserordentlich verwirrend und unzweckmaessig. (Verwirrend sind die vielen Begriffe ohnehin schon.)
Gemeint ist unparsed. Die Übersetzung ist von Mintert und eigentlcih - meiner Ansicht nach - sehr gut, aber du hast recht, warum soviele Begriffe: also - unparsed. Schließlich heißt es ja auch "Entity" und nicht "abstrakter Gegenstand" oder so ;-)
Halten wir fest, dass Du "*als* Attributwert verboten" schreibst, jedoch nicht "*im* Attributwert".
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>
wird es eine externe (eigentlich klar, wegen der Pfadangabe!) und durch die Angabe von NDATA zur unparsed Entity. Und solche Dinger (externe, unparsed Entities) sind laut Spec eben nur per Auftreten *als* Attribut-Wert (keine Referenz also: &xxx;) zugelassen (http://www.w3.org/TR/REC-xml#entproc). Aber wie bitte tritt eine unparsed Entity, also z.B. ein GIF-Bild in einem Attribut auf? Mir völlig unklar.
Zu dem Rest mit der External Entity kann ich nichts sagen, soweit bin ich noch nicht in der Spec. ;-)
schade :)
Danke trotzdem und bis denn
Franz
Hi again
ich auch, ich auch, stecke halt nur gerade tiefer drin, weil ich in der Firma so'n bißchen XML als Format für unsere Dokus... "verkaufen" möchte. Sonst muß ich mich nämlich in das schreckliche Word weiter einarbeiten, was mir gar nicht so recht gefallen will.
Oh. Das ist aber ganz schoen gewagt.
In meinem Fall wollen wir ein Kommunikationsprotokoll zwischen verschiedenen CGI-Anwendungen XML-basiert definieren. Genauer gesagt gibt es eine Server-App, die sich per XML reinzieht, was sie zu tun hat, und dann die Ergebnisse der durchgefuehrten Arbeiten als XML zurueckgibt. Eine Client-App, im speziellen Fall ebenfalls ein (etwas groesseres *g*) CGI-Script ruft halt die Server-App mit einem XML-Dokument als Anweisungsliste auf.
Zu dem Rest mit der External Entity kann ich nichts sagen, soweit bin ich noch nicht in der Spec. ;-)
schade :)
Na gut, ich hab's jetzt mal gelesen. Zum Glueck wird auf http://www.xml.com/axml/axml.html die Spec mit zahlreichen Kommentaren unterstuetzt.
Aus Deinem anderen Posting:
Aber das ist verboten! Möglich ist dies nur über Attributwerte! Aber wie nun, wenn nicht so wie im Buch beschrieben.
Die relevanten Passagen in der Recommendation verstehe ich nicht:
1)"Parsed entities are invoked by name using entity references; unparsed entities by name, given in the value of ENTITY or ENTITIES attributes." http://www.w3.org/TR/REC-xml#sec-physical-struct
ENTITY-Attribute sind genau dann solche, wenn sie so deklariert wurden. In Deinem Fall muesste das ungefaehr
<!ATTLIST logo
quelle ENTITY #REQUIRED
>
lauten. Siehe auch Kapitel 3.3.1. der Spec.
und 2) mit Bezug zum ENTITY value:
"Validity Constraint: Entity Name
Values of type ENTITY must match the Name production, values of type ENTITIES must match Names; each Name must match the name of an unparsed entity declared in the DTD." http://www.w3.org/TR/REC-xml#sec-attribute-types
Die Einbindung erfolgt dann mit
<logo quelle="logo">
Obiger Validity constraint sagt einfach aus, dass das "logo" (der Attributwert) der Name einer in der DTD deklarierten unparsed entity sein muss, that is, Du musst die Entity logo genau so deklarieren, wie Du's hier getan hast:
erst mit
<!NOTATION GIF PUBLIC "CompuServe/Unisys Graphics Format">
<!ENTITY logo SYSTEM "../xml/bilder/logo.gif" NDATA GIF>wird es eine externe (eigentlich klar, wegen der Pfadangabe!) und durch die Angabe von NDATA zur unparsed Entity.
Eine externe wird es uebrigens durch die Angabe von SYSTEM (oder stattdessen PUBLIC).
Ach ja, und um mir noch das Koenigreich zu verdienen: http://www.xml.com/axml/notes/ExplUnpEnt.html
War's das, was Du wissen wolltest?
Hallo,
ich auch, ich auch, stecke halt nur gerade tiefer drin, weil ich in der Firma so'n bißchen XML als Format für unsere Dokus... "verkaufen" möchte. Sonst muß ich mich nämlich in das schreckliche Word weiter einarbeiten, was mir gar nicht so recht gefallen will.
Oh. Das ist aber ganz schoen gewagt.
Wieso?
Ist eh gerade im Aufbau die Organisation, vor allem die Online-Dokus. Da eignet sich XML doch hervorragend zur Strukturierung der Dokumente. Soll ja auch erstmal ganz klein anfangen. Z.B. versuche ich gerade aus einem einfach strukturierten XML-Dokument, was als so eine Art Datenbank für die Projektdokus auf CD fungiert mit einem XSLT-Stylesheet mehrere HTML-Seiten zu generieren, die dann die Navigationsoberfläche für eine CD-Rom liefern.
Bin noch etwas unbedarft was das Splitten in mehrere Dateien angeht, aber gehen tut das mit XSLT-Prozessorerweiterungen. Zufällig steht übrigens sowas in der Art in der letzten c't. Dort werden aus einer XML-Datei hunderte WML-Dateien generiert mittels eines Style-Sheet!
Richtig interessant wirds natürlich erst, wenn man auch die Dokumente selbst nicht mehr im Word-Format, sondern als XML hält und dann eben für verschiedene Medien aufbereitet. Na mal sehen, alles zu seiner Zeit. Jedenfalls machts allemal mehr Spaß als copy und paste + zusammengewurschtelte Word-Vorlagen...
In meinem Fall wollen wir ein Kommunikationsprotokoll zwischen verschiedenen CGI-Anwendungen XML-basiert definieren. Genauer gesagt gibt es eine Server-App, die sich per XML reinzieht, was sie zu tun hat, und dann die Ergebnisse der durchgefuehrten Arbeiten als XML zurueckgibt. Eine Client-App, im speziellen Fall ebenfalls ein (etwas groesseres *g*) CGI-Script ruft halt die Server-App mit einem XML-Dokument als Anweisungsliste auf.
Ja, XML als eine Art Austauschformat, auch eine Anwendungsdomäne.
Na gut, ich hab's jetzt mal gelesen. Zum Glueck wird auf http://www.xml.com/axml/axml.html die Spec mit zahlreichen Kommentaren unterstuetzt.
prima, danke, der link war in meinem bookmarkhaufen glatt untergegangen
» ENTITY-Attribute sind genau dann solche, wenn sie so deklariert wurden. In Deinem Fall muesste das ungefaehr
<!ATTLIST logo
quelle ENTITY #REQUIRED
>
lauten. Siehe auch Kapitel 3.3.1. der Spec.
Die Einbindung erfolgt dann mit
<logo quelle="logo">
Obiger Validity constraint sagt einfach aus, dass das "logo" (der Attributwert) der Name einer in der DTD deklarierten unparsed entity sein muss, that is, Du musst die Entity logo genau so deklarieren, wie Du's hier getan hast:erst mit
<!NOTATION GIF PUBLIC "CompuServe/Unisys Graphics Format">
<!ENTITY logo SYSTEM "../xml/bilder/logo.gif" NDATA GIF>
Ja, so habe ich mir das dann auch zurechtgelegt. Dachte aber, da es nicht funktioniert, daß ich was falsch verstehe. Aber offensichtlich liege ich nicht so ganz daneben. Der MSIE stellt das Bild nicht dar und Xalan generiert eine HTML-Datei, die als Attributwert "logo" stehen hat. Eben den String logo statt des Pfadnamens. Irgendwie wird nicht registriert, daß es eine Entity mit Namen logo gibt, obwohl sie ganz oben in der DTD deklariert ist.
Hast du oder irgendwer anders, sowas mal ausprobiert?
Ach ja, und um mir noch das Koenigreich zu verdienen: http://www.xml.com/axml/notes/ExplUnpEnt.html
War's das, was Du wissen wolltest?
Ja, schon, aber ich wollte eigentlich ein Beispiel das funktioniert. So gibts nur ne Kolonie in Kolumbien ;-)
Na, da werde ichs wohl erstmal so lassen, die Lösung über externe Entities halte ich zwar für eleganter, aber letzlich ist das eher theoretisches Interesse.
Danke und Grüße
Franz
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)
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
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
Hallo Franz!
Auf die Gefahr hin, dass es langsam etwas verwirrend wird mit den Begrifflichkeiten ;-)
Ist gut so, so können wir alle dazulernen.
<!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!).
So verstehe ich auch.
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.
Dann mache es so. ;-)
Eine Referenz auf eine externe *unparsed* Entity ist laut XML-1.0-Recommendation nur *als* Attributwert erlaubt ("Occurence as Attribute Value").
Ne. (wenn wir annehemn daß: Attributwert = attribute value)
Punkt 3.1
"Well-Formedness Constraint: No External Entity References.
Attribute values cannot contain direct or indirect entity references to external entities"
Was Entities angeht Punkt 4.1:(es geht hier also um eine ENTITY nicht um ELEMENT.)
"Well-Formedness Constraint: Parsed Entity.
An entity reference must not contain the name of an unparsed entity.
Unparsed entities may be referred to only in attribute values declared to be of type ENTITY or ENTITIES"
Im Klartext, folgendes geht nicht:
<!ENTITY logo SYSTEM 'bild.gif' NDATA gif>
...
<div>Dir Firma: &logo; ist ...</div>
Da somit mitunter binary-Daten mittem im Text auftauchen würden.
Deswegen muss es wie im Punkt 3.3.1 sein, wo wir wieder beim ELEMENT sind.:
"Validity Constraint: Entity Name.
Values of type ENTITY must match the Name production, values of type ENTITIES must match Names; each Name must match the name of an unparsed entity declared in the DTD."
Im Klartext (wie du auch schreibst):
<!NOTATION gif PUBLIC "blalabla">
<!ENTITY logo SYSTEM "http://www.domain.de/bild.gif" NDATA gif>
<!ATTLIST Wir src ENTITY #REQUIRED>
...
<Wir src="Antarctica">
Das ganze ist doch irgendwie verwirrend ,alles schön wiedersprüchlich. Mir scheint das Problem bei den verschiedenen Möglichkeiten für Entities zu liegen:
Internal parsed general / Internal parsed parameter / External parsed general / External parsed parameter / External unparsed general
Na ja... eines Tages werden wir schlau genug alles rauszufinden.
Ich konnte jetzt nichts ausprobiren, da ich gerade den Rechner putze und alles mögliche lösche, u.a. alle die kleinen xml-programme. ;-)
Grüße
Thomas