XML 有 "one schema rule" 吗?
Is there a "one schema rule" for XML?
我有一个 XML 文件,其中包含 14 个要验证的模式。所有模式都是独立的,不会相互导入,也没有任何链接所有模式的“超级模式”...
我能找到的所有在线/可下载工具都要求我上传我的 XML 文件,然后提供一个架构文件。
我只是想问,从 XML 标准的角度来看,我对架构的理解是否错误,它们都可以以某种方式用于一个文件?同样,管理我的 XML 文件的不同模式各自特定于它们的命名空间,并且没有继承或重用模式内的其他模式。
奇怪的是,即使是价值 100 美元的工具 (XmlBluePrint) 也只允许您使用一个模式文件进行验证...
另一方面,我知道 java 可以做到:
Schema schema = schemaFactory.newSchema(new Source[] {
new StreamSource(new FileInputStream("main.xsd")),
new StreamSource(new FileInputStream("extension.xsd")),
});
但是我对Java没那么自信,可能是我没看懂?
你在两个方面都是正确的:
XML 标准中的任何地方都没有“one schema rule for XML”:您可以验证一个XML 包含任意数量架构的文档。
工具几乎不支持为一个 XML 文档指定多个模式。即使是标准中的 xsi:noNamespaceSchemaLocation
和 xsi:schemaLocation
提示也仅直接支持每个命名空间分别与单个 XSD 和单个 XSD 关联。
选项包括编写自定义代码或手动更改设置。
相关
- How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?
术语:模式文档是 XSD 语法中包含源声明的文件。模式是通过编译一个或多个模式文档获得的模式组件的集合。如果您组合两个模式,结果就是一个模式。因此,您只会针对一个模式进行验证,但它可能源自多个模式文档,这些文档可能会或可能不会使用 xs:import
/xs:include
.
“链接”
当然有一些工具和 API 允许您 assemble 来自多个(非链接)模式文档的模式。例如,Saxon 命令行界面允许它:参见 http://www.saxonica.com/documentation/index.html#!schema-processing/commandline
但可能还有其他工具不允许这样做。
我有一个 XML 文件,其中包含 14 个要验证的模式。所有模式都是独立的,不会相互导入,也没有任何链接所有模式的“超级模式”...
我能找到的所有在线/可下载工具都要求我上传我的 XML 文件,然后提供一个架构文件。
我只是想问,从 XML 标准的角度来看,我对架构的理解是否错误,它们都可以以某种方式用于一个文件?同样,管理我的 XML 文件的不同模式各自特定于它们的命名空间,并且没有继承或重用模式内的其他模式。
奇怪的是,即使是价值 100 美元的工具 (XmlBluePrint) 也只允许您使用一个模式文件进行验证...
另一方面,我知道 java 可以做到:
Schema schema = schemaFactory.newSchema(new Source[] {
new StreamSource(new FileInputStream("main.xsd")),
new StreamSource(new FileInputStream("extension.xsd")),
});
但是我对Java没那么自信,可能是我没看懂?
你在两个方面都是正确的:
XML 标准中的任何地方都没有“one schema rule for XML”:您可以验证一个XML 包含任意数量架构的文档。
工具几乎不支持为一个 XML 文档指定多个模式。即使是标准中的
xsi:noNamespaceSchemaLocation
和xsi:schemaLocation
提示也仅直接支持每个命名空间分别与单个 XSD 和单个 XSD 关联。
选项包括编写自定义代码或手动更改设置。
相关
- How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?
术语:模式文档是 XSD 语法中包含源声明的文件。模式是通过编译一个或多个模式文档获得的模式组件的集合。如果您组合两个模式,结果就是一个模式。因此,您只会针对一个模式进行验证,但它可能源自多个模式文档,这些文档可能会或可能不会使用 xs:import
/xs:include
.
当然有一些工具和 API 允许您 assemble 来自多个(非链接)模式文档的模式。例如,Saxon 命令行界面允许它:参见 http://www.saxonica.com/documentation/index.html#!schema-processing/commandline
但可能还有其他工具不允许这样做。