【问题标题】:MarkLogic to Java & Back SolutionMarkLogic to Java & Back 解决方案
【发布时间】:2011-10-06 00:43:46
【问题描述】:

我需要从 MarkLogic 服务器查询 XML 并将其编组为 Java 对象。什么是解决这个问题的好方法?具体来说:

  1. 使用 MarkLogic 对 XML 技术堆栈有任何影响吗? (即,MarkLogic 是否存在导致搜索、读取和写入 XML sn-ps 的不同方法?)
  2. 我应该使用其中一个 XML API 自己处理 XML 还是有更简单的方法?
  3. 是否值得为此使用 JAXB?

有人问了一个很好的问题,为什么我使用 Java。我正在使用 Java/Java EE,因为我最擅长该语言。这是一个人的项目,我不想被困在任何地方。该项目旨在开发 Web 服务 API 以及数据处理和转换(CSV 到 XML)功能。 Java/Java EE可以很好地做到这一点,而且做得很优雅。

【问题讨论】:

    标签: java xml marklogic


    【解决方案1】:

    注意:我是EclipseLink JAXB (MOXy) 领导,也是JAXB 2 (JSR-222) 专家组的成员。

    使用 MarkLogic 对 XML 技术栈有影响吗? (即 MarkLogic 是否有一些东西会导致不同的 搜索、读取和写入 XML sn-ps 的方法?)

    可能。一些对象到 XML 库比其他库支持更多种类的文档。 MOXy 利用基于 XPath 的映射,使其能够处理更广泛的文档。下面是一些例子:

    我应该使用 XML API 自己处理 XML 还是有 更简单的方法?

    使用框架通常更容易。 Java SE 提供了处理 XML 的标准库:JAXB (javax.xml.bind)、XPath (javax.xml.xpath)、DOM、SAX、StAX。由于这些标准还有其他实现(即 MOXy 和 Apache JaxMe 实现 JAXB)。

    是否值得为此使用 JAXB?

    是的。

    【讨论】:

      【解决方案2】:

      有许多 XML-> Java 对象编组库。我认为您可能想通过搜索像这样的通用 Java XML 编组/解组问题来寻找这个问题的答案:

      Java Binding Vs Manually Defining Classes

      尽管标题编辑有所帮助,但您的用例仍然不完全清楚 - 如果您正在寻找 Java 连接,您可能还想查看http://developer.marklogic.com/code/mljam,它允许您从 MarkLogic XQuery 中执行 Java 代码。

      【讨论】:

      • 谢谢。我稍微修改了我的问题。
      【解决方案3】:

      XQSync 为此使用XStream。据我了解,JAXB 更强大 - 但也更复杂。

      【讨论】:

      【解决方案4】:

      使用 JAXB 解组从 XQuery 提供的 xml 已有 5 年了,我不得不说我发现它非常有用且节省时间。至于复杂性,它很容易学习和使用,可能有 90% 的用途是你将要使用的。我已经将它用于简单和复杂的模式,并发现它非常高效且节省时间。在 MarkLogic 中执行 Java 代码通常是不可能的,因为它在 Marklogic 服务器上的单独 VM 中运行,因此它实际上无法利用来自 Java EE Web 应用程序的任何会话状态或库。使用 JAXB,很容易获取结果流并将其转换为 Java 对象。我真的不能说足够多的好话。它极大地简化了我的开发工作,并允许您利用 Java 做它最擅长的事情(跨各种技术和平台的丰富集成、高级业务逻辑、用于繁重处理作业的快速内存管理等),同时仍然使用 XQuery 进行它最擅长什么(即搜索和转换内容)。

      【讨论】:

      • 感谢罗伯特提供的信息。这很有帮助。
      【解决方案5】:

      使用 MarkLogic 对 XML 技术栈有影响吗?

      没有。当它从 MarkLogic 出来时,它只是可能来自任何地方的 XML。

      我需要查询 XML 并将其编组为 Java 对象。

      为什么?

      如果您有充分的理由使用 Java,那么我们需要知道这个理由是什么,然后我们才能告诉您哪种 Java 技术是合适的。

      如果您没有充分的理由使用 Java,那么您最好使用高级 XML 处理语言,例如 XSLT 或 XQuery。

      对于 JAXB,当您的架构相当简单和稳定时,它是合适的。如果架构很复杂(例如,学术期刊中文章的架构),那么 JAXB 可能会因为生成的类的数量而变得非常笨拙。使用它来处理 XQuery 输出的一个问题是 XQuery 输出很可能不符合任何已知模式,并且 XQuery 结果的结构对于写入的每个查询都是不同的。

      【讨论】:

      • @Mike:模式很简单,但并不存在。这将是主项目的一个副项目。
      • @Mike:我回复了正文中的Java问题。好问题。
      • @Mike:哦? “Saxon XSLT 处理器的开发人员”将此问题视为他的铁锤。为什么选择 Java 或 C#?也许是语言的设计、它们的自然本体、它们的句法特征、静态类型、它们的可读性和可维护性、它们的编译器服务、它们的智能感知、自动完成、引用突出显示/替换、IDE 和编辑器、代码着色、错误检查、静态分析、内置 cmets 和帮助系统,甚至拼写检查器、调用堆栈、逐步调试器、调用层次结构、代码可视化工具,我要继续吗?
      • 不,不要。我只是讨厌看到人们编写 100 行 Java,而 10 行 XQuery 或 XSLT 就可以完成这项工作,唯一的原因是他们喜欢使用他们熟悉的 Java 技能和工具。正如我所说,在我参与过的项目中,当模式相当简单且非常稳定时,JAXB 运行良好;架构复杂或经常更改是一场灾难。而且我不排除使用 Java,我只是询问是否有很好的选择理由。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 2018-03-05
      • 2017-05-22
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多