Hallo zusammen, mit xml-Files habe ich bisher nur in eher kleinen Umfängen gearbeitet, da es in meinem aktuellen Projekt etwas komplexer wird, möchte ich sie gegen ein Schema validieren. Im Moment nutze ich dazu die webtools-platform von Eclipse. Mein eigentlich schon recht weit gediegenes Schema musste ich nun zwecks Fehlersuche doch noch einmal auf einen sehr abgespeckten Stand herunterbrechen, aber irgendwie sehe ich grad trotzdem keinen Fehler. Jedenfalls führt das Validieren meiner xml: #################################################################### <?xml version="1.0" encoding="UTF-8"?> <Areas xmlns="http://www.meinefirma.de/AreaDescription/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.meinefirma.de/AreaDescription/ AreaDescription.xsd" timestamp="Test" version="0.1"> <Area name="Test"/> </Areas> #################################################################### gegen das Schema AreaDescription.xsd: #################################################################### <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.meinefirma.de/AreaDescription/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.meinefirma.de/AreaDescription/"> <xsd:element name="Areas" type="tns:AreasType"/> <xsd:complexType name="AreasType"> <xsd:sequence> <xsd:element name="Area" type="tns:AreaType" maxOccurs="unbounded" minOccurs="0"></xsd:element> </xsd:sequence> <xsd:attribute name="timestamp" type="string"></xsd:attribute> <xsd:attribute name="version" type="string"></xsd:attribute> </xsd:complexType> <xsd:complexType name="AreaType"> <xsd:attribute name="name" type="xsd:string"></xsd:attribute> </xsd:complexType> </xsd:schema> #################################################################### zu folgender Fehlermeldung: cvc-complex-type.2.4.a: Invalid content was found starting with element 'Area'. One of '{Area}' is expected. Was bitte ist denn hier falsch? Wer kann mir helfen? Grüße, Sören
Mr Xyz schrieb: > Was bitte ist denn hier falsch? Wer kann mir helfen? Mach doch mal Rechtsklick auf das XSD --> Generate dann erzeugt dir Eclipse eine Beispieldatei. Du musst vermutlich deinen Targetnamespace mit prefix definieren und den prefix bei Area angeben.
1 | <?xml version="1.0" encoding="UTF-8"?>
|
2 | <tns:Areas xmlns:tns="http://www.meinefirma.de/AreaDescription/" |
3 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
4 | xsi:schemaLocation="http://www.meinefirma.de/AreaDescription/AreaDescription.xsd"> |
5 | <Area name="Test"/> |
6 | </tns:Areas>
|
Hmm, es war in der Tat ein Problem mit den namespaces. Was ich anpassen musste war aber der vom Wurzelelement: <tns:Areas ... Macht auch Sinn, so steht es ja in der .xsd ;) Aber die auf "Area" verweisende Fehlermeldung hat mich da irgendwie ein wenig blind gemacht... BTW: Ist´s denn so wie oben überhaupt sinnvoll, also dem Wurzelelement den namespace tns zu geben und dem Rest nicht? Und falls nein, was wäre besser: Alle oder keines? [EDIT: Ne, Quatsch: Lediglich der TYP ist als tns:AreasType gepräfixt... Ich dachte, ich hätte dieses namespace-Geschrammel jetzt verstanden... :(]
Der Namespaceprefix in der XSD hat nix mit der im der XML Instanz zu tun. Wenn du das Rootelement qualifizierst werden die Kindelemente automatisch mitqualifiziert, es sei den du forderst es anders in der XSD (elementFormDefault="qualified").
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.