【问题标题】:Is it possible to flatten an XML Schema package in only one XSD file?是否可以仅在一个 XSD 文件中展平 XML Schema 包?
【发布时间】:2012-09-20 14:04:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

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

    [稍后补充:因为这似乎是一个有争议的观点,也许我应该明确地说,我假设“一个 XSD 文件”是指一个 XML 文档,包含在一个包含 XSD 的单个文件中。如果你的意思是别的,请解释一下。]

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

    【讨论】:

    • 请指出一个单一的实现,它是一个 XSD 文件并且具有两个或多个 xs:schema 元素,我很乐意恢复我的反对意见。我想你想到了第 3.15.2 节底部的评论。请记住,问题是指XSD 文件。一个 WSDL 文件可以嵌入多个针对不同名称空间的模式文档。但是,这不是 XSD 文件。它是一种特殊类型的文档,支持嵌入 XML Schema 文档。
    • 您似乎将软件和数据的一致性与供应商当前支持的可能性混为一谈;我认为将这两件事区分开来更有帮助,正如我在回答中所做的那样。对规范所说的内容的声明不会通过对处理器行为的观察来判断为真或假。
    • 我认为这是一个附带问题,但既然你问了,XSV 似乎支持同一个 XML 文档中的多个 xs:schema 元素。
    • 我不认为这就是问题所在;它指的是处理XSD 文件a system。我清楚地说,there's only one root xs:schema per XSD;我没有说,there's only one xs:schema per WSDL 这将是“不完全正确”。您似乎不同意 XSD files... 的定义,这很酷,但与此无关。
    • 感谢您的参考 - 我不会说它有效。你试过了吗?我试过<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="root" type="Troot"/></xs:schema> 并得到<xsv xmlns="http://www.w3.org/2000/05/xsv" docElt="{http://www.w3.org/2001/XMLSchema}schema" instanceAssessed="true" instanceErrors="0" realName="Document1.xsd" rootType="[Anonymous]" schemaErrors="0" target="file:/usr/local/XSV/xsvlog/tmpytDZhKuploaded" validation="strict" version="XSV 3.1-1 of 2007/12/11 16:20:05"/> - 我预计会出错。尝试了一个用假人包裹的好架构......
    【解决方案2】:

    不,这是不可能的。每个 XSD 只能定位一个命名空间。如果有的话,每个 XSD 只有一个根 xs:schema,只有一个名为 targetNamespace 的属性(不是列表)。

    【讨论】:

    • 确实...我重新阅读了一些 XSD 标准文档并意识到这一点。感谢您的确认:-)
    • 不完全正确。每个“模式文档”一个命名空间,但 XSD 规范将“模式文档”定义为 xs:schema 元素。之所以称为文档,是因为 xs:schema 通常是最外层的元素,但这实际上并不是规范的要求。
    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多