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是的,我调查了你的建议,确实得到了结果。谢谢