Java 如何从多个存储库中提取相关信息?

Java 如何从多个存储库中提取相关信息?,java,jena,semantic-web,Java,Jena,Semantic Web,问题陈述: 信息跨越多个存储库-SAP、DB等。现在,当我搜索特定的内容时,我希望从所有存储库中提取相关数据。(目前,假设我能够以巨大的XML格式从所有这些存储库中提取数据。) 如何为我的搜索添加意义 我正在寻找一个基于java的解决方案 Jena/Semantic Web会帮助我吗?我可以在RDFs中定义关系吗 由于我对语义网知之甚少,我试图了解它是否解决了我的问题。如果我错了,请纠正我。您可以使用ISO 15926等方法。在这个标准中,您拥有抽象模型(201个实体),以及特定知识领域的RDL

问题陈述:

信息跨越多个存储库-SAP、DB等。现在,当我搜索特定的内容时,我希望从所有存储库中提取相关数据。(目前,假设我能够以巨大的XML格式从所有这些存储库中提取数据。)

如何为我的搜索添加意义

我正在寻找一个基于java的解决方案

Jena/Semantic Web会帮助我吗?我可以在RDFs中定义关系吗


由于我对语义网知之甚少,我试图了解它是否解决了我的问题。如果我错了,请纠正我。

您可以使用ISO 15926等方法。在这个标准中,您拥有抽象模型(201个实体),以及特定知识领域的RDL(参考数据库)。
为了对所有存储库使用一个全局查询,您可以使用不同应用程序之间的映射,并将映射等价性存储在RDF中。通过这种方式,您需要为每个应用程序使用facade。

您在这里提出了一系列问题(顺便说一句,这并不是StackOverflow的最佳实践),但我认为您提出的关键问题是:

如何为我的搜索添加意义

这实际上取决于对您试图交付的业务价值或用户体验有一个清晰的理解。“意义”是一个不精确的术语——我认为,如果你能更准确地描述你希望用户能够问的问题的类别,以及他们会发现什么样的答案有用,那么你将更容易分析你需要哪些技术

考虑到这一点,我对您的一般性问题的一般性回答是,为了集成来自不同、异构信息源的信息,您需要能够以用户能够理解的方式从概念上将它们联系在一起。因此,不仅仅是低级的“此db字段映射到该XML元素”,而是,例如,“此数据集记录客户与销售团队的交互,这些是生产线吞吐量的统计数据,它们通过订单队列中的订单关联”。这有点含糊不清,但这是一个虚构的例子,让我的意思有一种味道。因此,将CRM信息与制造业统计数据联系起来的方法是收集一些概念,您可以将所有内容联系起来。在语义web世界中,我们称之为本体论。设计一个覆盖整个业务的本体可能很困难,但可以不严格地说,应用敏捷技术来逐步发展您的理解和本体模型

一旦你有了一个本体,你可以使用像Jena这样的库来帮助你从不同的来源获取信息,并将它们存储在一个你可以与你的本体相关的形式中。使用RDFS或OWL等语言使本体显式的一个优点是,您可以使用自动推理工具自动从数据中得出新结论,或者将一些数据映射表示为规则。有些人认为规则是一种更抽象、更容易理解的符号

有很多方法可以解决你所描述的问题,而Jena本身不会给你答案。我认为拥有一个合适的本体论对于我理解你的问题是非常必要的。本体需要有多复杂将取决于数据的复杂性和用户需求,这将取决于对问题有更清晰的业务级别的理解。一旦具备了这一点,选择正确的RDF/OWL工具将相对简单。

我看到两种方法:

  • 拉取数据,索引它(Lucene?),并使用自定义索引搜索“副本”。如果可能的话,我会避免这种情况,因为移动大量数据通常是个坏主意

  • 将一些代理移动到尽可能靠近数据源的位置,在本地运行查询(靠近SAP、DB等),并仅传输您真正需要的结果部分

考虑将集成框架视为Apache Camel或Spring集成。

有趣的问题

如果确实存在一些通用的概念模型,允许您将所有数据映射到一致的本体,那么您可以遵循Ian Dickinson建议的路线。如果您使用的是SAP,我猜您指的是大量数据,以及一个中等复杂的业务领域。这样一个项目将是一项重大任务,而技术因素只是开始

早在语义网诞生之前,我就从事过这样一个项目,它是一个庞大而复杂的项目。问题不是技术性的,而是业务专家对词语的含义、业务概念之间的关系(所有员工必须属于同一个部门。哦,除了弗雷德,他是财务部的兼职人员)有着相互矛盾的想法,并且发现很难处理我们技术人员喜欢使用的抽象概念


另一种选择是基于“搜索”——找到一种以某种最小结构表示数据的方法,使用Lucene(或类似工具)构建索引,并允许用户浏览该机制。当然,这可能意味着构建一个相当复杂的web应用程序,但我认为大多数人已经习惯于用谷歌搜索他们想要的东西……

你能更具体地解释一下“为我的搜索添加意义”是什么意思吗?