2010-11-30 60 views
1

我设置了一个Sesame(openrdf.org)服务器并尝试通过Java API访问它。不理解SERQL查询

出于测试目的,我使用了一个非常简单的例子,从维基百科:

<?xml version="1.0" encoding="UTF-8" ?> 
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:dc="http://purl.org/dc/elements/1.1/"> 
    <rdf:Description rdf:about="http://de.wikipedia.org/wiki/Resource_Description_Framework"> 
<dc:title>Resource Description Framework</dc:title> 
<dc:publisher>Wikipedia - Die freie Enzyklopädie</dc:publisher> 
</rdf:Description> 
</rdf:RDF> 

<?xml version="1.0" encoding="UTF-8" ?> 
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
     xmlns:dc="http://purl.org/dc/elements/1.1/"> 
    <rdf:Description rdf:about="http://de.wikipedia.org/wiki/Resource_Description_Framework"> 
    <dc:title>Resource Description Framework 2</dc:title> 
    <dc:publisher>Wikipedia - Die freie Enzyklopädie</dc:publisher> 
    </rdf:Description> 
</rdf:RDF> 

在芝麻工作台SPARQL查询按预期工作:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX dc: <http://purl.org/dc/elements/1.1/> 
SELECT ?title 
WHERE{ 
?res dc:publisher ?pub . 
?res dc:title ?title 

FILTER (
sameTerm(?pub, "Wikipedia - Die freie Enzyklopädie") 
) 
} 

返回出版商“维基百科 - Die freieEnzyklopädie”的所有标题。

现在对于Java API,我尝试将此示例转换为SERQL。

我尝试以下查询:

SELECT title 
FROM {title} dc:publisher {"Wikipedia - Die freie Enzyklopädie"} 
USING NAMESPACE 
rdf = <http://www.w3.org/1999/02/22-rdf-syntax-ns#>, 
dc = <http://purl.org/dc/elements/1.1/> 

但这返回所有数据,而不是冠军,但对于RDF的网址:约。我也尝试过不同的变体,比如“dc:title”而不是“title”,但我根本没有得到任何结果。

我已经在网上查了很多文档。但不知何故,我真的没有得到SERQL语法。

你有一些指针吗? 如何从特定发布商那里获取所有标题?

非常感谢!

回答

0

首先,Sesame user documentation中有一个完整的SeRQL manual,所以这应该有助于您理解SeRQL的语法。

至于您的具体查询,问题在于您的SeRQL查询询问与您之前提供的SPARQL查询不同的内容。我不会去考虑太多细节,但是你的SPARQL查询SeRQL当量将是:

SELECT title 
FROM {res} dc:publisher {"Wikipedia - Die freie Enzyklopädie"}; 
      dc:title {title} 
USING NAMESPACE 
rdf = <http://www.w3.org/1999/02/22-rdf-syntax-ns#>, 
dc = <http://purl.org/dc/elements/1.1/> 

SeRQL代表形式{subject} predicate {object}三重模式。