2010-12-30 9 views
-1

Wie erwarte ich, dass ein Element einen Namespace mit XSD haben? An dieser Stelle erhalte ich eine Fehlermeldung: "Ungültiger Inhalt wurde gefunden, beginnend mit Element 'ns: person'. Eine von '{": person}' wird erwartet. "XSD Schema Namespace-Probleme

Wie Sie sehen können, definiere ich das name Attribut auf der xs:element: "Person". Wenn ich "ns: person" als name definiere, bekomme ich einen Fehler, dass der Name ungültig aaarghh ist.

Was fehlt mir hier?

Dies ist die XSD (ns.xsd):

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="peoples"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="person"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

Dies ist die XML (peoples.xml):

<?xml version="1.0" encoding="ISO-8859-1"?> 
<peoples xmlns:ns="url" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ns.xsd"> 
<ns:person> 
     <name>John</name> 
</ns:person> 
</peoples> 
+1

Es gibt eine Reihe von Fehlern hier und ich denke, Sie würden am besten durch einige Tutorial-Beispiele - wie http://zvon.org/xxl/XMLSchemaTutorial/Output/series.html oder http: // www. w3schools.com/schema/default.asp. {Fehler enthalten keine Namespace-Deklarationen in der Instanz, zwei Namespaces sind erforderlich; keine Namespace-Deklaration im Schema, kein Element "name" im Schema) –

+0

Entschuldigung, dass ich diese aus Gründen der Lesbarkeit weggelassen habe ... Natürlich sind diese in meiner Datei vorhanden. Das Durchlaufen eines Validators gibt mir den beschriebenen Fehler. – Ropstah

+0

@Ropstah: Vielleicht könnten Sie die Frage bearbeiten und die fehlenden Elemente wieder hinzufügen, da ihre Auslassung * die Lesbarkeit behindert *. –

Antwort

2

Sie benötigen die vollständige XSD enthalten, Ihnen zu helfen. Aber von dem Fehler, den ich sehe, und der Tatsache, dass Sie "xsi: noNamespaceSchemaLocation" in Ihr XML-Instanzdokument eingefügt haben, sehe ich das Problem darin, dass Sie Ihr Schema mit no targetNamespace angegeben haben, aber Sie qualifizieren person Element mit einem Namespace-Präfix. Entfernen Sie einfach "ns:" an allen Stellen in Ihrem Instanzdokument und Sie sind alle gut.

+0

Ich denke, du hast Recht. Das Problem ist jedoch, dass ich diese ns: instances nicht entfernen kann (noch etwas in der XSD bearbeiten). Gibt es eine Möglichkeit, Wildcard-Elemente oder durch Regex qualifizierte Elemente zu berücksichtigen? – Ropstah

+0

Ich habe Angst vor der Verarbeitung der XML zu entfernen "ns:", bevor Sie es an den XML-Parser geben, ist die einzige Option. Aber sind Sie sicher, dass Sie nur XMLs erhalten, die "ns" als Präfix haben? Alles kann als Präfixname verwendet werden. In diesem Fall müssen Sie auch wissen, welches Präfix vor der Verwendung verwendet wird. –

+0

Ich weiß, dass das Präfix 'ns' verwendet wird. Es gibt auch eine xmlns: ns = "url" -Deklaration in der XML-Datei. Gibt es eine Möglichkeit, den Speicherort der entsprechenden XSD (für URL) in der Datei ns.xsd anzugeben? – Ropstah