Яка різниця між xsd: include і xsd: import?


Відповіді:


205

Принципова відмінність між includeі importполягає в тому, що ви повинні використовувати importдля позначення декларацій або визначень, які знаходяться в іншому цільовому просторі імен, і ви повинні використовувати includeдля позначення декларацій або визначень, які знаходяться (або будуть) в одному і тому ж цільовому просторі імен.

Джерело: https://web.archive.org/web/20070804031046/http://xsd.stylusstudio.com/2002Jun/post08016.htm


Я також вважаю корисними ці пояснення: xsd.stylusstudio.com/2005Mar/post05007.htm msdn.microsoft.com/en-us/library/ms256480.aspx
Pops

Публікація stylusstudio, на яку посилається @Pops, знаходиться тут: web.archive.org/web/20140831005739/http://xsd.stylusstudio.com/…
tony19

54

Використовуйте xsd: include для введення XSD з того самого простору імен або без нього.

Використовуйте xsd: import для залучення XSD з іншого простору імен.


19

Ще одна відмінність полягає в тому, що <import>дозволяє імпортувати, посилаючись на іншу область імен. <include>дозволяє лише імпортувати, посилаючись на URI призначеної схеми включення. Це, безумовно, інша відмінність, ніж імпорт міжміського простору імен.

Наприклад, валідатор схеми xml може вже знати місця всіх схем за простором імен . Особливо враховуючи, що посилання на простори імен XML за допомогою URI може бути проблематичним у різних системах, де classpath: // нічого не означає, або http: // заборонено, або де деякі URI не вказують на те саме, що і на інша система.

Зразок коду дійсного та недійсного імпорту та включає:

Дійсний:

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

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

Недійсний:

<xsd:include namespace="some/name/space"/>

Я думаю, ви маєте на увазі посилання на простори імен XML за URL-адресами локації, а не за URI . URI простору імен (тобто namespaceатрибут <xs:import>) завжди в порядку і розглядаються як ідентифікатор (просто текст, не інтерпретується), тоді як schemaLocation(URL-адреса не URI), як правило, повинен бути оброблений, щоб його вирішити. І там дійсно схемаclasspath: URL - адреси , що стосується Java, може нічого не означати. Але поруч із цим акуратним підбором, це цінний коментар, дякую.
ddevienne

7

Мене це також цікавить. Єдине пояснення, яке я знайшов, - це те, що xsd:includeвикористовується для включення простору імен, тоді xsd:importяк для включення простору між іменами.


0

Пряма цитата з MSDN: <xsd: import> Елемент, розділ Зауваження

Різниця між елементом включення та елементом імпорту полягає в тому, що імпортуючий елемент дозволяє посилатися на компоненти схеми з документів схеми з різними просторами імен, а елемент включення додає компоненти схеми з інших документів схеми, які мають однаковий простір імен цілі (або не вказаний простір імен цілі) ) до містить схему. Коротше кажучи, елемент імпорту дозволяє використовувати компоненти схеми з будь-якої схеми; включає елемент дозволяє додавати всі компоненти включається схеми, що містить схему.


-3

Використовуйте xsd: include приносить усі декларації та визначення зовнішнього документа схеми в поточну схему.

Використовуйте xsd: import для введення XSD з іншого простору імен і використовується для створення нової схеми шляхом розширення існуючих документів схеми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.