XML-Parsen < Sonstiges < Hochschule < Informatik < Vorhilfe
|
Aufgabe | 1 <?xml version ="1.0 " encoding ="ISO -8859 -1 " ?>
2 <! DOCTYPE adressbuch SYSTEM " abook .dtd">
3 <?xml - stylesheet type =" text /xml " href =" abook .xsl"?>
4
5 <adressbuch >
6 <adresse >
7 <firma >
8 <firmenname >Uni Bonn </ firmenname >
9 <abteilung >Informatik III </ abteilung >
10 </ firma >
11 <strasse >Römerstraße 164 </ strasse >
12 <plz >53117 </plz>
13 <ort >Bonn </ort>
14 </ adresse >
15
16 <adresse >
17 <person titel =" Herr ">
18 <vorname >Manfred </ vorname >
19 <nachname >Mustermann </ nachname >
20 </ person >
21 <strasse >Am Friedhof 11a</ strasse >
22 <plz >12345 </plz>
23 <ort >Irgendwo </ort>
24 </ adresse >
25 </ adressbuch >
Wir benötigen eine DTD zu obigem Adressdokument, das ausschnittsweise bereits in der Vorlesung
gezeigt wurde.
a) Schreibe eine DTD abook.dtd, die möglichst gut zu obigem Dokument passt. Validiere
das Dokument gegen diese DTD mit Saxon, wie unten beschrieben. Füge einen Testlauf
bei.
b) Erweitere nun die Adressbuch-DTD, so dass auch Postfachadressen und internationale
Adressen (z.B. GB, USA) unterstützt werden. Nenne die Datei abook1.dtd.
c) Erstelle ein Beispieldokument abook1.xml zu dieser DTD, das alle Adressvarianten abdeckt.
Validiere dieses Dokument mit Saxon, wie unten beschrieben.
XML validieren mit Saxon
Siehe XML parsen mit Saxon bei Aufgabe 2. Setze zusätzlich die Option -v, also
echo / > query
java -cp saxon8.jar net.sf.saxon.Query -1.1 -v -s meine_datei.xml query |
Hallo,
ich habe eine Aufgabe bekommen. Dafür muss ich ein dtd zu einem xml-file erstellen und anschliessend mit Saxon testen mit folgendem Aufruf: java -cp saxon8.jar net.sf.saxon.Query -1.1 -v -s datei.xml query
Leider bekomme ich die Fehlermeldung, dass das dtd-file nicht gefunden wurde. Beide files stehen im gleichen Ordner.
Kann mir da jemand helfen?
Viele Grüße,
Kleeblatt
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 23:59 Mo 05.11.2007 | Autor: | Bastiane |
Hallo zusammen!
Ich habe dieselbe Aufgabe, habe aber erstmal noch ein paar Fragen...
> 1 <?xml version ="1.0 " encoding ="ISO -8859 -1 " ?>
> 2 <! DOCTYPE adressbuch SYSTEM " abook .dtd">
> 3 <?xml - stylesheet type =" text /xml " href =" abook
> .xsl"?>
Was bedeutet denn eigentlich diese 3. Zeile da?
> 4
> 5 <adressbuch >
> 6 <adresse >
> 7 <firma >
> 8 <firmenname >Uni Bonn </ firmenname >
> 9 <abteilung >Informatik III </ abteilung >
> 10 </ firma >
> 11 <strasse >Römerstraße 164 </ strasse >
> 12 <plz >53117 </plz>
> 13 <ort >Bonn </ort>
> 14 </ adresse >
> 15
> 16 <adresse >
> 17 <person titel =" Herr ">
Und was bedeutet es, dass hier direkt person, titel und gleich noch "Herr" zusammen steht? Ich hätte da jetzt eher so was erwartet wie:
<person>
<titel> "Herr" </titel>
</person>
Ist das dasselbe? Wenn ja, warum schreibt man es hier anders?
> 18 <vorname >Manfred </ vorname >
> 19 <nachname >Mustermann </ nachname >
> 20 </ person >
> 21 <strasse >Am Friedhof 11a</ strasse >
> 22 <plz >12345 </plz>
> 23 <ort >Irgendwo </ort>
> 24 </ adresse >
> 25 </ adressbuch >
> Wir benötigen eine DTD zu obigem Adressdokument, das
> ausschnittsweise bereits in der Vorlesung
> gezeigt wurde.
> a) Schreibe eine DTD abook.dtd, die möglichst gut zu
> obigem Dokument passt. Validiere
> das Dokument gegen diese DTD mit Saxon, wie unten
> beschrieben. Füge einen Testlauf
> bei.
Muss ich da jetzt so was schreiben wie:
adressbuch::= adresse
adresse::=(firma|person) strasse plz ort
usw.? Oder was genau heißt es, eine DTD zu schreiben?
> b) Erweitere nun die Adressbuch-DTD, so dass auch
> Postfachadressen und internationale
> Adressen (z.B. GB, USA) unterstützt werden. Nenne die
> Datei abook1.dtd.
Postfächer haben nicht eine bestimmte Anzahl an Ziffern, oder? Laut Wikipedia werden nur die Zahlen in Zweierpaketen von rechts nach links geordnet - das müsste man dann wohl hierbei beachten, oder?
Und wo findet man am schnellsten heraus, wie die Adressen in GB und USA aussehen? Haben die da auch Plz - wie viele Stellen haben die usw.? Und wie ist das gemeint, ich kann ja doch nicht alle möglichen Adressen aus der ganzen Welt nehmen, wer weiß, wie die im tiefsten Afrika oder in Asien aussehen? Was genau soll ich denn hier machen?
Viele Grüße
Bastiane
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 00:49 Di 06.11.2007 | Autor: | rainerS |
Hallo Bastiane!
> > 1 <?xml version ="1.0 " encoding ="ISO -8859 -1 " ?>
> > 2 <! DOCTYPE adressbuch SYSTEM " abook .dtd">
> > 3 <?xml - stylesheet type =" text /xml " href =" abook
> > .xsl"?>
>
> Was bedeutet denn eigentlich diese 3. Zeile da?
Das ist eine PI (Processing Instruction), und zwar eine ganz spezielle, weil sie mit dem PITarget "xml" anfängt. Die sind reserviert für den XML-Standard.
Diese hier ist eine xml-stylesheet PI, die einem XML-Dokument ein Stylesheet zur Darstellung im Browser zuordnet.
> > 4
> > 5 <adressbuch >
> > 6 <adresse >
> > 7 <firma >
> > 8 <firmenname >Uni Bonn </ firmenname >
> > 9 <abteilung >Informatik III </ abteilung >
> > 10 </ firma >
> > 11 <strasse >Römerstraße 164 </ strasse >
> > 12 <plz >53117 </plz>
> > 13 <ort >Bonn </ort>
> > 14 </ adresse >
> > 15
> > 16 <adresse >
> > 17 <person titel =" Herr ">
>
> Und was bedeutet es, dass hier direkt person, titel und
> gleich noch "Herr" zusammen steht? Ich hätte da jetzt eher
> so was erwartet wie:
>
> <person>
> <titel> "Herr" </titel>
> </person>
>
> Ist das dasselbe? Wenn ja, warum schreibt man es hier
> anders?
Du must bei XML unterscheiden zwischen XML selber und der DTD. XML selber gibt - außer der allgemeinen Syntax - keine Regeln vor, wie die Information abgelegt wird.
Zeile 17 ist ein Element mit Namen "person", mit einem Attribut "titel", dessen Wert " Herr " ist.
Deine Angabe ist ein Element "person", mit einem darin enthaltenen Element "titel", in dem als Textdatum ' "Herr" ' steht.
Beides ist - abgesehen von den Syntaxfehlern in diesem Dokument wie dem Leerzeichen zwischen '</' und Elementnamen - gültiges XML. Was es bedeutet, wird durch die XML-Syntax nicht festgelegt.
>
> > 18 <vorname >Manfred </ vorname >
> > 19 <nachname >Mustermann </ nachname >
> > 20 </ person >
> > 21 <strasse >Am Friedhof 11a</ strasse >
> > 22 <plz >12345 </plz>
> > 23 <ort >Irgendwo </ort>
> > 24 </ adresse >
> > 25 </ adressbuch >
> > Wir benötigen eine DTD zu obigem Adressdokument, das
> > ausschnittsweise bereits in der Vorlesung
> > gezeigt wurde.
> > a) Schreibe eine DTD abook.dtd, die möglichst gut zu
> > obigem Dokument passt. Validiere
> > das Dokument gegen diese DTD mit Saxon, wie unten
> > beschrieben. Füge einen Testlauf
> > bei.
>
> Muss ich da jetzt so was schreiben wie:
>
> adressbuch::= adresse
> adresse::=(firma|person) strasse plz ort
> usw.? Oder was genau heißt es, eine DTD zu schreiben?
Im Prinzip ja, außer dass es in der DTD so aussieht:
1: | <!ELEMENT addressbuch (adresse)*>
| 2: | <!ELEMENT addresse ((firma|person),strasse,plz,ort)>
| 3: | <!ELEMENT person (vorname, nachname)>
| 4: | <!ELEMENT strasse (#PCDATA)> |
>
> > b) Erweitere nun die Adressbuch-DTD, so dass auch
> > Postfachadressen und internationale
> > Adressen (z.B. GB, USA) unterstützt werden. Nenne die
> > Datei abook1.dtd.
>
> Postfächer haben nicht eine bestimmte Anzahl an Ziffern,
> oder? Laut Wikipedia
> werden nur die Zahlen in Zweierpaketen von rechts nach
> links geordnet - das müsste man dann wohl hierbei beachten,
> oder?
> Und wo findet man am schnellsten heraus, wie die Adressen
> in GB und USA aussehen? Haben die da auch Plz - wie viele
> Stellen haben die usw.? Und wie ist das gemeint, ich kann
> ja doch nicht alle möglichen Adressen aus der ganzen Welt
> nehmen, wer weiß, wie die im tiefsten Afrika oder in Asien
> aussehen? Was genau soll ich denn hier machen?
Frag dich zuerst einmal: was fehlt, um Postfächer und internationale Adressen anzugeben? Doch auf jeden Fall ein Feld für das Postfach und eines für das Land. Dabei musst du dich fragen: sind das einfach zusätzliche Felder (Land) oder vielleicht alternative Felder (Postfach statt Strasse).
Das Element adresse könnte so aussehen:
<!ELEMENT addresse ((firma|person),(strasse|postfach),plz,ort,land?)>
Das heisst: Eine Adresse hat entweder Strasse oder Postfach, und land ist optional.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 01:38 Di 06.11.2007 | Autor: | Bastiane |
Hallo Rainer!
Oh vielen Dank! Ich hatte schon befürchtet, dass ich viel zu spät mit den Aufgaben anfange und es gar nicht mehr rechtzeitig schaffe. Aber ganz soo schwierig ist es wohl doch nicht, und da du anscheinend immer dann hier bist, wenn ich dich brauche, habe ich noch Hoffnung.
> > > 16 <adresse >
> > > 17 <person titel =" Herr ">
> >
> > Und was bedeutet es, dass hier direkt person, titel und
> > gleich noch "Herr" zusammen steht? Ich hätte da jetzt eher
> > so was erwartet wie:
> >
> > <person>
> > <titel> "Herr" </titel>
> > </person>
> >
> > Ist das dasselbe? Wenn ja, warum schreibt man es hier
> > anders?
>
> Du must bei XML unterscheiden zwischen XML selber und der
> DTD. XML selber gibt - außer der allgemeinen Syntax - keine
> Regeln vor, wie die Information abgelegt wird.
Das mit dem unterscheiden zwischen XML und der DTD fällt mir noch ein wenig schwer - also falls ich da mal was falsches schreibe, kannst du mich bitte kurz darauf hinweisen, dass ich da wieder unterscheiden muss bzw. wo ich mich da jetzt gerade befinde.
> Zeile 17 ist ein Element mit Namen "person", mit einem
> Attribut "titel", dessen Wert " Herr " ist.
Womit du meine Frage bzgl. Element und Attribut auch schon quasi beantwortet hast.
> Deine Angabe ist ein Element "person", mit einem darin
> enthaltenen Element "titel", in dem als Textdatum ' "Herr"
> ' steht.
>
> Beides ist - abgesehen von den Syntaxfehlern in diesem
> Dokument wie dem Leerzeichen zwischen '</' und Elementnamen
> - gültiges XML. Was es bedeutet, wird durch die XML-Syntax
> nicht festgelegt.
Ok. Bei den Leerzeichen bin ich mir im Moment gar nicht mehr sicher, ob die wirklich auf dem ursprünglichen Aufgabenblatt so sind. Denn in diesem Fall sollten wir ja keine Fehler mehr finden, demnach sollten auch eigentlich keine drin sein. Schätzungsweise kommen die Leerzeichen irgendwie darein, wenn man den Text aus dem pdf markiert und hier rüberkopiert... Und dass die Datei da " abook .dtd" heißen soll, fände ich auch sehr komisch. Geht das mit dem Leerzeichen vor dem Punkt überhaupt?
Mittlerweile wurden, auf einen Wunsch hin, die Dateien nochmal anders ins Netz gestellt, damit man sie sich da direkt holen kann ohne die ganzen Zeilennummerierungen vorher wegmachen zu müssen. Allerdings habe ich da jetzt bei dieser Aufgabe hier das Problem, dass ich sie gar nicht öffnen kann, weil er eben auch bei mir die abook.dtd nicht findet. Angenommen, die Leerzeichen stehen da eigentlich gar nicht, ich kann meine Datei also einfach abook.dtd nennen. Wenn ich sie in einem normalen Texteditor speichere, hängt er allerdings noch die Endung ".txt" dran - das ist wahrscheinlich nicht gut, oder? Wie bekomme ich das weg? In welchem Format muss ich das speichern? Oder brauche ich dazu einen speziellen Editor?
> > Muss ich da jetzt so was schreiben wie:
> >
> > adressbuch::= adresse
> > adresse::=(firma|person) strasse plz ort
> > usw.? Oder was genau heißt es, eine DTD zu schreiben?
>
> Im Prinzip ja, außer dass es in der DTD so aussieht:
>
> 1: | <!ELEMENT addressbuch (adresse)*>
| 2: | > <!ELEMENT addresse ((firma|person),strasse,plz,ort)>
| 3: | > <!ELEMENT person (vorname, nachname)>
| 4: | > <!ELEMENT strasse (#PCDATA)> |
Oh - da hätte ich ja glatt alles falsch gemacht... So, wie ich das gemacht hätte, wäre das die XML Spec gewesen, ja? Und da du hier schon bei strasse einfach #PCDATA angibst, nehme ich an, dass das für alle anderen, wo Text und Zahlen vorkommen, auch so ist!? Habe jetzt extra mal geguckt, ob ich was dazu finde, was genau #PCDATA ist, habe dazu aber nur gefunden: parsed character data, also einfachem Text, der nicht weiter gegliedert ist. Zählen dann auch Zahlen dazu? Oder was mache ich bei der PLZ? Oder bei Straße, wo auch die Hausnummer direkt mit drin ist?
> > > b) Erweitere nun die Adressbuch-DTD, so dass auch
> > > Postfachadressen und internationale
> > > Adressen (z.B. GB, USA) unterstützt werden. Nenne
> die
> > > Datei abook1.dtd.
> >
> > Postfächer haben nicht eine bestimmte Anzahl an Ziffern,
> > oder? Laut Wikipedia
> > werden nur die Zahlen in Zweierpaketen von rechts nach
> > links geordnet - das müsste man dann wohl hierbei beachten,
> > oder?
> > Und wo findet man am schnellsten heraus, wie die
> Adressen
> > in GB und USA aussehen? Haben die da auch Plz - wie viele
> > Stellen haben die usw.? Und wie ist das gemeint, ich kann
> > ja doch nicht alle möglichen Adressen aus der ganzen Welt
> > nehmen, wer weiß, wie die im tiefsten Afrika oder in Asien
> > aussehen? Was genau soll ich denn hier machen?
>
> Frag dich zuerst einmal: was fehlt, um Postfächer und
> internationale Adressen anzugeben? Doch auf jeden Fall ein
> Feld für das Postfach und eines für das Land. Dabei musst
> du dich fragen: sind das einfach zusätzliche Felder (Land)
> oder vielleicht alternative Felder (Postfach statt
> Strasse).
>
> Das Element adresse könnte so aussehen:
> 1: | <!ELEMENT addresse
| 2: | > ((firma|person),(strasse|postfach),plz,ort,land?)> |
> Das heisst: Eine Adresse hat entweder Strasse oder
> Postfach, und land ist optional.
Ich glaube, ich hatte das zu kompliziert gemacht. Ich hatte gedacht, dass es z. B. darauf ankommt, wie viele Stellen die PLZ hat oder so. Aber das ist ja anscheinend total wurscht - die Hauptsache, es ist irgendwo ein Feld, wo die PLZ reingehört, ja? Und dann kann ich einfach annehmen, dass in jedem Land eine Adresse durch eine Straße (incl. Hausnummer) - oder halt ein Postfach -, eine Art PLZ und einen Ort, und dem Landesnamen charakterisiert ist. Ok?
Und für c) muss ich dann alle Möglichkeiten von diesen nehmen, also Firma mit Strasse, Firma mit Postfach, Person mit Strasse, Person mit Postfach?
Auf jeden Fall schon mal vielen vielen Dank!
Viele Grüße
Bastiane
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 02:02 Di 06.11.2007 | Autor: | rainerS |
Hallo Bastiane!
> Geht das
> mit dem Leerzeichen vor dem Punkt überhaupt?
Jaja, das geht schon. Es macht nur gelegentlich Probleme, wenn zum Beispiel ein Programm das Leerzeichen als Trenner interpretiert und zwei Dateien namens "abook" und ".dtd" öffnen will.
> Angenommen, die Leerzeichen stehen da eigentlich
> gar nicht, ich kann meine Datei also einfach abook.dtd
> nennen.
Ja.
> Wenn ich sie in einem normalen Texteditor
> speichere, hängt er allerdings noch die Endung ".txt" dran
> - das ist wahrscheinlich nicht gut, oder?
Nein.
> Wie bekomme ich
> das weg?
Einfach im Explorer umbenennen. Oder beim Speichern als Dateityp nicht "Textdateien" sondern "Alle Dateien" oder so ähnlich wählen.
> So, wie ich das gemacht hätte, wäre das die XML Spec
> gewesen, ja? Und da du hier schon bei strasse einfach
> #PCDATA angibst, nehme ich an, dass das für alle anderen,
> wo Text und Zahlen vorkommen, auch so ist!?
Ja, XML kennt nur Text. Die Bedeutung des Textes muss woanders verarbeitet werden. Wenn du mehr Struktur hast, muss du es über Elemente darstellen. Ein nicht sehr sinnvolles Beispiel:
<PLZ>
<PLZ_Gruppe1>12</PLZ_Gruppe1>
<PLZ_Gruppe2>34</PLZ_Gruppe2>
<PLZ_rest>5</PLZ_rest>
</PLZ>
> Und für c) muss ich dann alle Möglichkeiten von diesen
> nehmen, also Firma mit Strasse, Firma mit Postfach, Person
> mit Strasse, Person mit Postfach?
Ja, das kann unter Umständen zu ziemlich komplizierten DTDs führen. Weswegen man manchmal nicht alle Bedingungen in die DTD aufnimmt, sondern sie in der Verarbeitung der XML-Datei prüft. Es ist eventuell einfacher ein Programm zu schreiben, dass überprüft, ob die Adressdaten gültig sind, als die Bedingungen formal vollständig hinzuschreiben.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 14:34 Di 06.11.2007 | Autor: | Bastiane |
Hallo Rainer!
> > Wenn ich sie in einem normalen Texteditor
> > speichere, hängt er allerdings noch die Endung ".txt" dran
> > - das ist wahrscheinlich nicht gut, oder?
>
> Nein.
> > Wie bekomme ich
> > das weg?
>
> Einfach im Explorer umbenennen. Oder beim Speichern als
> Dateityp nicht "Textdateien" sondern "Alle Dateien" oder so
> ähnlich wählen.
Komisch, gestern abend ging's nicht, aber jetzt hat's funktioniert mit "Alle Dateien".
Nun wundere ich mich aber:
[Dateianhang nicht öffentlich]
Erstmal kommt da noch ein Fehler, dass "titel" vor "person" deklariert werden soll. Muss ich da jetzt noch was ändern, oder hätte das in der Aufgabenstellung einfach anders da stehen müssen? Und warum funktioniert es trotzdem?
Naja, aber die viel größere Frage: warum stehen da jetzt zwei verschiedene Sachen? Links ist das, was ich bekomme, wenn ich den angegebenen Befehl eingebe, rechts die Datei, wie wir sie noch bekommen haben, damit wir sie nicht abtippen müssen. Jetzt lässt sie sich endlich öffnen. Allerdings stehen in dem rot eingerahmten bei beiden Dateien unterschiedliche Sachen. Kann das sein?
Und was füge ich jetzt als "Testlauf" bei? Ich kann da ja schlecht einen Screenshot mitposten!?
Viele Grüße
Bastiane
Dateianhänge: Anhang Nr. 1 (Typ: png) [nicht öffentlich]
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 22:22 Di 06.11.2007 | Autor: | rainerS |
Hallo Bastiane!
> Nun wundere ich mich aber:
>
> [Dateianhang nicht öffentlich]
>
> Erstmal kommt da noch ein Fehler, dass "titel" vor "person"
> deklariert werden soll. Muss ich da jetzt noch was ändern,
> oder hätte das in der Aufgabenstellung einfach anders da
> stehen müssen?
Ich vermute, dass du in der DTD das Attribut titel nicht richtig deklariert hast. Mehr ist von hier aus schwierig zu sehen:
> Und warum funktioniert es trotzdem?
Ich kenne mich mit den Optionen von saxon nicht aus; die entsprechende Doku ist arg lang. Vermutlich ist er in dem Modus, in er meckert, aber weitermacht.
> Naja, aber die viel größere Frage: warum stehen da jetzt
> zwei verschiedene Sachen? Links ist das, was ich bekomme,
> wenn ich den angegebenen Befehl eingebe, rechts die Datei,
> wie wir sie noch bekommen haben, damit wir sie nicht
> abtippen müssen. Jetzt lässt sie sich endlich öffnen.
> Allerdings stehen in dem rot eingerahmten bei beiden
> Dateien unterschiedliche Sachen. Kann das sein?
Da fehlt die doctype-Deklaration. Ich tippe mal drauf, dass du mit dem query ja einen Teil des xml-Baumes extrahierst, und die document type declaration nicht mit ausgegeben wird. Ich denke, das lässt sich auch durch Parameter steuern.
> Und was füge ich jetzt als "Testlauf" bei? Ich kann da ja
> schlecht einen Screenshot mitposten!?
Einfach die Ausgabe, die du mit
java .... > ausgabe.txt
in eine Datei umleitest.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 00:26 Di 06.11.2007 | Autor: | rainerS |
Hallo!
Welches DTD-File wurde nicht gefunden? Schau dir mal genau die zweite Zeile an, wie der Name des Files lautet!
Viele Grüße
Rainer
|
|
|
|