Michael: XML: Entity in externer DTD

Hallo zusammen, ich habe folgendes Problem, und zwar möchte ich eine externe Entity aus einer DTD-Datei in einer .xml aufrufen und krieg es einfach nicht hin. Außerdem würde ich gern wissen, wie man ein Attribut als "Default" setzen kann, in dem Fall bei Telefonnummer das Attribut privat. Ich bedanke mich im voraus für alle Antworten.

Hier ist der Quelltext: XML:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Uebung2Aufgabe3dtd SYSTEM "Uebung3 Aufgabe 2.dtd">
<Personeninformationen>
	<Person matrNr="000001">
		<Name> Peter </Name>
		<Vorname> Hans </Vorname>
		<PLZ> 01234 </PLZ>
		<Ort> Buxtehude </Ort>
		<Straße> Kartoffelecke 5 </Straße>
		<Telefonnummer> 0015456833 </Telefonnummer>
		<Hochschule> &HL; </Hochschule>
	</Person>
	<Person matrNr="000002">
		<Name> Bürger </Name>
		<Vorname> Bernd </Vorname>
		<PLZ> 43210 </PLZ>
		<Ort> Wurstbude </Ort>
		<Straße> Obenuntenlinksrechts 4 </Straße>
		<Telefonnummer anschluss="dienstlich"> 0189951 </Telefonnummer>
		<Hochschule> &HL; </Hochschule>
	</Person>
	<Person matrNr="000003">
		<Name> Müller </Name>
		<Vorname> Hugo </Vorname>
		<PLZ> 56789 </PLZ>
		<Ort> Nixdorf </Ort>
		<Straße> An der Ecke Straße 12 </Straße>
		<Telefonnummer anschluss="privat"> 0222111223 </Telefonnummer>
		<Hochschule> &BTU; </Hochschule>
	</Person>
</Personeninformationen>

DTD:

<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT Personeninformationen (Person+)> 
<!ELEMENT Person (Name,Vorname?,PLZ,Ort,(Straße|Postfach),Telefonnummer*)+>
<!ATTLIST Person
	matrNr ID #REQUIRED

>

<!ELEMENT Name (#PCDATA)>
<!ELEMENT Vorname (#PCDATA)>
<!ELEMENT PLZ (#PCDATA)>
<!ELEMENT Ort (#PCDATA)>
<!ELEMENT Straße (#PCDATA)>
<!ELEMENT Postfach (#PCDATA)>
<!ELEMENT Telefonnummer (#PCDATA)>
<!ATTLIST Telefonnummer 
	anschluss (dienstlich|privat) "privat"

>

<!ELEMENT Hochschule (#PCDATA)>
<!ENTITY HL SYSTEM "Hochschule Lausitz (FH) &#8722; University of Applied Sciences">
<!ENTITY BTU SYSTEM "Brandenburgische Technische Universität Cottbus &#8722; Brandenburg University of Technology">

akzeptierte Antworten

  1. Tach,

    ich habe folgendes Problem, und zwar möchte ich eine externe Entity aus einer DTD-Datei in einer .xml aufrufen und krieg es einfach nicht hin.

    du meinst das hier http://xml.silmaril.ie/dtdincludes.html?

    Außerdem würde ich gern wissen, wie man ein Attribut als "Default" setzen kann, in dem Fall bei Telefonnummer das Attribut privat.

    Genau so, wie du es bereits tust: http://wiki.selfhtml.org/wiki/XML/DTD/Attribute_und_Wertzuweisungen

    mfg
    Woodfighter

  2. Hallo Michael,

    Außerdem würde ich gern wissen, wie man ein Attribut als "Default" setzen kann, in dem Fall bei Telefonnummer das Attribut privat.

    Das sieht in der DTD richtig aus.

    <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Uebung2Aufgabe3dtd SYSTEM "Uebung3 Aufgabe 2.dtd">

    ^^^ Hier gehört das Wurzelelement hin, also:

    <!DOCTYPE Personeninformationen SYSTEM "Uebung3 Aufgabe 2.dtd">

    <Personeninformationen> <Person matrNr="000001">

    000001 ist kein gültiger ID-Wert, soll dieser beibehalten werden ggf. in der DTD den Typ auf CDATA ändern.

      <Name> Peter </Name>
      <Vorname> Hans </Vorname>
      <PLZ> 01234 </PLZ>
      <Ort> Buxtehude </Ort>
      <Straße> Kartoffelecke 5 </Straße>
      <Telefonnummer> 0015456833 </Telefonnummer>
      <Hochschule> &HL; </Hochschule>
    

    Hochschule ist hier lt. DTD nicht erlaubt, also ergänzen:

    <!ELEMENT Person (Name,Vorname?,PLZ,Ort,(Straße|Postfach),Telefonnummer*,Hochschule)+>

    </Person>

    ...

    <!ENTITY HL SYSTEM "Hochschule Lausitz (FH) &#8722; University of Applied Sciences"> <!ENTITY BTU SYSTEM "Brandenburgische Technische Universität Cottbus &#8722; Brandenburg University of Technology">

    SYSTEM bedeutet Verweis auf eine externe Datei, etwa:

    <!ENTITY HL SYSTEM "text1.txt"> <!ENTITY BTU SYSTEM "text2.txt">

    und in den Textdateien dann am besten UTF-8-kodiert speichern:

    Hochschule Lausitz (FH) − University of Applied Sciences

    bzw.

    Brandenburgische Technische Universität Cottbus − Brandenburg University of Technology

    Allerdings braucht man zur Anzeige der Inhalte auch validierende Parser, welche in aktuellen Browsern nicht verfügbar sind. Firefox sagt dazu: "XML-Verarbeitungsfehler: Nicht definierte Entität".

    Neuere IEs können das nur noch im Kompatibilitätsmodus (F12 --> IE8 auswählen).

    Grüße, Thomas

    1. Hochschule ist hier lt. DTD nicht erlaubt, also ergänzen:

      <!ELEMENT Person (Name,Vorname?,PLZ,Ort,(Straße|Postfach),Telefonnummer*,Hochschule)+>

      Nachtrag: Das hier für Person angegebene + sollte entfernt werden, da dieses Inhaltsmodell wohl nicht mehr als 1x pro Person benötigt wird.

      Das Element Person ist ja bereits mindestens 1x erlaubt: <!ELEMENT Personeninformationen (Person+)>

      Grüße, Thomas