Antworten:
Der grundlegende Unterschied zwischen include
und import
besteht darin, dass Sie import
auf Deklarationen oder Definitionen verweisen müssen , die sich in einem anderen Ziel-Namespace befinden, und include
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
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 .
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"/>
namespace
Attribut 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.
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 sie xsd:import
für Inter-Namespace-Einschlüsse verwendet wird.
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.
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.