SPARQL查询DBLP

SPARQL查询DBLP,sparql,rdf,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_

我正在运行此查询

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> ...
在第16行第41列遇到“,”。
我期待的是:
...
...
...
这是怎么回事,我是不是不符合指引?我四处搜索了一下,在不同的帖子中发现了相同的语法

编辑:

当我要求

选择*
哪里
{
?s rdf:类型swrc:物品。
?s dc:创建者?名称。
}

我回来了:
s名称
[http][http]
在一行中,第一个URI是
?s
,第二个URI是
?name

现在我知道了一个事实,有一位名叫“Jeffrey D.Ullman”的作者,我想问:

选择*
哪里
{
?s rdf:类型swrc:物品。
?s dc:创建者?名称。
过滤正则表达式(str(?name),“Jeffrey”)
}
限制10

然后我回来,例如:
s名称
[http][http]


因此,这里的问题是,我如何才能匹配“Jeffrey D.Ullman”并查看他所写的所有文章?

您的正则表达式函数语法不正确,请参见。请注意,regex只接受两个或三个参数,第一个是文本,第二个是模式,最后一个是包含标志的可选字符串


对SPARQL进行一些背景研究是一个非常好的想法。这里只想指出确切的问题,正则表达式将字符串与正则表达式进行匹配。因此,以下是:

FILTER regex(str(?name), "Jeffrey D\\. Ullman") .
FILTER regex(str(?name), "Ullman") .
…将与“Jeffrey D.Ullman”匹配。以下是:

FILTER regex(str(?name), "Jeffrey D\\. Ullman") .
FILTER regex(str(?name), "Ullman") .
…将匹配“Jeffrey D.Ullman”以及
?name
中带有“Ullman”的任何内容。此筛选器:

FILTER regex(str(?name), "Ullman$") .
FILTER regex(str(?name), "^Jeffrey.*Ullman$") .
…将匹配任何以“Ullman”结尾的字符串。这个过滤器:

FILTER regex(str(?name), "Ullman$") .
FILTER regex(str(?name), "^Jeffrey.*Ullman$") .
…将匹配以“Jeffrey”开头、以“Ullman”结尾的任何字符串以及介于两者之间的任何字符


等等……

“杰弗里·D·厄尔曼”)。。。将匹配“杰弗里·D·厄尔曼”。它实际上会匹配很多东西,比如“Jeffrey DX Ullman”,等等,因为
在regex中是一个通配符。回复已修复。@chrisis我将尽快编辑问题,以便向您展示我正在处理的全部问题。到目前为止,您的答案非常有用` FILTER regex(str(?name),“Jeffrey D\\\.Ullman”)`返回0结果可能取决于系统如何转义
。请尝试使用单个反斜杠或查找正在使用的正则表达式语法。可能Ullman的URI没有
dc:creator
属性。你可以试试str(@scottenninger是的,我调查了你的建议,确实得到了结果。谢谢