Problem Ein Java Programm // File A.java class Document {...} // File B.java class Document {...} In Ihrem Programm wollen Sie je eine Instanz der beiden unterschiedlichen Klassen Document // File MyProgram.java class MyProgram { Document doc1 = new Document(); // Eine Instanz von Document aus File A.java Document doc2 = new Document(); // Eine Instanz von Document aus FileB.java ... } Geht natürlich nicht! Ein XML-Schema <!-- File A.xsd--> <xsd:schema> <xsd:element name="Document" ... ... </xsd:schema> <!-- File B.xsd --> <xsd:schema> <xsd:element name="Document" ... ... </xsd:schema> In Ihrem xml-File wollen Sie beide Elemente Document verwenden <!-- File MyXML.xml --> <root xsi.noNamespaceSchemaLocation= "A.xsd B.xsd"> <!– sinnlos> <Document> ... </Document> <!– Document aus A.xsd> <Document> ... </Document> <!– Document aus B.xsd> ... </root> Geht natürlich nicht! Lösung mit Namespaces Ein Java Programm Damit beide Klassen Document verwendet werden können, versorgen Sie jede in einem Package. Damit geben Sie jedem Document einen Namespace, den Package-Namen. // File A.java package a; class Document {...} // File B.java package b; class Document {...} // File MyProgram.java class MyProgram { a.Document doc1 = new a.Document(); // Eine Instanz von Document aus File A.java b.Document doc2 = new b.Document(); // Eine Instanz von Document aus FileB.java .... } Ein XML-Schema Damit beide Elemente Document verwendet werden können, versorgen Sie jedes in einem Namespace.. <!-- File A.xsd--> <xsd:schema targetNamespace="http://www.a.ch"> <xsd:element name="Document" ... ... </xsd:schema> <!-- File B.xsd --> <xsd:schema targetNamespace="http://www.b.ch"> <xsd:element name="Document" ... ... </xsd:schema> <!-- File MyXML.xml --> <root xmlns:a = "http://www.a.ch" xmlns:b = "http://www.b.ch" xsi.schemaLocation="http://www.a.ch A.xsd http://www.b.ch B.xds"> <a:Document> ... </a:Document> <!– Das Document aus A.xsd> <b:Document> ... </b:Document> <!– Das Document aus B.xsd> ... </root> Zuordnungen Java XML Zuweisung eines Namens zu einem Namespace package a; class Document {...} <schema targetNamespace ="..."> <xsd:element name="Document" ... Qualifizieren eines Namens mit einem Namespace a.Document b.Document <root xmlns:a = "..." xmlns:b="..."> <a.Document> ... </a.Document> <b.Document> ... </b.Document> Default Namespace Im obigen Fall (package a;) automatisch a <schema xmlns ="..."> <!– entspricht meistens dem targetNamespace --> Angabe wo die Definition des Namens zu finden ist • Durch die Konvention, dass ein Package a in einem entsprechenden Unterverzeichnis ../a zu finden ist •Durch Angabe von classpath <root xsi:schemaLocation = "http://www.a.ch A.xsd">