XSD 中的循环依赖有效吗?
Is a circular dependency in XSD valid?
我找到了各种资源,其中据说如果可以将其重写为没有循环依赖的 XSD,则可以有循环依赖。
我有两个文件
schemaA.xsd
<xs:include schemaLocation="schemaB.xsd"/>
schemaB.xsd
<xs:include schemaLocation="schemaA.xsd"/>
这显然是一个循环依赖,我无法理解这是如何解决的。然而,很少有在线验证者说它是有效的,也很少有人说它不是。如果是,请帮助我了解它是如何编译的。我要用的库无法编译。
有效。
我试图说服规范的编辑对此进行澄清,但他们声称已经非常清楚了。 (作为我自己的规范编辑,我已经慢慢学会接受如果 reader 说某事不清楚,那么根据定义,它就是。)
基本上是允许的,因为没有规定不允许。
在 XSD 1.1 规范中说:
如果一个·schema document·D1包含一个或多个元素,那么schema(D1)不仅包含immed(D1)
而且还包含schema(D2)的所有组件), 对于每个由 D1 的 <include>
子元素标识的·模式文档· D2。
这是一个递归定义,作为程序员,您可能会想“如果它是一个循环定义会发生什么”。我从编辑那里得到的回应是:你不应该像程序员一样思考;或者,如果您是,那么处理周期是您的问题,而不是我们的问题。在数学图论中,即使关系不是非循环的,关系的传递闭包也是明确定义的;在不进入循环的情况下评估传递闭包是一个实现问题,而不是规范问题。
所以简而言之,规范所说的是模式包含通过一个或多个 xs:include
指令可以访问的所有内容,如果这些指令让你绕圈子,处理器只需要处理它。
你如何解决你的问题是另一个问题。一如既往,当面对有缺陷的产品时,您的选择是:
提交错误报告并等待解决
放弃使用该产品并改用替代产品
避免使用不起作用的功能。
我找到了各种资源,其中据说如果可以将其重写为没有循环依赖的 XSD,则可以有循环依赖。
我有两个文件
schemaA.xsd
<xs:include schemaLocation="schemaB.xsd"/>
schemaB.xsd
<xs:include schemaLocation="schemaA.xsd"/>
这显然是一个循环依赖,我无法理解这是如何解决的。然而,很少有在线验证者说它是有效的,也很少有人说它不是。如果是,请帮助我了解它是如何编译的。我要用的库无法编译。
有效。
我试图说服规范的编辑对此进行澄清,但他们声称已经非常清楚了。 (作为我自己的规范编辑,我已经慢慢学会接受如果 reader 说某事不清楚,那么根据定义,它就是。)
基本上是允许的,因为没有规定不允许。
在 XSD 1.1 规范中说:
如果一个·schema document·D1包含一个或多个元素,那么schema(D1)不仅包含immed(D1)
而且还包含schema(D2)的所有组件), 对于每个由 D1 的 <include>
子元素标识的·模式文档· D2。
这是一个递归定义,作为程序员,您可能会想“如果它是一个循环定义会发生什么”。我从编辑那里得到的回应是:你不应该像程序员一样思考;或者,如果您是,那么处理周期是您的问题,而不是我们的问题。在数学图论中,即使关系不是非循环的,关系的传递闭包也是明确定义的;在不进入循环的情况下评估传递闭包是一个实现问题,而不是规范问题。
所以简而言之,规范所说的是模式包含通过一个或多个 xs:include
指令可以访问的所有内容,如果这些指令让你绕圈子,处理器只需要处理它。
你如何解决你的问题是另一个问题。一如既往,当面对有缺陷的产品时,您的选择是:
提交错误报告并等待解决
放弃使用该产品并改用替代产品
避免使用不起作用的功能。