Probleme beim Validieren mit Schema
Andreas
- xml
1 Fabian St.0 Andreas1 Fabian St.0 Andreas
Hallo,
Ich bin absoluter XML-Neuling und versuche mich gerade an XERCES unter Java.
Mit Java lasse ich mir eine XML-Datei generieren, die ich gegen mein XML-Schema gegentschecken will.
Im Schema definiere ich mir u. a. ein Element "Folder":
--------
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/export" xmlns:tns="http://www.example.org/export">
<element name="Folder" type="tns:Folder" ></element>
<element name="Irgendwasanderes" type="tns:Irgendwasanderes" ></element>
...
<complexType name="Folder">
...
</complexType>
...
</schema>
--------
In der XML-Datei verwende ich das Element Folder:
--------
<?xml version="1.0" encoding="UTF-8"?>
<Folder>
...
</Folder>
--------
Wenn ich es nun validiere sagt er mir:
--------
Cannot find the declaration of element 'Folder'.
--------
Hat jemand eine Ahnung was ich da falsch mache?
Grüße
Andreas
Hi!
Ich bin absoluter XML-Neuling und versuche mich gerade an XERCES unter Java.
Mit Java lasse ich mir eine XML-Datei generieren, die ich gegen mein XML-Schema gegentschecken will.
Ich kenne Xerces nicht, da ich hierfür immer xmllint benutze, jedoch ...
[..]
In der XML-Datei verwende ich das Element Folder:
<?xml version="1.0" encoding="UTF-8"?>
<Folder>
...
</Folder>
... musst du in der XML-Datei einen Verweis auf das Schema im Root-Element anbringen:
<?xml version="1.0" encoding="utf-8"?>
<Folder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dein-schema.xsd">
...
</Folder>
Grüße,
Fabian St.
Danke für die schnelle Antwort. Leider hat auch das micht nicht weitergebracht. Ich habe Deinen Code zwar jetzt eingebaut, doch auch hier der Fehler:
--------
INFO AccessLogFilter:29 - host: 127.0.0.1 reqURI: /blabla/meine.xsd
FEHLER: 'cvc-elt.1: Cannot find the declaration of element 'Folder'.'
org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'Folder'.
at com.sun.org.apache.xerces.internal.jaxp.validation.Util.toSAXParseException(Unknown Source)
...
--------
Weißt Du was das sein kann?
Andreas
PS: Ich weiß nicht ob Euch das hilft aber ich habe mehrere Folder-Elemente geschachtelt (<Folder ATTRIBUTE>...<Folder>...</Folder>...</Folder>). Nur das obere habe ich mit den von Fabian vorgeschlagenen Attributen versehen.
Hi!
[...]
PS: Ich weiß nicht ob Euch das hilft aber ich habe mehrere Folder-Elemente geschachtelt (<Folder ATTRIBUTE>...<Folder>...</Folder>...</Folder>). Nur das obere habe ich mit den von Fabian vorgeschlagenen Attributen versehen.
Wie ich bereits in meinem vorherigen Posting schrieb, müssen die angegebenen Attribute im Root-Element [1] der XML-Datei stehen. Leider ist bei dir nicht wirklich ersichtlich, ob dies der Fall ist. Zeige uns daher am besten die komplette XML-Datei mitsamt dem Schema.
Grüße,
Fabian St.
[1] Jedes wohlgeformte XML-Dokument besitzt genau ein solches Root-Element, welches seinerseits keine weiteren Elternelemente aufweist.
Ich habe es jetzt hinbekommen. Mein Fehler lag daran, dass ich dieses "xs:" überall im Schema weggelassen hatte (besser gesagt mein Eclipse) und er vor meine komplexen Elementnamen immer ein "tns:" gesetzt hat. Ich weiß zwar offen gestanden nicht, was da der Unterschied ist, wichtig ist aber, dass es jetzt offenbar klappt.
Fabian, Du hast mir auf jeden Fall mit Deinem Tipp mit dem Elternelement und den Attributen sehr geholfen. Sonst hätte ich heute wohl noch eine Nachtschicht eingelegt. Grüße aus Wien,
Andreas
Hi!
Ich habe es jetzt hinbekommen. Mein Fehler lag daran, dass ich dieses "xs:" überall im Schema weggelassen hatte (besser gesagt mein Eclipse) und er vor meine komplexen Elementnamen immer ein "tns:" gesetzt hat. Ich weiß zwar offen gestanden nicht, was da der Unterschied ist, wichtig ist aber, dass es jetzt offenbar klappt.
Sorry, das hatte ich im Ausgangsposting auch komplett übersehen :-/ Jedes Element im Schema besitzt das Präfix xs:, welches über die Attribut-Deklaration xmlns:xs="http://www.w3.org/2001/XMLSchema" im Root-Element des Schemas mit dem XML-Schema Namensraum assoziiert ist. Grundsätzlich ist auch jedes andere Präfix möglich, aber man hat sich eben darauf geeinigt, xs: bzw xsd: zu verwenden. Letzteres ist soweit ich weiß sogar das Präfix, was vom W3C empfohlen wird.
Der Sinn von Namensräumen besteht darin, mehrere Elemente gleichen Namens haben zu können, die jedoch je nach Kontext unterschiedliche Bedeutung aufweisen.
Fabian, Du hast mir auf jeden Fall mit Deinem Tipp mit dem Elternelement und den Attributen sehr geholfen. Sonst hätte ich heute wohl noch eine Nachtschicht eingelegt. Grüße aus Wien,
Kein Problem, gern geschehen :-)
Grüße,
Fabian St.