xml - 是否可以仅在一个 XSD 文件中展平 XML 模式包?

标签 xml xsd

我有一个由两个 XSD 文件组成的 XSD 包:比方说 A.xsd 和 B.xsd。模式 A 导入(不包括)B 模式。它们具有不同的命名空间。

我需要在不能很好地与 xsd:imports 配合使用的系统中使用这些模式。

是否可以将 XSD 包扁平化为一个且仅一个 XSD 文件,或者每个命名空间一个 XSD 文件是否是绝对最小值?

最佳答案

每个 xs:schema 元素仅包含一个目标命名空间的声明。但是规范中没有任何内容说明 xs:schema 必须是 XML 文档的根元素。因此,理论上,您可以将两个模式元素都包装在一个包装文件中;在实践中,并非所有 XSD 验证器都会对此作为输入感到满意。

[后来的补充:因为这似乎是一个有争议的问题,也许我应该明确地说,我假设“一个 XSD 文件”是指一个 XML 文档,包含在一个包含 XSD 的文件中。如果您是其他意思,请解释。]

您没有说您在导入时遇到了什么样的问题,但是可能值得尝试的一件事是从 A 中的 xs:import 元素中删除架构位置信息。 xsd(因此导入仅命名所涉及的命名空间,而不是架构文档的位置),并将 A.xsd 和 B.xsd 作为运行时参数传递给处理器。 (大多数但不是所有 XSD 处理器都允许您在调用时指定一些模式文档供它们读取。参数的顺序可能很重要,因此如果第一次不起作用,请尝试颠倒顺序。)

关于xml - 是否可以仅在一个 XSD 文件中展平 XML 模式包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12514361/

相关文章:

sql - T-SQL - 选择 XML 节点值,如果节点不存在则选择 NULL

xsd - 任何方式来覆盖 <choice> 元素如何被 xsd.exe 绑定(bind)

.net - 以编程方式从 XSD 创建 XML 文件

java - 如何使用 DOM 删除 XML 文档的根节点

javascript - 使用 jQuery 遍历 XML 获取元素值

java - 创建 Dom4J SaxReader 对象池有什么值(value)吗?

java - 使用 XPath 读取站点地图

java - 异常 : cvc-type. 3.2.2:模式定义中的异常

java - EAD xsd 生成的 JAXBException

xsd - 元素 'enumeration' 的命名空间必须来自架构命名空间 'http://www.w3.org/2001/XMLSchema'