[XSD] Namespace

Thomas D

Erfahrenes Mitglied
Hallo!

Ich bin ein wenig verwirrt, wie ich die Namespace-Angaben zu tätigen habe. Der Code schaut wie folgt aus:

XML:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<wurzel xmlns="wurzel"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance Kartenschema.xsd">
...
</wurzel>

XSD:
Code:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="wurzel">
        <xs:complexType>
            <xs:sequence>
                 ...
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Das XSD-Dokument ist soweit mal gültig (mit oXygen überprüft). Beim Parsen des XML-Files bekomme ich die Fehlermeldung "Cannot find the declaration of element 'wurzel'". Was mache ich falsch - wie erziele ich den Zusammenhang zwischen dem Schema-Element 'wurzel' und dem in XML? Und wozu braucht man überhaupt diese Namespaces? Für jeden Hinweis dankbar :) ...

MfG, Thomas D.
 
Hallo,

es gibt ja den Typ string bei Schemas, jetzt stell dir vor du willst auch einen Typ string machen. Dann hättest du ein Problem, weil du 2 Typen hättest, die gleich den gleichen Namen haben. Darum gibt es den Namespace. Da kannst du sagen, dieser Typ gehört zu dem Namensraum und der Typ gehört zu dem Namensraum und schon hast du keine Probleme mehr.

Wenn du bei deinem XML-File auf deine Elemente zugreifen willst, musst du xsi davor schreiben, weil du den Namesraum so benannt hast.
Wenn du das so machst, musst du keinen Namesraum angeben
Code:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://www.w3.org/2001/XMLSchema-instance Kartenschema.xsd"

Ich hoffe ich hab mich soweit klar ausgedrückt und konnte dir helfen.

MFG

zEriX
 
Mache ich das so, wie von dir vorgeschlagen, dann bekomme ich folgende Fehlermeldung:


SystemID: null
Beschreibung: schema_reference.4: Failed to read schema document 'http://www.w3.org/2001/XMLSchema-instance%20Kartenschema.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
URL: http://www.w3.org/TR/xmlschema-1/#schema_reference


Das XML- und das XSD-Dokument befinden sich im selben Verzeichnis und auch das Rootelement ist, wie in meinem ersten Post gesehen, <xs:schema>. Was mache ich falsch :confused:
 
Dann lass man die URL weg.

XML:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="Kartenschema.xsd"
 
Zuletzt bearbeitet von einem Moderator:
Invalid Content

Dankesehr, das hat geholfen ;-)!

Jetzt habe ich allerdings einen neuen Kompilierfehler:


Invalid content was found starting with element 'ha'. One of '{text}' is expected.


Die XML schaut wie folgt aus (fett = hier tritt der Fehler auf):

Code:
<?xml version="1.0" encoding="UTF-8"?>
<wurzel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="Kartenschema.xsd">
    <land id="Österreich" x="3" y="44" gfx="oesterreich">
        <ha>12</ha>
        <hl>12</hl>
...

Die XSD-Datei:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="wurzel">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="land">
                    <xs:complexType>
                        <xs:complexContent>
                            <xs:extension base="landRegionGebiet">
                                <xs:sequence>
                                    <xs:element name="regionen">
...
//und das ganze natürlich auch noch geschlossen

//Definition des Typs 'landRegionGebiet':

    <xs:complexType name="landRegionGebiet" abstract="true">
        <xs:complexContent>
            <xs:extension base="kartenobjekttype">
                <xs:sequence>
                    <xs:element name="ha" type="xs:positiveInteger" />
                    <xs:element name="hl" type="xs:positiveInteger" />
                    <xs:element name="reben" type="rebentype" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="kartenobjekttype" abstract="true">
        <xs:sequence>
            <xs:element name="text" type="xs:string" />
            <xs:element name="images" type="imagestype" />
        </xs:sequence>
        <xs:attribute name="id" type="xs:string" use="required" />
        <xs:attribute name="x" type="xs:nonNegativeInteger" use="required" />
        <xs:attribute name="y" type="xs:nonNegativeInteger" use="required" />
        <xs:attribute name="gfx" type="xs:string" use="optional" />
    </xs:complexType>
</xs:schema>

Ich bekomme diesen Fehler immer beim ersten Tag eines Elements vom Typ 'landRegionGebiete'. Was ist zu tun?

MfG, Thomas D.

BTW: Sorry, dass ich noch einmal nachfragen muss. Kenne mich in XML leider noch nicht wirklich aus und der Fehler sagt mir eigentlich gar nichts ...
 
Also ich würde einfach mal behaupten, dass dein erstes Element "text" sein muss. Ich habe es jetzt nicht ausprobiert.
Ich würde sagen, dass du erst die Elemente von kartenobjekttype, dann von landregiongebiet usw verwenden musst.
 
Thx, logisch ...

Ah, logisch :D ... Ich dachte, als ich "text" gelesen habe, dass er einen Datentyp - also so etwas wie String meint. Vielen Dank auf jeden Fall - obwohl die Frage natürlich nicht sehr schlau von mir war ;) ...

BTW: Gibt es eigentlich eine Möglichkeit, dass die Tags nicht in einer bestimmten Reihenfolge (also sequence) gesetzt werden müssen? Sprich: alle Elemente müssen vorkommen, die Reihenfolge ist jedoch egal. <all> funktioniert ja leider aufgrund der abstrakten Base-Types auch nicht. Wenn nicht, ist das natürlich auch kein großes Problem. Praktisch wär's aber ;) ...
 
Zurück