【问题标题】:Querying XSD-valid XML for the original XML schema查询原始 XML 模式的 XSD 有效 XML
【发布时间】:2014-02-22 05:17:09
【问题描述】:

给定一个架构文档(XSD 格式),例如 MODS 3.5 schema(美国国会图书馆,LoC),以及一个已知根据该架构有效的文档 (XML),例如 metadata for the Antitrust & Competition Policy Blog archives 2007 (@987654323 @) 来自 LoC Law Blawgs Web Archive,是否有 Java API 允许 Java 程序在 XML 文档中查询 XML 模式数据类型,文档元素是其实例?

似乎我可能混淆了 XML 模式和 UML 模型。我正在考虑一个 XML 模式,因为它表示类似 UML 模型 (M1) 的东西,然后是一个 XML 文档,例如表示 UML 模型元素实例的 user data (M0)。如果有可能,类似地,查询一个 XML 元素,确定该元素 派生自或 符合的 XML 模式数据类型或元素定义解析树,我认为它可以为ModeShape 的定序器提供一个很好的功能。

我认为,这个想法本质上是:可能可以在 ModeShape JCR 存储库中引用表示已排序 XML 文档的 XML 元素的 JCR 节点,以将每个元素引用到 JCR表示 XML 模式数据类型的节点,这种类型的代表 JCR 节点将在文档使用的模式的排序中定义,例如已由 ModeShape XSD 排序器排序。

我只是不确定在 Java 中是否存在用于确定 XML 模式元素而不是有效 XML 文档元素的 API(当根据 XML 模式验证 XML 文档时),这样元素符合解析树中的。我的印象是可以执行这样的计算。简单地说,我想知道,是否已经有 一个 API 用于此?

另外,还有UML...

【问题讨论】:

标签: java xml xsd


【解决方案1】:

答案是肯定的。

就标准而言,根据模式验证 XML 文档会产生一个 PSVI(模式验证后信息集),并且 PSVI 会在解析树中的节点上装饰它们所针对的验证类型的信息。

在具体实现方面,如果您使用 JAXP Validation API,您可以生成一个使用 TypeInfo 增强的 DOM,告诉您每个节点的类型,或者您可以使用基于 SAX 的验证管道,其中通知类型信息到 TypeInfoProvider。

您也可以使用模式感知 XSLT 和 XQuery 来执行此操作;在验证操作之后,节点会增加一个“类型注释”,您可以使用“实例”测试对其进行询问。如果使用 Saxon,可以使用扩展函数 saxon:type() 或 saxon:type-annotation() 进一步探索:

http://www.saxonica.com/documentation/#!functions/saxon/type http://www.saxonica.com/documentation/#!functions/saxon/type-annotation

XSLT/XQuery 方法的一个限制是它仅在验证成功时才有效。 DOM/SAX 接口还在验证失败的情况下提供信息。

【讨论】:

  • 谢谢。这很有帮助。参考xerces2-j FAQ 我看到 Xerces 提供对 PSVI 的访问。关于我的主要用例,我认为 Saxon 将是 ModeShape 的 XML 和 XSD 排序器的有趣替代方案,用于在 XML 中生成 JCR 节点类型定义。我认为 PSVI 模式的问题实质上为讨论提供了信息。我将首先关注 Xerces 的实现。 XSLT 中可用的功能,我将注明以供进一步参考。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 2018-06-30
相关资源
最近更新 更多