XML - Verständnis |
20.12.2014, 11:47 | Auf diesen Beitrag antworten » | |||||||||||||||
123michi19 | XML - Verständnis Meine Frage: Hi Leute, jetzt wäre ich soweit mit meinem XML - Problem. Ich habe noch nie selber eine XML - Datei geschrieben und wäre dankbar, wenn ihr einen Blick darauf werfen könntet. Besten Dank. Die Aufgabenstellung: Erstellen Sie ein XML-Dokument mit dem Daten über Gebrauchtwagen ausgetauscht werden können! Verwenden Sie dabei Elemente und Attribute und schachteln Sie zusammengehörige Inhalte so dass sie durch die XML Struktur als zusammengehörig erkenntlich sind. Folgendes Beispiel soll damit abgebildet werden: "Volkswagen Golf 1.4 Goal, 10.490 EUR, Limousine, Gebrauchtfahrzeug, EZ 11/2006, 44.007 km, Benzin, 59 kW, 80 PS, Schaltgetriebe, 1390 cm³, Verbrauch 6,9 l/100km / 9,4 l/100km / 5,5 l/100km, Klimaautomatik, Schwarz metallic, ABS, Einparkhilfe, El. Fensterheber, El. Wegfahrsperre, ESP, Leichtmetallfelgen, Servolenkung, Sitzheizung, Tempomat, Zentralverriegelung , Front-, Seiten- und weitere Airbags" Meine Ideen:
|
|||||||||||||||
|
||||||||||||||||
20.12.2014, 12:32 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Die Zeile gefällt mir nicht:
Du trennst hier Einträge mit dem selben Zeichen wie Dezimalzahlen. Wäre so besser gelöst:
gilt natürlich auch für Leistung/Zubehör |
|||||||||||||||
20.12.2014, 12:54 | Auf diesen Beitrag antworten » | |||||||||||||||
123michi19 | Super, dankeschön. Genau aus solchen Fehlern lernt man :-) Sagt dir XPATH zufällig auch etwas? |
|||||||||||||||
20.12.2014, 13:48 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Nur vom Namen her. |
|||||||||||||||
Anzeige | ||||||||||||||||
|
||||||||||||||||
20.12.2014, 13:51 | Auf diesen Beitrag antworten » | |||||||||||||||
123michi19 | Alles klar, danke dir :-) |
|||||||||||||||
20.12.2014, 16:40 | Auf diesen Beitrag antworten » | |||||||||||||||
Karlito | Hallöchen, damit es besser auswertbar ist (z.b. per XPath-Abfrage) würde ich dazu raten, die Informationen wesentlich mehr aufzugliedern. Ähnlich wie bei der 1. Normalform von Datenbanken, würde ich auf Atomarität achten. D.h. keine "Felder" enthalten mehrere Verschiedene Daten. Die erste Auflösung hat ja euler schon gebracht. Ich bearbeite das Beispiel mal weiter:
Ich bin kein XML-Profi. Wahrscheinlich gibt es noch gegen das eine oder andere Einwände. Aber so halte ich es für relativ gut Maschinenlesbar. Noch eine Anmerkung zur Maschinenlesbarkeit: Alle Tags kann man in einem XML-Dokument und verschiedene Bedingungen dazu kann man in einem XML-Schema festlegen. Somit kann z.B. gezielt nach Benzin oder Diesel als Kraftstoff gesucht werden. Lässt man es als Text zwischen den Tags, so kann nicht per XML-Schema geprüft werden, ob es ein gültiger Kraftstoff ist. Ich hoffe das ist halbwegs eingänglich. Zu XPath kann ich sicher auch noch etwas beitragen. Habe es schonmal verwendet. Gruß, Karlito |
|||||||||||||||
22.12.2014, 01:21 | Auf diesen Beitrag antworten » | |||||||||||||||
123michi19 | Vielen Dank Karlito für deine Hinweise. Hier noch zu XPath: 15. Formulieren Sie XPath Statements, um in unten stehender XML Datei folgende Knoten auszuwählen: a. Die Namen aller Zeitschriften b. Alle Ausgaben aller Zeitschriften des Jahres 2010 c. Die Titel der Artikel von Susi Sonne d. Die Nummern der Ausgaben mit Artikeln die länger als 3 Seiten sind <Liste> <Zeitschrift Name="iX"> <Ausgabe Nr="10" Jahr="2010"> <Artikel Startseite="15" AnzSeiten="3"> <!-- weiter auf der Rückseite, bitte wenden --><Autor>Hans Dampf</Autor> <Autor>Toni Träumer</Autor> <Titel>XML leicht gemacht</Titel> </Artikel> <Artikel Startseite="20" AnzSeiten="5"> <Autor>Monika Müller</Autor> <Titel>Mit XPath zum Erfolg</Titel> </Artikel> </Ausgabe> <Ausgabe Nr="11" Jahr="2009"> <Artikel Startseite="20" AnzSeiten="1" <Autor>Susi Sonne</Autor> <Titel>Elemente und Attribute in XSD</Titel> </Artikel> </Ausgabe> </Zeitschrift> <Zeitschrift Name="Informatik Spektrum"> <Ausgabe Nr="10" Jahr="2010"> <Artikel Startseite="15" AnzSeiten="4"> <Autor>Lothar Leicht</Autor> <Autor>Susi Sonne</Autor> <Titel>Einführung in XSLT</Titel> </Artikel> </Ausgabe> </Zeitschrift> </Liste> Ich habe mich auch schon in das Thema eingelesen, für den Aufgabenteil von a hätte ich die folgende Lösung: /Liste/Zeitschrift Name Vielen Dank für deine Hilfe ;-) |
|||||||||||||||
22.12.2014, 22:15 | Auf diesen Beitrag antworten » | |||||||||||||||
as_string | Name ist ein Attribut, es muss also ein "@" irgendwie vorkommen... Ich würde es mit
probieren. Du musst das ausprobieren, sonst weißt Du ja nie, ob es funktioniert oder nicht. Im Netz gibt es online-XPath Processoren, such mal nach so was mit Google. Bei der b) würde ich mit
starten. Bei der d) musst Du z. B. mal nach der Funktion count schauen. Gruß Marco |
|||||||||||||||
23.12.2014, 11:39 | Auf diesen Beitrag antworten » | |||||||||||||||
Karlito | Danke fürs Einspringen as_string |
|||||||||||||||
29.12.2014, 13:28 | Auf diesen Beitrag antworten » | |||||||||||||||
123michi19 | Vielen Dank für Eure Antworten. Leider blicke ich bei XML garnicht durch. Das Problem ist, dass es da so viele verschiedene Sachen gibt. Einmal lese ich dann wieder XSD (ist dies das XML-Datenschema) und dann kommt wieder XPath (müsste dann zur Auswahl bestimmter Bereiche in XML - Dateien sein). Dann finde ich mal wieder DTD (ich weiß nicht so recht, was ich damit anfangen soll). Genauso wann ich ein Attribut und wann ein Element verwenden soll? Ist das reine Gefühlssache? Vielen Dank für Eure Unterstützung :-) |
|||||||||||||||
29.12.2014, 14:37 | Auf diesen Beitrag antworten » | |||||||||||||||
Karlito | Hallo 123michi19, ja, das ist am Anfang etwas verwirrend. XSD und DTD haben den selben Zweck. Sie beschreiben das XML-Schema. Das XML-Schema drückt aus, wie eine XML-Datei "wohlgeformt" ist. D.h. welche Elemente es gibt und wie sie ineinander geschachtelt werden können. Weiterhin gibt es an, welche Attribute zulässig sind. XSD ist dabei die modernere Variante und welche mächtiger und selbst in XML verfasst ist. Ich finde es wichtig zu wissen, dass es DTD gibt, da es auch teilweise noch verwendet wird. Benutzen würde ich aber nur noch XSD. XPath ist eine Abfragesprache. Diese ist prinzipiell erst einmal nur dazu da, Elemente aus dem XML zu extrahieren. Ähnlich wie bei SQL geht es also nur darum. Daten aus dem XML abzufragen. Für die Entscheidung, ob man ein Attribut nimmt oder ein Element, weiß ich tatsächlich nicht, ob es einen formalen Prozess gibt. Ich würde meine Herangehensweise so beschreiben: Ich sehe ein XML-Element als Container an. Der Inhalt des Containers sind weitere Elemente. Die Eigenschaften des Containers oder Eigenschaften, welche sich die Kinder des Containers auswirken sind Attribute. Das ist aber schwammig... Wenn mir noch mal etwas Besseres einfällt, schreibe ich das hier. Gruß, Karlito |
|||||||||||||||
29.12.2014, 17:29 | Auf diesen Beitrag antworten » | |||||||||||||||
123michi19 | Vielen Dank an dich als XML-Experten und sorry, dass zu diesem Thema so viele Fragen kommen (da finde ich HTML viel besser ) Ich würde es gerne einmal zusammenfassen, so wie ich das Thema verstehe: XML ist eine Art Oberbegriff. Eine XML - Datei kann mit frei wählbaren Tags geschrieben werden und enthält Attribute und Elemente. Dann gibt es XSD (Sie beschreiben das XML - Schema). Dazu gehört auch die Document Type Definition (DTD). Die DTD wiederum gibt an, ob ein Dokument wohlgeformt ist (wohlgeformt heißt, dass gewisse Standards eingehalten werden müssen). Zur DTD gehören auch noch PCDATA und CDATA? CDATA ist wie in der Java - Programmierung der Kommentar, welcher einfach (im Fall von XML) vom Parser überlesen wird. PCDATA ist mir nicht wirklich klar, was das bewirken soll. Dann gibt es sogenannte XML-Schema-Elemente? xs: element xs: attribute xs: complexType xs: simpleType xs: sequence xs: choice xs:all Und auch die Begriffe minOccur und maxOccur tauchen häufiger auf? Mit diesen Elementen kann ich leider überhaupt nichts anfangen und weiß auch nicht recht, wie ich sie einbauen muss. Und zu guter Letzt gibt es noch XPath, welches für die Abfrage der einzelnen Dateien zuständig ist. Dort gibt es die Selektoren: / Pfad ist absolut und startet am Wurzelknoten ./ Pfad ist relativ und startet beim aktuellen Kontext ../ Pfad ist relativ und startet beim Elternelement // Suchpfad, der das ganze Dokument durchsucht /element selektiert das angegebene Element /element/@attribut selektiert das Attribut des Elements /element/text() selektiert den Textinhalt des Elements /element[Bedingung] selektiert die angegebenen Elemente, wenn sie die Bedingung erfüllen or und and als boolsche Operatoren | als Vereinigungsmenge zwischen zwei Ergebnissen Ich weiß, es sind leider Fragen über Fragen, aber du kennst dich klasse mit dem Thema aus und ich möchte ungern erst zwei Tage vor der Klausur mit XML anfangen |
|||||||||||||||
31.12.2014, 14:08 | Auf diesen Beitrag antworten » | |||||||||||||||
123michi19 | Hi Karlito, könntest du mir vielleicht mit dem Thema weiterhelfen? Wenn es dir zu viel Arbeit ist, dann gib mir bitte kurz Bescheid, sodass ich mir anderweitig Unterstützung suchen kann. Besten Dank |
|||||||||||||||
31.12.2014, 15:42 | Auf diesen Beitrag antworten » | |||||||||||||||
as_string | Wie Dir schon gesagt wurde: DTD ist die alte Art, ein XML-Schema zu definieren, XSD die neuere, die einen großen Nachteil von DTD behebt: DTD ist selbst kein XML, XSD aber schon. DTD ist also nicht "Teil" der XSD sondern wird dadurch ersetzt. Leider kenne ich mich mit XSD und auch DTD nicht genau genug aus: Aber was ein XML-Element und ein XML-Attribut ist, weißt Du ja schon und xs:element und xs:attribute beschreiben diese jeweils. Die minOccurs und maxOccurs geben an, wie häufig ein Element in einem anderen vorkommen kann: Darf es nur einmal vorkommen, muss es genau einmal vorkommen, muss es mindestens einmal vorkommen, sollen es genau 3 sein, etc... Ich meine, das meiste ist doch auch hier ganz gut beschrieben: http://www.w3schools.com/schema/. Was willst Du jetzt noch genau von uns wissen? Wir können doch sicher hier nicht besser beschreiben, als das in diesen Seiten schon getan ist. Was wir machen können ist, auf konkrete und spezielle Fragen zu antworten. Bei Dir sehe ich aber entweder keine echten Fragen oder sehr allgemeine, die auch allgemein schon tausende Male im Internet beantwortet sind. Sollen wir für Dich Googlen oder was sollen wir tun? Gruß Marco |
|||||||||||||||
31.12.2014, 15:46 | Auf diesen Beitrag antworten » | |||||||||||||||
123michi19 | Besten Dank. Das mit minOccurs und maxOccurs habe ich nicht so recht rausfinden können. Übungen habe ich schon vor mir liegen, diese werde ich jetzt lösen und falls damit Probleme auftreten gezielt bei Euch nachfragen. |
|||||||||||||||
31.12.2014, 15:57 | Auf diesen Beitrag antworten » | |||||||||||||||
as_string |
Hallo Karlito! Ja, das ist mir auch noch nie so ganz klar geworden. Vielleicht erstmal eine Einschränkung: Man kann natürlich technisch nur solche Elemente auch als Attribute darstellen, die nur immer einmalig vorkommen können und deren Reihenfolge auch egal ist (so weit ich weiß muss die Reihenfolge von Attributen beliebig sein, die von Elementen kann (muss aber nicht) relevant sein. Ich kann mich da aber auch irren...). Dann ist es so eine Sache: Es sollen ja letztlich Datenstrukturen abgebildet werden und es sollte u. U. Entsprechungen zu Datenstrukturen in Programmen existieren. Z. B. wenn man Objekte in XML serialisieren will, dann haben diese ja Attribute (also Member-Variablen) und die können wiederum Collections sein und so. Wenn man erreichen will, dass die Abbildung sowohl von Object in der jeweiligen Programmiersprache nach XML als auch umgekehrt eindeutig ist, einigt man sich auf passende Transformationen. Ich bin mal über so etwas gestolpert, als ich mir SOAP angeschaut habe: Hier werden ja Methoden auf entfernten Systemen aufgerufen, indem dort hin XML übertragen wird und die Antwort auch in XML formuliert ist. Im SOAP-Standard ist deshalb auch definiert, wie die Transformation eines Objekts im Speicher auf die XML-Repräsentation passieren muss und in diesem Rahmen ist dann auch festgelegt, was Attribut und was Element im XML wird. Ansonsten ist es mE häufig eine Frage, wie das XML weiter verarbeitet werden soll. Häufig ist es programmatisch einfacher, die Attribute eines Elementes abzufragen, also noch zusätzlich über seine Kinder zu iterieren. Deshalb kenne ich es i. A. so, dass alles, was nur einmal für ein Element vorkommen kann (oder muss) und das wirklich ein einfaches Namen-Wert-Paar ist (also keine weiteren Unterlemente mehr vorhanden sein können) dann meistens als Attribut gemacht wird. Also statt so was:
Eher das hier geschrieben wird:
Obwohl beides problemlos "funktioniert". Gruß Marco |
|||||||||||||||
31.12.2014, 16:01 | Auf diesen Beitrag antworten » | |||||||||||||||
Karlito | Danke abermals für's einspringen, Marco Ich denke wir beide werden gerne weitere Fragen beantworten. Enrtschuldige bitte die hohe Latenz. Gruß, Karlito |
|||||||||||||||
31.12.2014, 16:05 | Auf diesen Beitrag antworten » | |||||||||||||||
123michi19 | Danke euch beiden |
|||||||||||||||
31.12.2014, 16:14 | Auf diesen Beitrag antworten » | |||||||||||||||
Karlito | @ CDATA und PCDATA: Ich denke der unterschied ist einfach, dass die eine Variante nicht geparst werden soll und die andere schon. Wie das genau geschieht, ist nicht festgelegt. Ist aber nur eine Vermutung. @Attribute oder Nicht Attribute: Ich stimme as_string zu. Es liegt wahrscheinlich einfach im Ermessen des Programmierers. Ich kann mir jedoch gut vorstellen, dass es dafür einen formalen Prozess gibt, den wir nicht kennen. Gruß, Karlito |
|||||||||||||||
31.12.2014, 19:24 | Auf diesen Beitrag antworten » | |||||||||||||||
123michi19 | So ihr lieben XML-Profis Jetzt habe ich mich einmal an einem Beispiel versucht und wäre Euch für die Überprüfung dankbar. Finden Sie Fehler und Ungereimtheiten in folgender XML – Datei!
Mein Vorschlag für die Fehler:
|
|||||||||||||||
31.12.2014, 20:58 | Auf diesen Beitrag antworten » | |||||||||||||||
123michi19 | XSD möchte ich auch gleich noch hinterher"schießen --> passt zu Silvester :-)" Mir ist klar, dass hier bestimmt einige Fehler vorhanden sind. Aber ohne Übung kann das ja nie klappen. Daher danke ich Euch für Eure Hilfe :-)
|
|||||||||||||||
01.01.2015, 22:32 | Auf diesen Beitrag antworten » | |||||||||||||||
as_string | Hallo 123michi19! Ich verstehe nicht, was Du mit "meinen Vorschlag für die Fehler" genau meinst. Du solltest doch einfach zuerst Fehler in der gegebenen Datei finden und nicht gleich alles anders schreiben. Z. B. fehlt am Ende der Datei bei dem schließenden "Festplatte"-Tag offenbar ein "/", also statt
Bei Deiner Datei würde ich auch einiges auszusetzen haben. Wenn Du mehrere Festplatten hast und ein einziges Wurzelelement haben möchtest (was durchaus sinnvoll ist), dann macht man normalerweise ein Tag mit dem Plural außenrum, also etwa:
Dann hast Du bei Deinem "Preis"-Tag einen Fehler. Ein Tag muss immer zuerst den Tag-Namen haben (der dann kein Gleichheitszeichen und einen Wert zugewiesen haben darf, also <Preis=..."> ist auf jeden Fall falsch) und dann erst die Namen-Wert-Paare von den einzelnen Attributen. Generell bin ich skeptisch mit den Einheiten. Mal schreibst Du Attribute mit einem Wert und noch eines mit einer Einheit, mal einen String "7200 U/min" der ja auch aus einer Zahl und einer Einheit besteht, aber jetzt nicht mehr semantisch interpretiert werden kann (ein Computer würde nicht so einfach verstehen, dass es Einheiten sind und könnte nicht automatisch umrechnen, z. B.). Generell ist es meistens vernünftig, die Einheit als Attribut des Tags zu nehmen und den Wert dann eben als Tag-Wert. Ob es da aber "verbindliche" Regeln gibt, weiß ich genau so wenig wie mit der Frage, was macht man als Unter-Element und was als Attribut. Bei Zugriffszeit fehlt der schließende Tag (oder eben das "/" am Ende des Tags als Abkürzung). Was aber irgendwie ganz falsch bei Deinem Vorschlag ist: Es geht hier um zwei verschiedene Festplatten! Eine Barracuda vom Hersteller Seagate und einer vom Hersteller Western Digital. Du hast jetzt bei Dir im Tag "Festplatte" die ganzen Angaben doppelt. Da weiß man doch gar nicht mehr, zu welcher der beiden Festplatten ein einzelner Wert jetzt gehört! Du musst schon für jede der beiden Festplatten einen Tag haben mit den Eigenschaften dann als Attribute und Unterelemente. Das ist ja sogar in der ursprünglichen Datei besser: Da gibt es zwei Festplatten-Tags, der erste wird geschlossen, bevor der zweite aufgemacht wird und alle Angaben, die zur ersten Festplatte gehören sind auch in dem Tag für die erste Festplatte drin. Schau Dir das noch einmal genauer an! Gruß Marco |
|||||||||||||||
22.01.2015, 09:14 | Auf diesen Beitrag antworten » | |||||||||||||||
Erstsemester | Hallo, habe diese Aufgabe mit XPath auch versucht und stelle fest, dass ich bei der Teilaufgabe c scheitere (a und b kein Problem) Die Titel der Artikel von Susi Sonne Habe jetzt folgendes versucht: /Liste/Zeitschrift/Ausgabe/Artikel/Autor Dann werden mir alle Autoren angezeigt. Jetzt müsste ich ja noch auf Susi Sonne eingrenzen und ihre Titel ausgeben. Habe dann folgendes versucht um zumindest einmal die Titel aller Autoren zu bekommen, funktioniert aber laut Online XPath - Test nicht: /Liste/Zeitschrift/Ausgabe/Artikel/Autor/Titel Wo liegt denn mein Fehler? Vielen Dank |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|