ChatGPT解决这个技术问题 Extra ChatGPT

xsd:include 和 xsd:import 有什么区别?

xsd:includexsd:import 有什么区别?您什么时候会使用其中一个而不是另一个,什么时候可能无关紧要?

另请参阅 stackoverflow.com/questions/4998063/… 上的答案

t
tony19

includeimport 之间的根本区别在于,您必须使用 import 来引用 不同 目标命名空间中的声明或定义,并且必须使用 include 来引用声明或在(或将)在相同目标命名空间中的定义。

来源:https://web.archive.org/web/20070804031046/http://xsd.stylusstudio.com/2002Jun/post08016.htm


k
kjhughes

使用 xsd:includesame 或无命名空间引入 XSD。

使用 xsd:import不同的 命名空间引入 XSD。


Z
Zombies

另一个区别是 <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"/>

我认为您的意思是通过位置 URL 引用 XML 命名空间,而不是 通过 URI。命名空间 URI(即 <xs:import>namespace 属性)总是可以的,并且被视为 标识符(只是文本,未解释),而 schemaLocation(URL 不是 URI)通常必须处理,才能解决。实际上,Java 特定的 classpath: URL scheme 可能毫无意义。但除了这个巧妙的选择,这是一个有价值的评论,谢谢。
M
Matt Luongo

我也对这个感兴趣。我发现的唯一解释是 xsd:include 用于命名空间内包含,而 xsd:import 用于命名空间间包含。


S
S Meaden

来自 MSDN: <xsd:import> Element, Remarks section 的直接报价

include 元素和 import 元素的区别在于 import 元素允许从具有不同目标命名空间的模式文档中引用模式组件,而 include 元素从具有相同目标命名空间(或没有指定目标命名空间)的其他模式文档中添加模式组件) 到包含架构。简而言之,import 元素允许您使用来自任何模式的模式组件; include 元素允许您将包含模式的所有组件添加到包含模式。


所以,我从那个描述中得到的是 import 只会引入你引用的东西,而 include 意味着那些引用你的 XSD 的人将隐含地从你导入的 XSD 中获取所有东西
S
Shailej Shimpi

使用 xsd:include 将外部模式文档的所有声明和定义带入当前模式。

使用 xsd:import 从不同的命名空间引入 XSD,并用于通过扩展现有模式文档来构建新模式。