Java SPARQL的正则表达式
我已经下载了dbpedia“u quotationsbook.zip,其中包含dbpedia”u quotationsbook.nt三重存储 在这个三重洞里 主题为authornameJava SPARQL的正则表达式,java,rdf,sparql,apache-jena,Java,Rdf,Sparql,Apache Jena,我已经下载了dbpedia“u quotationsbook.zip,其中包含dbpedia”u quotationsbook.nt三重存储 在这个三重洞里 主题为authorname 谓词是“sameas” 对象是authorcode 我用JENA尝试了这个查询triplestore,简单的查询正在运行 现在我想要所有authorname与给定字符串部分匹配的authorcode。 所以我尝试了以下查询 select ?code where { FILTER regex(?name, "^R
谓词是“sameas”
对象是authorcode 我用JENA尝试了这个查询triplestore,简单的查询正在运行 现在我想要所有authorname与给定字符串部分匹配的authorcode。 所以我尝试了以下查询
select ?code
where
{
FILTER regex(?name, "^Rob") <http://www.w3.org/2002/07/owl#sameAs> ?code.
}
select?代码
哪里
{
过滤正则表达式(?name,“^Rob”)代码。
}
上述查询应返回authorname包含的所有authorcodes
“罗布”
我得到了以下例外
Exception in thread "main" com.hp.hpl.jena.query.QueryParseException: Encountered " "." ". "" at line 5, column 74.
Was expecting one of:
<IRIref> ...
<PNAME_NS> ...
<PNAME_LN> ...
<BLANK_NODE_LABEL> ...
<VAR1> ...
<VAR2> ...
"true" ...
"false" ...
<INTEGER> ...
<DECIMAL> ...
<DOUBLE> ...
<INTEGER_POSITIVE> ...
<DECIMAL_POSITIVE> ...
<DOUBLE_POSITIVE> ...
<INTEGER_NEGATIVE> ...
<DECIMAL_NEGATIVE> ...
<DOUBLE_NEGATIVE> ...
<STRING_LITERAL1> ...
<STRING_LITERAL2> ...
<STRING_LITERAL_LONG1> ...
<STRING_LITERAL_LONG2> ...
"(" ...
<NIL> ...
"[" ...
<ANON> ...
at com.hp.hpl.jena.sparql.lang.ParserSPARQL11.perform(ParserSPARQL11.java:102)
at com.hp.hpl.jena.sparql.lang.ParserSPARQL11.parse$(ParserSPARQL11.java:53)
at com.hp.hpl.jena.sparql.lang.SPARQLParser.parse(SPARQLParser.java:34)
at com.hp.hpl.jena.query.QueryFactory.parse(QueryFactory.java:148)
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:80)
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:53)
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:41)
at rdfcreate.NewClass.query(NewClass.java:55)
at rdfcreate.NewClass.main(NewClass.java:97)
线程“main”com.hp.hpl.jena.query.QueryParseException:遇到异常。“”在第5行第74列。
我期待的是:
...
...
...
...
...
...
“真的”。。。
“假”。。。
...
...
...
...
...
...
...
...
...
...
...
...
...
"(" ...
...
"[" ...
)
上面的查询为我提供了给定作者的代码
请在这方面帮助我您不能混合模式和过滤器。您必须首先使用三重模式绑定(即选择)
?名称
,然后过滤结果。Jena基本上会抱怨,因为您的SPARQL语法无效
现在,您可以运行下面的查询,但您的数据只包含dbpedia URI和quotationsbook URI之间的映射
PREFIX owl: <http://www.w3.org/2002/07/owl#>
select ?code
where
{
?author <name> ?name .
?author owl:sameAs ?code .
FILTER regex(?name, "^Rob")
}
因为dbpedia资源是,所以您可以做的是将名称三元组模式包装在
前缀owl:
前缀foaf:
选择?作者?代码
哪里
{
图表
{
?作者owl:sameAs?代码。
}
图表作者
{
作者姓名。
筛选器正则表达式(?名称“^Rob”)
}
}
下面是发生的事情
?author
视为图形名称,以便从web上下载?名称s,以Rob开头
底线是我刚刚给了你一个例子。你不能混合模式和过滤器。你必须首先使用三重模式绑定(即选择)
?名称,然后过滤结果。Jena基本上会抱怨,因为你的SPARQL语法无效
现在,您可以运行下面的查询,但您的数据只包含dbpedia URI和quotationsbook URI之间的映射
PREFIX owl: <http://www.w3.org/2002/07/owl#>
select ?code
where
{
?author <name> ?name .
?author owl:sameAs ?code .
FILTER regex(?name, "^Rob")
}
因为dbpedia资源是,所以您可以做的是将名称三元组模式包装在
前缀owl:
前缀foaf:
选择?作者?代码
哪里
{
图表
{
?作者owl:sameAs?代码。
}
图表作者
{
作者姓名。
筛选器正则表达式(?名称“^Rob”)
}
}
下面是发生的事情
从导入文件中获取作者和代码(SPARQL GUI导入到图形中)
将?author
视为图形名称,以便从web上下载
获取作者的姓名
过滤器?名称s,以Rob开头
根据您的SPARQL处理器(我正在使用),有两个重要的方面可以实现这一点
这是我得到的结果的屏幕截图。注意突出显示的设置和dbpedia请求的Fiddler日志
底线是我刚刚给了你一个例子。另外,sameAs
不用于查询比较,而是用于断言两个资源是相同的。你的意图是前者吗?我在上面的查询中引用了2.1节。由于我没有将sameAs用于查询比较目的,sameAs
也不用于查询比较,但要断言两个资源是相同的。您在这里的意图是前者吗?我参考了2.1节来编写上述查询。为了进行查询比较,我没有使用相同的查询。我通过更改和相应的IRI来检查上述查询,但没有结果,即QuerySolution.hasNext为false。您尝试过qu吗dbpedia_quotationsbook.nt上的erying?很抱歉,我在写上述内容时无法深入实际数据。似乎我做了错误的假设。我将更新我的问题,尽管它变得更复杂一些。Bugger,我的SPARQL GUI似乎有一些问题,因为我没有从图形作者
中获得任何匹配项>模式。请写下Jena是如何为您工作的。对不起,我恐怕无法进一步帮助您。我从未使用过Jena。您应该探索使用Jena执行联邦查询,我上面的示例应该会对您有所帮助。我通过更改和各自的IRI检查了上述查询,但没有结果,即QuerySolution.hasNext是false.你试过在dbpedia_quotationsbook.nt上查询吗?很抱歉,我在写上述内容时无法深入实际数据。似乎我做了错误的假设。我将更新我的问题,尽管它有点复杂,但我的SPARQL GUI似乎有一些问题,因为我没有从<代码中获得任何匹配项>GRAPH?作者
模式。请写下Jena是如何为您工作的。对不起,我恐怕无法进一步帮助您。我从未使用过Jena。您应该探索使用Jena执行联合查询,我上面的示例应该对您有所帮助。
FILTER regex(?author, "Rob")
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
select ?author ?code
where
{
GRAPH <file://path/to/dbpedia_quotationsbook.nt>
{
?author owl:sameAs ?code .
}
GRAPH ?author
{
?author <http://www.w3.org/2000/01/rdf-schema#label> ?name .
FILTER regex(?name, "^Rob")
}
}