XML - Verständnis

Neue Frage »

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:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

<?xml version = "1.0" encoding="UTF-8"?>
<Gebrauchtwagen>
	< Marke> "Volkswagen Golf 1.4 Goal, Limousine" price="10.490EUR" </Marke>
	<Zustand> Gebrauchtfahrzeug </Zustand>
	<Daten> 
		<EZ> 11/2006 </EZ>
		<KM-Stand> 44.007 km </KM-Stand>
		<Sprit> Benzin </Sprit>
		<Leistung> 59 kW, 80 PS, 1390 cm³ </Leistung>
		<Getriebe> Schaltung </Getriebe>
		<Verbrauch> 6,9 l / 100 km, 9,4 l / 100 km, 5,5 l / 100 km </Verbrauch>
		<Klimaanlage> Klimatronik </Klimaanlage>
		<Farbe> Schwarz metallic </Farbe>
		<Zubehör> ABS, Einparkhilfe, El. Fensterheber, El. Wegfahrsperre, ESP, Leichtmetallfelgen, Servolenkung, Sitzheizung, Tempomat, 
				  Zentralverriegelung, Front-, Seiten- und weitere Airbags </Zubehör>
</Gebrauchtwagen>

 
Auf diesen Beitrag antworten »
eulerscheZahl

Die Zeile gefällt mir nicht:
code:
1:
<Verbrauch> 6,9 l / 100 km, 9,4 l / 100 km, 5,5 l / 100 km </Verbrauch>

Du trennst hier Einträge mit dem selben Zeichen wie Dezimalzahlen.
Wäre so besser gelöst:
code:
1:
2:
3:
4:
5:
<Verbrauch_l_100km>
    <value>6.9</value>
    <value>9.4</value>
    <value>5.5</value>
</Verbrach_l_100km>

gilt natürlich auch für Leistung/Zubehör
Auf diesen Beitrag antworten »
123michi19

Super, dankeschön. Genau aus solchen Fehlern lernt man :-)

Sagt dir XPATH zufällig auch etwas?
Auf diesen Beitrag antworten »
eulerscheZahl

Nur vom Namen her.
 
Auf diesen Beitrag antworten »
123michi19

Alles klar, danke dir :-)
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:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
<?xml version = "1.0" encoding="UTF-8"?>
<FahrzeugAngebot>
	<Zustand><Gebraucht /></Zustand>
	<Marke>Volkswagen</Marke>
	<Modell>
		<Name>Golf</Name>
		<Version>1.4 Goal</Version>
		<Zusatz>
			<Zusatzelement>Limousine</Zusatzelement>
		</Zusatz>
	</Modell>
	<Preis waehrung="EUR">10.490</Preis>
	<Zustand> Gebrauchtfahrzeug </Zustand>
	<Daten> 
		<EZ>
			<Monat>11</Monat>
			<Jahr>2006</Jahr>
		</EZ>
		<Laufleistung einheit="km">44.007</Laufleistung>
		<Sprit><Benzin/></Sprit> <!-- Hier gibt es eigentlich nur wenige Optionen, Benzin und Diesel. So wird es Maschinenlesbar, da kein Freitext -->
		<Leistung>
			<KW>59</KW>
			<PS>80</PS>
		</Leistung>
		<Hubraum einheit="ccm">1390</Hubraum>
		<Getriebe><Schaltung /></Getriebe>
		<Verbrauch strecke="100" einheit_kraftstoff="l" einheit_strecke="km">
			<value>6.9</value>
			<value>9.4</value>
			<value>5.5</value>
		</Verbrauch>
		<Klimaanlage>Klimatronik</Klimaanlage>
		<Farbe>Schwarz metallic</Farbe>
		<Zusaetze>
			<Zusatz>ABS</Zusatz>
			<Zusatz>Einparkhilfe</Zusatz>
			<Zusatz>El. Fensterheber</Zusatz>
			<Zusatz>El. Wegfahrsperre</Zusatz>
			<Zusatz>ESP</Zusatz>
			<Zusatz>Leichtmetallfelgen</Zusatz>
			<Zusatz>Servolenkung</Zusatz>
			<Zusatz>Sitzheizung</Zusatz>
			<Zusatz>Tempomat</Zusatz>
			<Zusatz>Zentralverriegelung</Zusatz>
			<Zusatz>Front-, Seiten- und weitere Airbags</Zusatz>
		</Zusaetze>
</Fahrzeugangebot>


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
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 ;-)
Auf diesen Beitrag antworten »
as_string

Name ist ein Attribut, es muss also ein "@" irgendwie vorkommen...

Ich würde es mit
code:
1:
/Liste/Zeitschrift/@Name

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
code:
1:
/Liste/Zeitschrift/Ausgabe[@Jahr=2010]

starten.
Bei der d) musst Du z. B. mal nach der Funktion count schauen.

Gruß
Marco
Auf diesen Beitrag antworten »
Karlito

Danke fürs Einspringen as_string Daumen hoch Wink
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 :-)
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
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 großes Grinsen )

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 Daumen hoch
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 Daumen hoch
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
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.
Auf diesen Beitrag antworten »
as_string

Zitat:
Original von Karlito
Für die Entscheidung, ob man ein Attribut nimmt oder ein Element, weiß ich tatsächlich nicht, ob es einen formalen Prozess gibt.


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:
code:
1:
2:
3:
4:
5:
6:
<person>
  <firstname>Vorname</firstname>
  <lastname>Nachname</lastname>
