XML Aufbau, Musikliste

js-mueller

Erfahrenes Mitglied
Hi,

ich möchte diesen Thread einmal dazu nutzen eine xml datei für eine Alben/Musik Liste zu erstellen. Ich habe zuerst einmal erstellt wie die xml datei zum schluss aussehen soll und danach wollte ich das noch in einer dtd implementieren, ich wollte erstmal wissen was ihr zu der xml datei ansich sagt, ob dies logisch aufgebaut ist oder ob ihr etwas anders machen würdet. Ich möchte lernen xml perfekt einzusetzen.

Code:
<rMV>
    <album name="" genre="">
        <interpret></interpret>
        <erDatum></erDatum>
        <titelListe>
            <titel name="">
                <laenge></laenge>
                <genre></genre>
                <kommentar></kommentar>
            </titel>
        </titelListe>
        <kommentar></kommentar>
    </album>
</rMV>

<titel> soll in <titelListe> natürlich unendlich oft vorkommen können ;-) <erDatum> soll Erscheinungsdatum sein. Ich hoffe ihr könnt mir kritik dazu geben.
 
Zuletzt bearbeitet:
Wenn Dir die Reihenfolge der Titel auf dem Album wichtig ist, kannst Du noch den Index des Titels unter <titel> hinzufügen, z.b. <index></index> o.ä. Dann kannst Du die Titel danach mit XSL sortiert ausgeben.
Die Attribute name und genie von <album> könnte man auch als Elemente schreiben, ebenso das Attribut name von <titel>. Dann ist es etwas einheitlicher, auch wenn Du es später mit XSL transformieren möchtest. Ist natürlich Geschmacksache. Als sinnvolles Attribut kann man vielleicht noch eine Id setzen, also <album id="">...</album> um jedes Album eindeutig zu identifizieren. Könnte ja sein, daß es von dem gleichen Album noch irgendeine Spezial-Version gibt (Sammler). Könnte man aber auch nachträglich mit XSL machen, muß also nicht unbedingt sein.
Auch würde ich statt einer DTD ein XML-Schema schreiben, dort hast Du viel mehr Formatierungs-Möglichkeiten.
 
k danke ich werd das mal durcharbeiten und dann hier mal das ergebnis schreiben :-D
Mein Buch ist kein reines xml buch und es ist auch ein bissle älter, da aus der bücherei :)
 
So ich hab das jetzt mal fertig gemacht, bin mir aber ziemlich unsicher ob die xsd richtig ist ;-) Die sieht so verschachtelt aufgeschwommen aus.

rMV.xml:
Code:
<?xml version="1.0"?>

<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com rMV.xsd">

<rMV>
    <album id="" name="" genre="">
        <interpret></interpret>
        <erDatum></erDatum>
        <kommentar></kommentar>
        <titelListe>
            <titel id="" name="">
                <laenge></laenge>
                <genre></genre>
                <kommentar></kommentar>
            </titel>
        </titelListe>
    </album>
</rMV>

rMV.xsd:
Code:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">

<xs:element name="rMV">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="album" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:attribute name="id" type="xs:integer"/>
                        <xs:attribute name="name" type="xs:string"/>
                        <xs:attribute name="genre" type="xs:string"/>

                        <xs:element name="interpret" type="xs:string" />
                        <xs:element name="erDatum" type="xs:date" />
                        <xs:element name="kommentar" type="xs:string" />
                        
                        <xs:element name="titelListe">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="titel" maxOxxurs="unbounded">
                                        <xs:complexType>
                                            <xs:sequence>
                                                <xs:attribute name="id" type="xs:integer"/>
                                                <xs:attribute name="name" type="xs:string"/>
                                                
                                                <xs:element name="laenge" type="xs:string" />
                                                <xs:element name="genre" type="xs:string" />
                                                <xs:element name="kommentar" type="xs:string />
                                            </xs:sequence>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

</xs:schema>
 
Hallo!

Mit XMLSchema kannst du den Aufbau deines XML Dokuments noch genauer Beschreiben als es mit DTD's möglich wäre.

