我设置了一个Sesame(openrdf.org)服务器并尝试通过Java API访问它。
出于测试目的,我使用了维基百科的一个非常简单的例子:
<?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>
Sesame工作台上的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")
)
}
返回出版商“维基百科 - DiefreieEnzyklopä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:about的URL。我也尝试过不同的变体,比如“dc:title”而不是“title”,但我得不到任何结果。
我已经在网上搜索并阅读了大量文档。但不知何故,我并没有真正得到SERQL语法。
你有指针给我吗? 我如何获得特定出版商的所有头衔?
非常感谢!
答案 0 :(得分:0)
首先,SeRQL manual中有一个完整的Sesame user documentation,这样可以帮助您了解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}
形式的三重模式。