擅长:python、mysql、java
<p>您是对的,验证器必须知道它验证的所有元素和属性的类型关联,并且验证器因此能够提供对这些信息的访问。在</p>
<p>然而,不管是好是坏,调用方和验证器之间的API以及调用方可用的验证相关信息的选择都是完全由实现定义的。一些验证器(xercesj是一个值得注意的例子)提供了非常全面的验证信息,而其他的则没有</p>
<p>如果不知道您使用的验证器是什么,没有人可以确定地告诉您您要查找的类型信息是否可用。由于您正在调用验证器,因此必须有一个API;如果类型关联通过API可用,那么文档可能会这样说。如果API没有提供对它的访问,可能是因为基础架构验证器没有提供对信息的访问,或者可能是因为API的创建者没有看到这一点;你的工作(如果你想更进一步的话)就是找出其中的一个,然后试图说服相关方,让他们知道提供这些信息是有用的。在</p>
<p>如果您无法通过API访问信息,您可以使用David W的另一个答案中提到的方法的更复杂版本来帮助自己。XSD架构的一个特性是,任何元素的控制类型严格来说都是从验证根到该元素的路径的函数,所以它就是原则上很简单(如果在实践中有点乏味的话),对于文档实例中的任何元素,如果文档实例根据特定的模式进行验证,那么它的管理类型是什么。例如,对于您所提到的情况,可以很容易地判断给定的<code>wakeupNote</code>是否有<code>deviceDescription</code>或{<cd3>}作为祖先,或者如果{<cd1>}同时具有这两个祖先,那么哪个是更近的祖先,并根据该知识推断适当的控制类型定义。在</p>
<p>以这种方式帮助自己可能需要大量的工作。如果有通用工具来计算这些信息并使其以各种形式被访问,这会有帮助,但如果有这样的工具,我就不知道这些工具了。(我知道有人可以免费构建这样一个工具。)所以如果我是你,我会先通过API获取信息。在</p>