Ответы:
Принципиальная разница между include
и в import
том, что вы должны использоватьimport
для ссылки на объявления или определения, которые находятся в другом целевом пространстве имен, и вы должны использовать include
для ссылки на объявления или определения, которые находятся (или будут) в том же самом целевом пространстве имен.
Источник: https://web.archive.org/web/20070804031046/http://xsd.stylusstudio.com/2002Jun/post08016.htm
Используйте xsd: include для ввода XSD из того же пространства имен или без него.
Используйте xsd: import для ввода XSD из другого пространства имен.
Другое отличие заключается в том, что <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"/>
namespace
атрибут <xs:import>
) всегда в порядке и рассматриваются как идентификатор (просто текст, не интерпретируется), в то время как schemaLocation
(URL-адрес, а не URI) обычно должен обрабатываться, чтобы быть разрешенным. И действительно, специфическая для Java схемаclasspath:
URL может ничего не значить. Но помимо этого аккуратного выбора, это ценный комментарий, спасибо.
Я тоже заинтересован в этом. Единственное объяснение, которое я нашел, заключается в том, что xsd:include
он используется для включения в пространство имен, а xsd:import
для включения в пространство имен.
Прямая цитата из MSDN: элемент <xsd: import>, раздел «Замечания»
Различие между элементом include и элементом import заключается в том, что элемент import позволяет ссылаться на компоненты схемы из документов схемы с различными целевыми пространствами имен, а элемент include добавляет компоненты схемы из других документов схемы, которые имеют такое же целевое пространство имен (или нет указанного целевого пространства имен). ) к содержащей схеме. Короче говоря, элемент import позволяет использовать компоненты схемы из любой схемы; включает элемент позволяет добавлять все компоненты включаемой схемы, содержащую схему.
Использование xsd: include приводит все объявления и определения внешнего документа схемы в текущую схему.
Используйте xsd: import, чтобы ввести XSD из другого пространства имен и использовать для создания новой схемы путем расширения существующих документов схемы.