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


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



Wpis stylusstudio, do którego odnosi się @Pops, znajduje się tutaj: web.archive.org/web/20140831005739/http://xsd.stylusstudio.com/…
tony19


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"/>

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.


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.


-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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.