SPARQL查询DBLP

时间:2016-06-07 13:15:40

标签: sparql rdf

我正在运行此查询

SELECT *
WHERE
{
?s dc:creator ?name .
?s rdf:type swrc:Article .
FILTER regex(str(?name), "Jeffrey", "D.", "Ullman") .
}

我收到错误:

Encountered " "," ", "" at line 16, column 41.
Was expecting one of:
    <LANGTAG> ...
    <INTEGER_POSITIVE> ...
    <DECIMAL_POSITIVE> ...

这是怎么回事,我不符合准则吗?我搜索了一下,我在各个帖子中找到了相同的语法。

编辑:

当我要求

SELECT * WHERE { ?s rdf:type swrc:Article . ?s dc:creator ?name . }

我回来了: s name <http://dblp.l3s.de/d2r/resource/publications/conf/www/BeszteriV07> [http] <http://dblp.l3s.de/d2r/resource/authors/Istvan_Beszteri> [http]在一行中,其中第一个URI是?s,第二个是?name

现在我知道有一个名为“Jeffrey D. Ullman”的作者,我查询:

SELECT * WHERE { ?s rdf:type swrc:Article . ?s dc:creator ?name . FILTER regex(str(?name), "Jeffrey") } LIMIT 10

然后我回来举个例子: s name <http://dblp.l3s.de/d2r/resource/publications/conf/www/LimWPVA07> [http] <http://dblp.l3s.de/d2r/resource/authors/Jeffrey_Scott_Vitter> [http]

所以这里的问题是我如何能够匹配“Jeffrey D. Ullman”并查看他所写的所有文章。

2 个答案:

答案 0 :(得分:5)

您的正则表达式函数语法不正确,请参阅SPARQL1.1 spec。请注意,正则表达式只需要两个或三个参数,第一个是文本,第二个是模式,最后一个是包含标志的可选字符串。

  

17.4.3.14 REGEX

xsd:boolean  REGEX (string literal text, simple literal pattern) 
xsd:boolean  REGEX (string literal text, simple literal pattern, simple literal flags)

答案 1 :(得分:4)

关于SPARQL的一些背景研究是一个非常好的主意。只是为了指出这里的确切问题,正则表达式匹配正则表达式的字符串。以下是:

FILTER regex(str(?name), "Jeffrey D\\. Ullman") .

...将匹配“Jeffrey D. Ullman”。以下内容:

FILTER regex(str(?name), "Ullman") .

...将匹配“Jeffrey D. Ullman”以及?name中与“Ullman”的任何内容。这个过滤器:

FILTER regex(str(?name), "Ullman$") .

...将匹配任何以“Ullman”结尾的字符串。这个过滤器:

FILTER regex(str(?name), "^Jeffrey.*Ullman$") .

...将匹配以“Jeffrey”开头的任何字符串,以“Ullman”结尾,中间包含任何字符。

等等......