Schema Vergleich mit Java

Werbung
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">
Herunterladen