Answers:
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模式验证器可能已经通过名称空间知道了所有模式的位置。特别是考虑到在不同的系统上,用URI引用XML命名空间可能会出现问题,在这些系统上,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,并通过扩展现有的模式文档来构建新的模式。