</person>

Eher das hier geschrieben wird:
code:
1:
2:
3:
<person firstname="Vorname" lastname="Nachname" />

Obwohl beides problemlos "funktioniert".

Gruß
Marco
Auf diesen Beitrag antworten »
Karlito

Danke abermals für's einspringen, Marco Wink

Ich denke wir beide werden gerne weitere Fragen beantworten. Enrtschuldige bitte die hohe Latenz.

Gruß,

Karlito
Auf diesen Beitrag antworten »
123michi19

Danke euch beiden Daumen hoch
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
Auf diesen Beitrag antworten »
123michi19

So ihr lieben XML-Profis Wink

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!

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
<?xml version="1.0" encoding="UTF-12"?>
<Festplatte Modellbezeichnung=ST31000528AS>
<Serie>Barracuda 7200.12</Serie>
<BauForm>3,5 Zoll</Bauform>
<Kapazitaet capacity="1000" einheit="GB">
<Schnittstelle typ="Serial ATA/300" Preis="47,95"/>
<Datentransferrate wert="bis zu 125 MB/s (lesen)" waehrung="EUR"/>
<Geschwindigkeit> <Drehzahl>7200 U/min</Drehzah1>
<Zugriffszeit>8.5 ms (lesen), 9.5 ms (schreiben), Cache 32 MB</Zugriffszeit>
</Festplatte>
<Festplatte Modell="WD10EADS">
<Serie> Caviar Green</Serie>
<Kapazität capacity="1000" einheit="GB">
<BauForm>3,5 Zoll</Bauform>
<Schnittstelle typ="Serial ATA/300" Preis="48,95"/>
<Datentransferrate wert="bis zu 125 MB/s (lesen)" waehrung="EUR"/>
<Geschwindigkeit> <Drehzahl>7200 U/min</Drehzah1>
<Zugriffszeit>8.9 ms (lesen), Cache 32 MB</Zugriffszeit></Geschwindigkeit>
<Festplatte>


Mein Vorschlag für die Fehler:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
<?xml version="1.0" encoding="UTF-8"?>
<Festplatte>     			<!--Wurzelelement-->
<Festplattenmodell> ST31000528AS </Festplattenmodell>
<Serie>Barracuda 7200.12</Serie>
<Bauform>3,5 Zoll</Bauform>
<Kapazitaet capacity="1000" einheit="GB">
<Schnittstellentyp> Serial ATA/300 </Schnittstellentyp> 
<Datentransferratenwert> bis zu 125 MB/s (lesen) </Datentransferratenwert> 
<Preis= “47,95" waehrung="EUR">
<Drehzahl>7200 U/min</Drehzahl>
<Zugriffszeit Lesen=“8.5 ms“ Schreiben=“9.5 ms“>
<Cache> 32 MB </Cache>
<Festplattenmodell="WD10EADS">
<Serie> Caviar Green</Serie>
<Kapazität capacity="1000" einheit="GB">
<Bauform>3,5 Zoll</Bauform>
<Schnittstellentyp> Serial ATA/300 </Schnittstellentyp
<Datentransferratenwert> bis zu 125 MB/s (lesen) </Datentransferratenwert>
<Drehzahl>7200 U/min </Drehzahl>
<Zugriffszeit> 8,9ms (lesen) <Zugriffszeit> 
<Cache> 32 MB </Cache>
</Festplatte> 
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 :-)

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
XML - Datei (Buch von Meier Hans mit dem Titel "Ein Sommertraum" als XML - Dokument)

<?xml version="1.0" encoding = "UTF-8"?>
<Buch>
	<Autor Name = "Meier" Vorname = "Hans">
	<Titel> Ein Sommertraum </Titel>
</Buch>



Zugehörige XSD - Datei

<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3org/2001/XMLSchema">   <!-- Namensraum -->
<xs: element name = "Buch">							    <!-- Oberbegriff -->
<xs:complexType name = "Name">						    <!-- Namenszuweisung -->
<xs: sequence>								<!-- öffnender sequence-Tag -->
<xs: element Name = "Meier" type = "xs:string"/>	<!-- Element Name und Typ string -->
<xs:element Vorname = "Hans" type = "xs:string"/> <!-- Element Vorname und Typ string -->
</xs: sequence>							!-- schließender sequence-Tag -->
</xs: complexType name>				<!-- schließender Tag - Namenszuweisung -->
	<xs: complexType name = "titel">			<!-- nächster Namen -->
	<xs: sequence >										
	<xs:element Titel = " Ein Sommertraum " type = "xs:string">	
	</xs:sequence>									
	<xs: complexType>									
 
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
code:
1:
<Festplatte>
sollte wohl
code:
1:
</Festplatte>
dort stehen. Dann sind bei dem Wert des einzigen Attributs von "Festplatte" die doppelten Hochkomma offenbar vergessen worden. Dann heißt das Attribut beim ersten Festplatte-Tag Modellbezeichnung und beim zweiten Modell und so weiter...

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:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<Festplatten>
  <Festplatte...>
  ...
  </Festplatte>
  <Festplatte...>
  ...
  </Festplatte>
</Festplatten>


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
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
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »