以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  RDQL问题:如何找到两个节点之间的path  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=23784)


--  作者:BenLin
--  发布时间:10/31/2005 12:05:00 PM

--  RDQL问题:如何找到两个节点之间的path
Jena Tutorial - RDQL中有一个例子:
--------------------
More Graph patterns: Paths

One very common structure is to know the path in the graph, whether from a known point or from a variable.  Such a path is made up a number of edges, linked by a graph node which has to be given a variable (see "vc-q4")

SELECT ?resource  ?givenName
WHERE (?resource  <http://www.w3.org/2001/vcard-rdf/3.0#N>   ?z)
      (?z  <http://www.w3.org/2001/vcard-rdf/3.0#Given>  ?givenName)
------------------------
这样能找到resource---------z---------givenName的关联。
我需要在一个owl中找到NodeA---------x-------x-------...------x-------NodeB的整个path,把NodeA和NodeB之间的path找出来。当然NodeA和NodeB都是明确知道的。

应该用什么RDQL语句?这是推理还是查询?


--  作者:jpz6311whu
--  发布时间:10/31/2005 12:27:00 PM

--  
private String SearchRelation(String language, String Mstr, String Nstr,int depth)
写一个动态生成RDQL的方法,depth是深度。
曾经尝试过,当instances数目达到13000的时候,深度为3勉强还可以接受,大概10秒左右才能查询出结果。
以上仅供参考,感觉实现起来效率不高,算法并不太好。
--  作者:01musician
--  发布时间:10/31/2005 12:50:00 PM

--  
仅已知NodeA,NodeB,要找出所有路径,用RDQL语句估计写不出来(我觉得),个人认为可以用程序查询的方法,用一个for循环不断的添加新的变量来解决(多加一个变量即搜寻多一个中间节点的 路径)。
RDQL是查询语句,看你你想要推理后的查询,还是要没有推理的查询咯。

--  作者:jpz6311whu
--  发布时间:10/31/2005 12:55:00 PM

--  
感觉用程序实现效率不会比RDQL高,毕竟RDQL是专门做查询的。
至于是否推理,就看查询的源数据是推理前的还是推理后的,我同意你的看法。
--  作者:BenLin
--  发布时间:10/31/2005 11:15:00 PM

--  
第一:我不知道这个问题是“推理”还是“查询”
第二:其实我要找的不是“所有路径”,要找最短路径
第三:“动态生成RDQL的方法”,很好的思路,不过按照你说的,效率可能是一个问题。最大有10层以上。
第四:13000个节点,和我的一样啊。难道 jpz6311whu你也是做GeneOntology?
第五:这个owl一load近来,就直接做这个查找。查询的源数据是推理前的。
第六:如果RDQL没有现成的语句,我打算用BFS来“手工”找最短路径。两头同时开始。大家意下如何?

----------------------
上次征友,有几个用jena的朋友加了我的MSN,讨论中我学到了不少东西。现继续征友:dwn78 AT hotmail.com


--  作者:jpz6311whu
--  发布时间:10/31/2005 11:46:00 PM

--  
请问BFS是什么?
--  作者:BenLin
--  发布时间:11/1/2005 12:13:00 AM

--  
breadth first search, 广度优先搜索


--  作者:jpz6311whu
--  发布时间:11/1/2005 12:20:00 AM

--  
两头同时开始"广度优先搜索",大概知道你的思路了,
你的本体库复杂程度怎么样,平均每个接点有几个ObjectProperty?
--  作者:BenLin
--  发布时间:11/1/2005 12:30:00 AM

--  
这个本体是个类似“树”,tree-likely graph,也就是每个节点有十几个子节点,但是只会有1-3个父。

我现在要找的是两个节点的(最近)共同祖先节点,所以在这个意义上说,我是反过来找父节点,所以每个节点会有1-3个父节点。搜索的branch facter ~= 2 不算大吧?不过深度可能是20。


--  作者:jpz6311whu
--  发布时间:11/1/2005 12:50:00 AM

--  
branch facter ~= 2 ,深度可能是20
这个就很难说了,毕竟深度太大了

我做的测试是,branch factor~=30,深度为3,速度大概10秒左右,算法是直接用的RDQL,深度到4就完全不行了。
这个刚好和你的情况互补,如果你用BFS算法实现,对比一下我们的测试结果,应该是个有趣的比较


--  作者:BenLin
--  发布时间:11/1/2005 1:19:00 AM

--  
过两天看看程序效果吧。
--  作者:YinglongMa
--  发布时间:1/25/2007 9:44:00 PM

--  
是具有推理的查询啊。较长的路径可以使用多个rdf三元组的连接查询,这和sql没有多大的区别
--  作者:hyb22ndf
--  发布时间:4/26/2012 11:52:00 AM

--  求两个节点间的最短距离
能不能把代码分享一下,学习一下
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
93.750ms