【发布时间】:2014-03-18 11:35:08
【问题描述】:
我正在尝试为Apache Jena Text 制作官方示例以使用 rdf 文件。官方给出的例子是here。
老实说,我认为文档太少,示例太笼统。它没有提供一个真正的 rdf 文件作为示例,并且有很多东西需要配置。我正在尝试分析this RDF file。
--更新--
我找到了在这个问题的评论中提到的官方示例中使用的文件。
因此,我通过将原始示例与 foaf.rdf 文件混合来定义以下 ttl 文件。现在我有文件foaf.ttl:
@prefix : <http://localhost/jena_example/#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix con: <http://www.w3.org/2000/10/swap/pim/contact#> .
@prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix s: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix cc: <http://creativecommons.org/ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:T1 rdfs:label "X0 X1 X2" .
:T2 rdfs:label "X10 X11 X12" .
:B1 rdfs:label "X1" .
:B2 foaf:name "X1" .
:B3 foaf:name "Sean" .
:Sean
a foaf:Person ;
foaf:name "Sean Palmer" .
:Tim_Bray
a foaf:Person ;
foaf:name "X1" .
:me
foaf:name "Oshani Seneviratne" .
:John_Gage
a foaf:Person ;
foaf:img <http://upload.wikimedia.org/wikipedia/commons/d/de/John_Gage.jpg> ;
foaf:name "John Gage" .
因此,关于目前为止提到的原始Java文件,我在main中设置:
public static void main(String [] args){
TextQuery.init();
Dataset ds = createCode();
//Dataset ds = createAssembler() ;
loadData(ds, "foaf.ttl") ;
queryData(ds) ;
}
在queryData 方法中我有:
String pre = StrUtils.strjoinNL
( "PREFIX : <http://localhost/jena_example/#>"
, "PREFIX dc: <http://purl.org/dc/elements/1.1/>"
, "PREFIX con: <http://www.w3.org/2000/10/swap/pim/contact#>"
, "PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>"
, "PREFIX foaf: <http://xmlns.com/foaf/0.1/>"
, "PREFIX s: <http://www.w3.org/2000/01/rdf-schema#>"
, "PREFIX owl: <http://www.w3.org/2002/07/owl#>"
, "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"
, "PREFIX cc: <http://creativecommons.org/ns#>"
, "PREFIX text: <http://jena.apache.org/text#>"
, "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>") ;
String qs = StrUtils.strjoinNL
( "SELECT * "
, " { ?res text:query ('X*' 10) ;"
, " rdfs:label ?label"
, " }") ;
在createCode() 我有:
// Define the index mapping
EntityDefinition entDef = new EntityDefinition("uri", "text", RDFS.label.asNode()) ;
结果是:
-----------------------
| res | label |
=======================
| :T1 | "X0 X1 X2" |
| :T2 | "X10 X11 X12" |
| :B1 | "X1" |
-----------------------
但是,我报告说 X1 也包含在三元组中:
:B2 foaf:name "X1" .
但B2 不在结果集中。有人可能会说:“你必须定义一个索引”。嗯,很奇怪的是,如果我设置在createCode():
// Define the index mapping
EntityDefinition entDef = new EntityDefinition("blablabla", "blablabla", RDFS.label.asNode()) ;
结果不变!
那么,EntityDefinition 的作用是什么?
我做错了什么?
【问题讨论】:
-
您正在搜索字符串
'Text*'。我不确定如何处理正则表达式,但是当我查看您加载的the file 时,我什至没有看到字符串Text的任何出现。你为什么期待结果?我确实看到了foaf:name的值Dean Jackson的值。?about text:query ('Dean' 20)得到结果了吗? -
对不起,我最初是准备一个带有通用 RDF 文件的通用示例,但后来我决定放真正的代码。我更新问题!感谢您指出!
-
好的,里面还有
Johns。如果不使用*进行搜索,您会得到什么? -
此外,由于似乎需要提前提供一些configuration,如果您希望获得有用的回复,您可能也需要提供这些信息。这里还不足以重现您所看到的问题。
-
顺便说一句,我同意此组件的文档有些薄弱,我已提交 JENA-644 以跟踪改进
标签: java rdf jena text-search