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?
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) .
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:
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.
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.
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.
Antworten:
Der grundlegende Unterschied zwischen
include
undimport
besteht darin, dass Sieimport
auf Deklarationen oder Definitionen verweisen müssen , die sich in einem anderen Ziel-Namespace befinden, undinclude
auf 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
quelle
Verwenden Sie xsd: include , um eine XSD aus demselben oder keinem Namespace einzubringen .
Verwenden Sie xsd: import , um eine XSD aus einem anderen Namespace einzubringen .
quelle
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:
Ungültig:
quelle
namespace
Attribut von<xs:import>
) sind immer in Ordnung und werden als Bezeichner (nur Text, nicht interpretiert) betrachtet, während dieschemaLocation
(eine URL, keine URI) normalerweise verarbeitet werden müssen, um aufgelöst zu werden. Und tatsächlich kann das Java-spezifischeclasspath:
URL- Schema nichts bedeuten. Aber neben dieser Auswahl ist dies ein wertvoller Kommentar, danke.Das interessiert mich auch. Die einzige Erklärung, die ich gefunden habe, ist, dass
xsd:include
sie für Intra-Namespace-Einschlüsse verwendet wird, während siexsd:import
für Inter-Namespace-Einschlüsse verwendet wird.quelle
Direktes Zitat aus MSDN: <xsd: import> Element, Abschnitt Bemerkungen
quelle
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.
quelle