Was ist der Unterschied zwischen xsd: include und xsd: import?

200

Was ist der Unterschied zwischen xsd:includeund xsd:import? Wann würden Sie eines anstelle des anderen verwenden und wann könnte es keine Rolle spielen?

Pops
quelle
Siehe auch Antwort unter stackoverflow.com/questions/4998063/…
Nashev

Antworten:

205

Der grundlegende Unterschied zwischen includeund importbesteht darin, dass Sie importauf Deklarationen oder Definitionen verweisen müssen , die sich in einem anderen Ziel-Namespace befinden, und includeauf Deklarationen oder Definitionen verweisen müssen , die sich in demselben Ziel-Namespace befinden (oder befinden werden) .

Quelle: https://web.archive.org/web/20070804031046/http://xsd.stylusstudio.com/2002Jun/post08016.htm

Sergiy Belozorov
quelle
Der Stylusstudio-Beitrag, auf den sich @Pops bezieht, ist hier: web.archive.org/web/20140831005739/http://xsd.stylusstudio.com/…
Tony19
19

Ein weiterer Unterschied besteht darin, dass <import>der Import unter Bezugnahme auf einen anderen Namespace möglich ist. <include>Ermöglicht den Import nur unter Bezugnahme auf einen URI des beabsichtigten Include-Schemas. Das ist definitiv ein weiterer Unterschied zum Import von Intra-Intra-Namespace.

Beispielsweise kennt der XML-Schema-Validator möglicherweise bereits die Speicherorte aller Schemas anhand des Namespace . Insbesondere wenn man bedenkt, dass das Verweisen auf XML-Namespaces durch URI auf verschiedenen Systemen problematisch sein kann, auf denen classpath: // nichts bedeutet oder auf denen http: // nicht zulässig ist oder auf denen ein URI nicht auf dasselbe verweist wie auf ein anderes System.

Codebeispiel für gültige und ungültige Importe und enthält:

Gültig:

<xsd:import namespace="some/name/space"/>
<xsd:import schemaLocation="classpath://mine.xsd"/>

<xsd:include schemaLocation="classpath://mine.xsd"/>

Ungültig:

<xsd:include namespace="some/name/space"/>
Zombies
quelle
Ich denke, Sie meinen , XML-Namespaces eher nach Standort-URLs als nach URI zu referenzieren . Namespace-URIs (dh das namespaceAttribut von <xs:import>) sind immer in Ordnung und werden als Bezeichner (nur Text, nicht interpretiert) betrachtet, während die schemaLocation(eine URL, keine URI) normalerweise verarbeitet werden müssen, um aufgelöst zu werden. Und tatsächlich kann das Java-spezifische classpath:URL- Schema nichts bedeuten. Aber neben dieser Auswahl ist dies ein wertvoller Kommentar, danke.
ddevienne
7

Das interessiert mich auch. Die einzige Erklärung, die ich gefunden habe, ist, dass xsd:includesie für Intra-Namespace-Einschlüsse verwendet wird, während sie xsd:importfür Inter-Namespace-Einschlüsse verwendet wird.

Matt Luongo
quelle
0

Direktes Zitat aus MSDN: <xsd: import> Element, Abschnitt Bemerkungen

Der Unterschied zwischen dem Include- Element und dem Import- Element besteht darin, dass das Import- Element Verweise auf Schemakomponenten aus Schemadokumenten mit unterschiedlichen Ziel-Namespaces zulässt und das Include- Element die Schemakomponenten aus anderen Schemadokumenten hinzufügt, die denselben Ziel-Namespace (oder keinen angegebenen Ziel-Namespace) haben ) zum enthaltenden Schema. Kurz gesagt, mit dem Importelement können Sie Schemakomponenten aus jedem Schema verwenden. Mit dem include- Element können Sie alle Komponenten eines eingeschlossenen Schemas zum enthaltenen Schema hinzufügen.

Mrinmoy Sarkar
quelle
-3

Mit xsd: include werden alle Deklarationen und Definitionen eines externen Schemadokuments in das aktuelle Schema übernommen.

Verwenden Sie xsd: import, um eine XSD aus einem anderen Namespace einzuführen und um ein neues Schema zu erstellen, indem Sie vorhandene Schemadokumente erweitern.

Shailej Shimpi
quelle