Forum: PC-Programmierung XML-Problem: Invalid content was found


von Mr X. (Firma: keine) (fargotof)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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>

von Mr X. (Firma: keine) (fargotof)


Lesenswert?

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... 
:(]

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.