Jaka jest różnica między xsd: include i xsd: import?

200

Jaka jest różnica między xsd:includei xsd:import? Kiedy użyjesz jednego zamiast drugiego i kiedy może to nie mieć znaczenia?

Wyskakuje
źródło
Zobacz także odpowiedź na stackoverflow.com/questions/4998063/…
Nashev

Odpowiedzi:

205

Podstawowa różnica między includei importpolega na tym, że należy używać, importaby odnosić się do deklaracji lub definicji, które znajdują się w innej docelowej przestrzeni nazw, i należy używać, includeaby odnosić się do deklaracji lub definicji, które są (lub będą) w tym samym docelowej przestrzeni nazw.

Źródło: https://web.archive.org/web/20070804031046/http://xsd.stylusstudio.com/2002Jun/post08016.htm

Sergiy Belozorov
źródło
Wpis stylusstudio, do którego odnosi się @Pops, znajduje się tutaj: web.archive.org/web/20140831005739/http://xsd.stylusstudio.com/…
tony19
54

Użyj xsd: include, aby wprowadzić XSD z tej samej lub żadnej przestrzeni nazw.

Użyj xsd: import, aby wprowadzić XSD z innej przestrzeni nazw.

kjhughes
źródło
19

Kolejna różnica polega na tym, że <import>umożliwia importowanie poprzez odwołanie się do innej przestrzeni nazw.<include>zezwala tylko na importowanie, odwołując się do identyfikatora URI zamierzonego schematu dołączania. To zdecydowanie kolejna różnica niż importowanie przestrzeni nazw między obiektami.

Na przykład moduł sprawdzania poprawności schematu xml może już znać lokalizacje wszystkich schematów według przestrzeni nazw . Zwłaszcza biorąc pod uwagę, że odwoływanie się do przestrzeni nazw XML przez URI może być problematyczne w różnych systemach, w których ścieżka klasy: // nic nie znaczy lub gdzie http: // jest niedozwolony, lub gdzie niektóre URI nie wskazują na to samo, co na inny system.

Próbka kodu ważnego i nieprawidłowego importu i obejmuje:

Ważny:

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

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

Nieważny:

<xsd:include namespace="some/name/space"/>
Zombie
źródło
Myślę, że masz na myśli odwoływanie się do przestrzeni nazw XML według adresów URL lokalizacji zamiast URI . Identyfikatory URI przestrzeni nazw (tj. namespaceAtrybut <xs:import>) są zawsze OK i są traktowane jako identyfikator (tylko tekst, nie interpretowany), podczas gdy schemaLocation(adres URL nie jest identyfikatorem URI) musi być zazwyczaj przetworzony, aby został rozwiązany. I rzeczywiście, specyficzny dla Java schematclasspath: URL może nic nie znaczyć. Ale oprócz tego zgrabnego wyboru jest to cenny komentarz, dzięki.
ddevienne
7

Też mnie to interesuje. Jedyne wyjaśnienie, które znalazłem, xsd:includejest używane dla inkluzji w przestrzeni nazw, a xsd:importdla inkluzji w przestrzeni nazw.

Matt Luongo
źródło
0

Bezpośredni cytat z MSDN: <xsd: import> Element, sekcja Uwagi

Różnica między elementem include a elementem importu polega na tym, że element importu pozwala na odwołania do komponentów schematu z dokumentów schematu z różnymi docelowymi przestrzeniami nazw, a element include dodaje komponenty schematu z innych dokumentów schematu, które mają tę samą docelową przestrzeń nazw (lub brak określonej docelowej przestrzeni nazw ) do zawierającego schemat. Krótko mówiąc, element importu pozwala używać komponentów schematu z dowolnego schematu; zawierać elementu pozwala dodać wszystkie składniki dołączonego schematu do schematu zawierającego.

Mrinmoy Sarkar
źródło
-3

Użyj xsd: include przenosi wszystkie deklaracje i definicje dokumentu schematu zewnętrznego do bieżącego schematu.

Użyj xsd: import, aby wprowadzić XSD z innej przestrzeni nazw i posłużyć do zbudowania nowego schematu poprzez rozszerzenie istniejących dokumentów schematu.

Shailej Shimpi
źródło