xsd:include
和 xsd:import
有什么区别?您什么时候会使用其中一个而不是另一个,什么时候可能无关紧要?
include
和 import
之间的根本区别在于,您必须使用 import
来引用 不同 目标命名空间中的声明或定义,并且必须使用 include
来引用声明或在(或将)在相同目标命名空间中的定义。
来源:https://web.archive.org/web/20070804031046/http://xsd.stylusstudio.com/2002Jun/post08016.htm
另一个区别是 <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"/>
<xs:import>
的 namespace
属性)总是可以的,并且被视为 标识符(只是文本,未解释),而 schemaLocation
(URL 不是 URI)通常必须处理,才能解决。实际上,Java 特定的 classpath:
URL scheme 可能毫无意义。但除了这个巧妙的选择,这是一个有价值的评论,谢谢。
我也对这个感兴趣。我发现的唯一解释是 xsd:include
用于命名空间内包含,而 xsd:import
用于命名空间间包含。
来自 MSDN: <xsd:import> Element, Remarks section 的直接报价
include 元素和 import 元素的区别在于 import 元素允许从具有不同目标命名空间的模式文档中引用模式组件,而 include 元素从具有相同目标命名空间(或没有指定目标命名空间)的其他模式文档中添加模式组件) 到包含架构。简而言之,import 元素允许您使用来自任何模式的模式组件; include 元素允许您将包含模式的所有组件添加到包含模式。
使用 xsd:include 将外部模式文档的所有声明和定义带入当前模式。
使用 xsd:import 从不同的命名空间引入 XSD,并用于通过扩展现有模式文档来构建新模式。
不定期副业成功案例分享