Das XMLSchema dazu könnte Beispielsweise so aussehen:

Musik.xsd
Code:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="interpret" type="xs:string"/>
	<xs:element name="erscheinungsdatum" type="xs:date"/>
	<xs:element name="kommentar" type="xs:string"/>
	
	<xs:element name="laenge" type="xs:positiveInteger"/>

	<xs:element name="titel">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="laenge" minOccurs="1" maxOccurs="1"/>
                                <xs:element name="genre" minOccurs="1" maxOccurs="1"/>
				<xs:element name="kommentar" minOccurs="1" maxOccurs="1"/>
			</xs:sequence>
		<xs:attribute name="name" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="titelliste">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="titel" minOccurs="1" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
	
	<xs:element name="album">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="interpret" minOccurs="1" maxOccurs="1"/>
				<xs:element ref="erscheinungsdatum" minOccurs="1" maxOccurs="1"/>
				<xs:element ref="titelliste" minOccurs="1" maxOccurs="1"/>
				<xs:element ref="kommentar" minOccurs="1" maxOccurs="1"/>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string"/>
			<xs:attribute name="genre" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="rmv">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="album" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

hier eine dazu passende XMLDatei musik.xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<rmv xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="musik.xsd">
	<album name="album0" genre="Alternative">
		<interpret>Interpret0</interpret>
		<erscheinungsdatum>2003-12-30</erscheinungsdatum>
		<titelliste>
			<titel name="titel0_0">
				<laenge>5222</laenge>
                                <genre>Alternative</genre>
				<kommentar>Kommentar0</kommentar>
			</titel>
			<titel name="titel0_1">
				<laenge>522344232</laenge>
				<genre>Alternative</genre>
				<kommentar>Kommentar1</kommentar>
			</titel>
			<titel name="titel0_2">
				<laenge>522422</laenge>
				<genre>Alternative</genre>
				<kommentar>Kommentar2</kommentar>
			</titel>
			<titel name="titel0_3">
				<laenge>52887522</laenge>
				<genre>Alternative</genre>
				<kommentar>Kommentar3</kommentar>
			</titel>
			<titel name="titel0_4">
				<laenge>22545</laenge>
				<genre>Alternative</genre>
				<kommentar>Kommentar4</kommentar>
			</titel>
		</titelliste>
                <kommentar>kommentar0</kommentar>
	</album>
        
        <album name="album2" genre="Alternative">
		<interpret>Interpret2</interpret>
		<erscheinungsdatum>2002-10-21</erscheinungsdatum>
		<titelliste>
			<titel name="titel1_0">
				<laenge>5222</laenge>
                                <genre>Alternative</genre>
				<kommentar>Kommentar0</kommentar>
			</titel>
			<titel name="titel1_1">
				<laenge>522344232</laenge>
				<genre>Alternative</genre>
				<kommentar>Kommentar1</kommentar>
			</titel>
			<titel name="titel1_2">
				<laenge>522422</laenge>
				<genre>Alternative</genre>
				<kommentar>Kommentar2</kommentar>
			</titel>
			<titel name="titel0_3">
				<laenge>52887522</laenge>
				<genre>Alternative</genre>
				<kommentar>Kommentar3</kommentar>
			</titel>
			<titel name="titel1_4">
				<laenge>22545</laenge>
				<genre>Alternative</genre>
				<kommentar>Kommentar4</kommentar>
			</titel>
		</titelliste>
                <kommentar>kommentar1</kommentar>
	</album>
</rmv>

Gruß Tom
 
ich versteh jetzt gerade garnicht wieso meine xsd komplett anders aus sieht als deine. Ich hab das nach dem tutorial gemacht. Meine kommt mir zwar auch nen bissle komishc vor sind auch bestimmt nen paar kleine fehler drin die ich jetzt nicht sehe, aber vom prinzip.
 
Hallo!

Du hast viele (alle) deine Elemente da definiert wo sie auftauchen (In-Place). Ich habe hingegen nur wenige Elemente in-place defniert und greife mehr über Referenzen auf vorab defnierte Elemente zu.

Gruß Tom
 

Neue Beiträge

Zurück