В чем разница между xsd: include и xsd: import?

200

Какая разница между xsd:includeа xsd:import? Когда бы вы использовали один вместо другого, и когда это не имеет значения?

попса
источник
См. Также ответ на stackoverflow.com/questions/4998063/…
Нашев

Ответы:

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 из другого пространства имен.

kjhughes
источник
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"/>
Zombies
источник
Я думаю, что вы имеете в виду обращение к пространствам имен XML по URL адресов, а не по URI . URI пространства имен (то есть namespaceатрибут <xs:import>) всегда в порядке и рассматриваются как идентификатор (просто текст, не интерпретируется), в то время как schemaLocation(URL-адрес, а не URI) обычно должен обрабатываться, чтобы быть разрешенным. И действительно, специфическая для Java схемаclasspath: URL может ничего не значить. Но помимо этого аккуратного выбора, это ценный комментарий, спасибо.
ddevienne
7

Я тоже заинтересован в этом. Единственное объяснение, которое я нашел, заключается в том, что xsd:includeон используется для включения в пространство имен, а xsd:importдля включения в пространство имен.

Мэтт Луонго
источник
0

Прямая цитата из MSDN: элемент <xsd: import>, раздел «Замечания»

Различие между элементом include и элементом import заключается в том, что элемент import позволяет ссылаться на компоненты схемы из документов схемы с различными целевыми пространствами имен, а элемент include добавляет компоненты схемы из других документов схемы, которые имеют такое же целевое пространство имен (или нет указанного целевого пространства имен). ) к содержащей схеме. Короче говоря, элемент import позволяет использовать компоненты схемы из любой схемы; включает элемент позволяет добавлять все компоненты включаемой схемы, содержащую схему.

Мринмой Саркар
источник
-3

Использование xsd: include приводит все объявления и определения внешнего документа схемы в текущую схему.

Используйте xsd: import, чтобы ввести XSD из другого пространства имен и использовать для создания новой схемы путем расширения существующих документов схемы.

Шайлей Шимпи
источник