XML Schema beliebige Anordnung

newXML

Newbie
Registriert
Dez. 2015
Beiträge
3
Morgen,

Ich kenne mich leider ziemlich wenig XML Schemata aus, brauche es allerdings aktuell um über einer Excel Tabelle eine XML zu erzeugen.
Mein Problem ist, dass ich das Schema an die Tabelle anpassen sollte und das Schema ist teilweise schon erstellt worden.
Nun würde ich gerne wissen wie es möglich ist, Attribute vor Elemente zu stellen im Schema
Bsp:

<xs:complexType>
<xs:sequence>
<xs:element name="syntax" type="xs:string"/>
<xs:element name="return_value" type="xs:string"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="version" type="xs:string" use="required"/>
</xs:complexType>


Weshalb kann ich ein Attribut nicht vor die Sequence stellen?
Gibt es dafür eine Lösung?
 
Wieso willst du die Attribute vor die Sequence/Elemente schreiben? Wo die Attribute definiert werden, ist _eigentlich_ egal. Sie gehören eben zum Type. Ob die jetzt oben oder unten stehen, ist prinzipiell egal. Wenn XSD nun nur erlaubt die Attribute unter die Sequence zu schreiben, dann ist es eben so und du kannst die Attribute nur unter der Sequence definieren (ändert aber nichts an der Funktion).

Nehmen wir mal deine Definition:
Code:
<xs:complexType name="test">
<xs:sequence >
<xs:element name="syntax" type="xs:string"/>
<xs:element name="return_value" type="xs:string"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="version" type="xs:string" use="required"/>
</xs:complexType>

Dann sollte folgendes XMl valide dafür sein:
Code:
<test name="testName" version="42">
      <syntax>asdf</syntax>
      <return_value>someValue</return_value>
</test>

Wie man sieht, sind die Attribute im "test"-Element und haben nichts mit den Kindelementen (der Sequence im XSD) zu tun. Warum du die Reihenfolge im Schema also ändern willst, ist da nicht ganz ersichtlich.
 
Zuletzt bearbeitet:
Hallo,

erstmal danke für die schnelle antwort.
Der Grund für die Anordnung ist folgender:

Wenn ich mit dem Schema aus einer Exceltabelle (2010) eine XML - Datei generieren will, dann kann ich nur dieses Schema als ganzes der Tabelle zuordnen.
Die Elemente und Attribute werden mit den Spalten der Tabelle verbunden (jedes Element/Attribut mit einer Spalte).
Ich kann aber nicht ein Element einer einzelnen Spalte zuordnen, sondern nur das ganze Schema der ganzen Tabelle.
Ich müsste also die Tabellenspalten anderst anordnen damit die Zuordnung jeder Spalte zu jedem Element/Attribut passt.
Das ist allerdings nicht wirklich gut, da die Tabelle so von meinem Betreuer (bin Hiwi) vorgegeben ist und er sie nicht geändert haben möchte (warum auch immer).

Verstehe ich das jetzt richtig: Die Reihenfolge in diesem Fall zu ändern (das Attribut vor Elemente zu stellen) gäbe keinen Sinn, da damit das selbe Ergebnis erreicht wird.

Mir fehlt jetzt eben noch eine Alternative zur Änderung der Anordnung von den Tabellenspalten.
Ich denke zur Not ändere ich die Anordnung der Spalten in einer Kopie und generiere dann die XML - Datei.
 
Elemente und Attribute mit einer Spalte verbunden? Könntest du da ein Beispiel liefern? Ich kann das nicht ganz nachvollziehen.

Meinst du mit der Reihenfolge der Attribute vielleicht sowas?:
Anstelle von dem:
Code:
<test name="testName" version="42">
sowas?
Code:
<test version="42" name="testName">

Was anderes kann ich mir unter Atributreihenfolge nicht vorstellen, da definierte Attribute inerhalb eines Types immer innerhalb des öffnenden Elementtags stehen.
Falls das aber gewünscht ist: Das lässt sich nicht per XSD erzwingen, da Attribute ungeordnet sind. Wenn sie als "required" markiert sind, müssen sie nur da sein. Was davor oder danach kommt, ist egal.

Es sollte doch aber auch egal sein, wie das XSD aussieht. Auch sollte es egal sein, wie die XML-Datei aussieht, solange die richtigen Datern drin stehen. XMl wurde schlieslich zum Informationsaustausch zwischen Computern entwickelt und nicht für Menschen, die sich dann an einer anderen Reihenfolge aufhängen. Wenn ein anderer Computer natürlich die gleiche Reihenfolge wie auf dem Ursprungssystem erhalten soll, muss man sich evtl. anders behelfen. Was ist denn dein genaues Ziel? Für was wird die XML-Datei benötigt?
 
Ja hier ein Beispiel:

XML_Erzeugen_XMLinExcelImp_5.png

Das Beispiel ist aus dem Internet.
Links sieht man die Tabelle in Excel (Spalten: Name, PersNr, Einstellungen, Befristungen)
Darunter sind die Einträge (z.b. für Name sind es Müller, Meier, Schulze)
Rechts sieht man den Baum der das Zuordnungsschema darstellen soll.
Stell dir jetzt vor der Knoten Personen hätte 2 Attribute und 2 Elemente.

Ich hatte es so gemacht, dass ich den Wurzelknoten des Schemas auf die erste Spalte gezogen habe. Dadurch wurde jedem Attribut/Element eine Spalte zugeordnet.
Wenn jetzt z.b. der Knoten Name ein Element im Schema ist, dann wird der Knoten "Name" von rechts der Spalte "Name" in der Tabelle zugeordnet.
Wenn jetzt die Tabellenspalten eine andere Reihenfolge haben wie das Zuordnungsschema rechts, also z.b. Name im Zuordnungsschema steht ganz unten, dann wird der Knoten Name plötzlich der Spalte Befristung zugeordnet.
Da kam mir die Idee, die Elemente und Attribute im Zuordnungsschema anderst anzuordnen damit dann auch der Knoten Name der Spalte Name zugeordnet wird.
Das Problem war dann allerdings, dass die Attribute nicht vor den Elementen im Schema angeordnet werden können. Sprich wenn jetzt der Knoten "Name" ein Attribut wäre und ganz unten stehen würde im Beispiel, dann könnte ich den Knoten "Name" nicht der Spalte "Name" zuordnen.

Ich muss allerdings nochmal genau schauen wie dann die XML Datei aussieht. Kann ich aber erst am Montag, da ich gerade nicht die Excelversion hier habe.
 
Zurück
Oben