我有一个由两个 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/