Bernhard: XML external unparsed entities

Hallo,

ich bin gerade in der Situation, dass mir zum ersten Mal XML-Entitys für externe Ressourcen weiterhelfen würden. Ich hab gedacht, so schwierig kann das nicht sein und und versucht, das in ein Real-World-Projekt einzubauen. Nach einigen erfolglosen Versuchen bin ich stutzig geworden und hab mich am Beispiel aus dem Wiki versucht.

Und siehe da: Auch das funktioniert nicht so wie gedacht: Das kommt raus, wenn ich das Beispiel aus dem Wiki umzusetzen versuche

Schon meine IDE (IntelliJ IDEA 2019.3; Community und Ultimate Edition verhalten sich gleich) zeigt mir die schöne Fehlermeldung ENTITY "datenquelle" is not unparsed. Im Vergleich zum Beispiel im Wiki hab ich die DTD inline definiert. Meine Versuche mit einer externen DTD haben aber das gleiche Resultat geliefert.

Jetzt kann es durchaus sein, dass das ein Fehler in IntelliJ ist. Externe Ressourcen sind vermutlich kein 08/15-Feature und zum Schreiben einer Applikation für das Wiki-Beispiel war ich bisher zu faul. Allerdings haben meine ersten Versuche mit einer Real-World-Anwendung (es geht um ein Tomcat-Konfigurationsfile) zu gleich klingenden Fehlern beim Parsen geführt. Insofern gehe ich davon aus, dass diese Fehlermeldung ihre Richtigkeit hat.

Also Frage in die Runde: Hat irgendwer schonmal externe Ressourcen erfolgreich verwenden können? Hat das Wiki-Beispiel vielleicht einen Haken? Oder mach ich grundsätzlich was falsch?

Beachte: Es ist wichtig für mich, dass ich einen relativen Pfad zur externen Ressource angeben kann. "news.txt" durch einen File-URI zu ersetzen kommt nicht in Frage, da man dort nur absolute Pfade angeben kann.

Danke

Bernhard

  1. Du definierst ENTITY datenquelle.. Zur Verwendung müsste &datenquelle; notiert sein. MFG

    1. Hi, demnach wären sowohl das Wiki-Beispiel als auch zB dieses Buch falsch.

      Darüber hinaus sagt IntelliJ, wenn ich "&datenquelle;" verwende eindeutig: "The external entity reference "&datenquelle;" is not permitted in an attribute value."

      Das ist offenbar nicht die Lösung.

      Grüße Bernhard

  2. Hallo Bernhard,

    in Attributwerten können nur ungeparste externe Entitys stehen, ein Fall für NDATA. Das SELFHTML-Beispiel funktioniert mit dieser news.dtd:

    <!ELEMENT news (newsdaten)*>
    <!NOTATION txt SYSTEM "text/plain">
    <!ENTITY datenquelle SYSTEM "news.txt" NDATA txt>
    <!ELEMENT newsdaten EMPTY>
    <!ATTLIST newsdaten quelle ENTITY #REQUIRED>
    
    

    und <newsdaten quelle="datenquelle"/> im XML-Dokument.

    »If the NDataDecl is present, this is a general unparsed entity; otherwise it is a parsed entity.« [Quelle]

    Grüße,
    Thomas

    1. Danke Thomas, das sieht vielversprechend aus:

      So scheints zu gehen

      Kannst du das bitte im Wiki auch korrigieren bzw. erweitern. Zum jetzigen Zeitpunkt fehlt mir dazu noch etwas Hintergrundwissen.

      Schöne Grüße

      Bernhard

    2. @@ThomasM

      Hallo Bernhard,

      in Attributwerten können nur ungeparste externe Entitys stehen, ein Fall für NDATA.

      Kannst du das näher erläutern? Heißt das, sowas ginge nicht?

      <!DOCTYPE rdf:RDF [  
        <!ENTITY schiff "http://example.net/schiffahrt/schiff#">  
        <!ENTITY ort "http://example.net/schiffahrt/ort#">  
        <!ENTITY fahrt "http://example.net/schiffahrt/fahrt#">  
      ]>  
      <rdf:RDF  
        xmlns="http://example.net/schiffahrt/ns#"  
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
      
      >
      
        <Ort rdf:about="&ort;London">  
          <Name>London</Name>  
        </Ort>  
        <Schiff rdf:about="&schiff;USSMidway">  
          <Name>USS Midway</Name>  
        </Schiff>  
      </rdf:RDF>
      

      (gefunden in diesem Posting von vor 10 Jahren)

      LLAP 🖖

      --
      „Man kann sich halt nicht sicher sein“, sagt der Mann auf der Straße, „dass in einer Gruppe Flüchtlinge nicht auch Arschlöcher sind.“
      „Stimmt wohl“, sagt das Känguru, „aber immerhin kann man sich sicher sein, dass in einer Gruppe Rassisten nur Arschlöcher sind.“

      —Marc-Uwe Kling
      1. Hallo Gunnar,

        Kannst du das näher erläutern?

        Gemeint war ein Attribut vom ENTITY-Typ. Die genannten RDF-Attribute dürften vom CDATA-Typ sein.

        Grüße,
        Thomas