【问题标题】:What's the best way to build a schema from an XML/JSON file?从 XML/JSON 文件构建模式的最佳方法是什么?
【发布时间】:2020-07-16 20:19:36
【问题描述】:

对于没有XSD文件的情况,我们需要建立一个数据文件的schema,方便用户创建XPath语句。很明显,我们需要遍历整个文档并从中构建架构结构。

我们必须走所有的路来处理(不在第一个节点)的情况:

<name>
  <first>George</first>
  <last>Washington</last>
</name>
<name>
  <first>Harry></first>
  <middle>S</middle>
  <last>Truman</last>
</name>

如果可能的话,获取数据类型(JSON 有这个)。在 Saxon 10.1 的任何地方是否有示例说明如何执行此操作?

【问题讨论】:

    标签: saxon


    【解决方案1】:

    对于任何给定的实例文档,都有许多可能的模式。有很多工具可以从实例文档生成模式,它们会产生不同的(有时是搞笑的)结果。例如,有些人可能会决定美国总统的中间名首字母必须是“B”、“F”或“S”,或者名字必须至少有 5 个字符长。许多人会认为奥莱利永远不可能成为总统。

    多年前,我编写了一个 DTD 生成器,它为实例文档生成 DTD,这是同一种练习,但更简单,因为它只推断复杂类型,而不是简单类型。它只是包含尽可能多的实用启发式方法,方法是为其提供一系列测试用例并检查结果。

    所以没有正确或“最佳”的答案;这不是一个明确定义的要求;相当多的人已经编写了执行此操作的工具;如果你想研究他们是如何做到的:嗯,有些工具是开源的。

    我会质疑以下假设:“我们需要构建数据文件的模式,以便用户轻松创建 XPath 语句”。是的,某种形式的模式是有用的;但是从实例文档合成的模式不如理解数据模型的人编写的模式有用。

    【讨论】:

    • “不如理解数据模型的人编写的模式有用一半” - 是的,但业务用户不具备正确执行此操作的知识。我们的许多用户都是业务用户,他们无法让技术团队提供架构。
    • 顺便说一句-我有代码可以在我们的程序中即时执行此操作,效果很好。问题是它使用 .Net XML 运行时,因此无法处理 JSON。
    • 我在stackoverflow.com/questions/63100478/… 提出了一个有效的例子。不知道这是否是最佳实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2022-01-19
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多