Java 查询原始XML架构的XSD有效XML

Java 查询原始XML架构的XSD有效XML,java,xml,xsd,Java,Xml,Xsd,给定一个模式文档(XSD foramt),如(美国国会图书馆,LoC),以及一个根据该模式已知有效的文档(XML),如LoC中的(),是否存在允许Java程序查询XML文档的XML模式数据类型的Java API,文档元素是其实例 看起来我可能把XML模式和UML模型弄糊涂了。我认为XML模式表示类似于UML模型(M1)的东西,然后是XML文档,类似于表示UML模型元素实例的用户数据(M0)。类似地,如果可以查询XML元素,确定XML模式数据类型或元素定义(该元素派生自解析树或与解析树中的元素一致

给定一个模式文档(XSD foramt),如(美国国会图书馆,LoC),以及一个根据该模式已知有效的文档(XML),如LoC中的(),是否存在允许Java程序查询XML文档的XML模式数据类型的Java API,文档元素是其实例

看起来我可能把XML模式和UML模型弄糊涂了。我认为XML模式表示类似于UML模型(M1)的东西,然后是XML文档,类似于表示UML模型元素实例的用户数据(M0)。类似地,如果可以查询XML元素,确定XML模式数据类型或元素定义(该元素派生自解析树或与解析树中的元素一致),我认为它可以成为sequencer的一个很好的特性

我认为,其基本思想是:可以在ModeShape JCR存储库中引用表示序列XML文档XML元素的JCR节点,将每个元素引用到表示XML模式数据类型的JCR节点,这种类型的代表性JCR节点将在文档使用的模式的排序中定义,例如,将由ModeShape XSD sequencer进行排序

我只是不确定Java中是否有API来确定XML模式元素,而不是有效的XML文档元素——当XML文档根据XML模式进行验证时——从而使元素与解析树中的元素一致。我的印象是有可能进行这样的计算。简单地说,我想知道,是否已经有了一个API

或者,还有UML…

答案是肯定的

根据标准,根据模式验证XML文档会生成一个PSVI(模式验证后信息集),PSVI会在解析树中的节点上添加有关验证所针对的类型的信息

就具体实现而言,如果使用JAXP验证API,则可以生成一个由TypeInfo扩展的DOM,告诉您每个节点的类型,也可以使用一个基于SAX的验证管道,在该管道中类型信息会通知TypeInfoProvider

您还可以使用支持模式的XSLT和XQuery来实现这一点;验证操作完成后,节点会增加一个“类型注释”,您可以使用“实例”测试来查询该注释。如果使用Saxon,则可以使用扩展函数Saxon:type()或Saxon:type-annotation()进一步探索:


XSLT/XQuery方法的一个局限性是,它只有在验证成功时才起作用。在验证失败的情况下,DOM/SAX接口也会提供信息。

是否可以通过验证SAX解析器解决?e、 g.从Java教程另一个教程中,介绍了
SchemaFactory
类:第三,没有更接近于将模式元素与解析树中的文档元素相关联,但它在SAX上显示了更多的模式验证机制:]还有JAXB,或者-可以扩展'ValidationEventHandler~?cf.-与EclipseLink文档类似,还有JDOM:谢谢。这很有帮助。我看到Xerces提供了对PSVI的访问。关于我的主要用例,我认为Saxon将是ModeShape的XML和XSD Sequencer的一个有趣的替代品,用于以XML生成JCR节点类型定义。我认为PSVI模式的问题实质上影响了讨论。首先,我将重点介绍Xerces的实现。XSLT中提供的功能,我将加以说明以供进一步参考。非常感谢。