Xml 如何使用工具检查xsd模式本身是否有效?

Xml 如何使用工具检查xsd模式本身是否有效?,xml,validation,xsd,Xml,Validation,Xsd,我想知道如何建立一些参考证据来证明模式是否有效。我和一个承包商有争执。他们使用一种工具,我使用其他工具。他们说模式有效,而我不同意。谷歌搜索几乎一无所获,因为每个人都在寻找xml验证。我需要验证模式本身 例如考虑此片段( S0是默认命名空间): 它是模式的有效部分吗?如果不是-它违反了哪个w3c模式定义?没有明确的w3c认可的工具可以为您回答这个问题。您基本上需要查看特定工具报告的错误,并将它们与规范进行比较——这并不容易,因为XSD规范的阅读非常困难。当然,即使你同意某个工具是错误的,你也

我想知道如何建立一些参考证据来证明模式是否有效。我和一个承包商有争执。他们使用一种工具,我使用其他工具。他们说模式有效,而我不同意。谷歌搜索几乎一无所获,因为每个人都在寻找xml验证。我需要验证模式本身

例如考虑此片段(<代码> S0是默认命名空间):



它是模式的有效部分吗?如果不是-它违反了哪个w3c模式定义?

没有明确的w3c认可的工具可以为您回答这个问题。您基本上需要查看特定工具报告的错误,并将它们与规范进行比较——这并不容易,因为XSD规范的阅读非常困难。当然,即使你同意某个工具是错误的,你也必须决定该怎么做:放弃使用该工具并不总是一个切实可行的选择。不幸的是,使用XSD时,工具之间存在相当多的偏差(部分原因是规范的阅读非常困难……对于那些相信正式规范的人来说,我个人认为可读的规范更为重要。)

这里的特殊问题是,通过扩展从另一个类型B派生的类型R是否可以包含已在B中定义的属性的定义

了解模式必须满足三组规则才能有效是很有用的:

(a) 模式文档的模式定义了模式文档中元素和属性的基本语法结构

(b) 模式的XML表示形式上的约束为无法在S4SD中方便地表示的XML表示形式定义了其他规则

(c) 模式组件模型上的约束定义了应用于从XML构造的模式组件的规则

在这种情况下,这些规则之一在§3.4.6模式组件约束中:复杂类型定义属性正确;规则4说,“{attribute uses}中两个不同的属性声明不能具有相同的{name}和{target namespace}。”

要确定是否违反了此规则,我们需要查看{attribute uses}属性是如何计算的。这在§3.4.2中给出:

{attribute uses}:   A union of sets of attribute uses as follows:
1 The set of attribute uses corresponding to the <attribute> [children], if any....

3 The {attribute uses} of the type definition ·resolved· to by the ·actual value· of the base [attribute]
{attribute uses}:属性使用集合的并集,如下所示:
1属性集使用对应于[子项]的属性,如果有。。。。
3{attribute uses}类型定义·解析·to由基[attribute]的·实际值·解析
此集合显然包含两个同名的属性,这违反了约束;除非您将术语“联合”解释为形成一个集合,其中重复项已经消除。联合操作将删除相同的成员。这就导致了一个臭名昭著的缺口,规范本身在§3.4.6中也承认了这一缺口:“……组件标识的概念,该概念仅在本规范版本中定义不完整……”


但是,在这种情况下,两个属性的使用不能完全相同。属性使用的属性之一是相应的属性声明(类似于这两个属性的本地
会生成属性声明和属性使用)。属性声明的属性之一是它的{scope},它本质上是包含复杂类型的。这两个属性声明具有不同的{scope},因此它们是不同的,因此这两个属性使用具有不同的{attribute declaration}属性,因此属性使用是不同的,因此联合包含这两个属性,因此架构是无效的。

为什么您认为架构是无效的?如果你详细解释,有人会告诉你你是对的还是错的。我在你发布的片段中没有看到任何明显无效的东西。我以前遇到过这个问题。基本上,在一天结束时,你必须给你的客户一些他说是有效的东西,即使你内部不同意。@Jesper XML Spy和Oxygen都告诉我,复杂类型定义“s0:PairOfIDCols”已经有一个属性“ID”。这是因为
ID
属性是在type
Cols
中定义的,然后在派生类型
PairOfIDCols
中重新定义。我不确定XSD是否正式允许这样做。你可以试着通过阅读来了解,你所说的一切都是正确的,但是你对正式规范的评论表明XSD规范可能被视为正式规范的一个实例。不幸的是,对所有有关方面来说,这根本不是这样的。(正式规范可能会在规则中使用组件标识,并定义组件标识,或者可能会保留未定义的标识,而不会在规则中对其产生吸引力;但使用正式规范技术的任何工作组都不可能像XSD工作组一样,在您在规范中识别的差距方面欺骗自己。)@迈克尔·凯:谢谢你的全面回答。
{attribute uses}:   A union of sets of attribute uses as follows:
1 The set of attribute uses corresponding to the <attribute> [children], if any....

3 The {attribute uses} of the type definition ·resolved· to by the ·actual value· of the base [attribute]