【问题标题】:SPARQL query DBLPSPARQL 查询 DBLP
【发布时间】:2016-06-07 13:15:39
【问题描述】:

我正在运行这个查询

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”并查看他写的所有文章。?

【问题讨论】:

  • 也许 Ullman 的 URI 没有 dc:creator 属性。你可以试试str(&lt;http://dblp.l3s.de/d2r/resource/authors/Jeffrey_D._Ullman&gt;
  • @scotthenninger 是的,我调查了你的建议,确实我得到了结果。谢谢

标签: sparql rdf


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:

    对 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”结尾的字符串,以及介于两者之间的任何字符。

    等等……

    【讨论】:

    • "Jeffrey D. Ullman") ... 将匹配“Jeffrey D. Ullman”。 它实际上会匹配很多内容,例如“Jeffrey DX Ullman”,等等,因为. 是正则表达式中的通配符。
    • 当然。已修复。
    • @chrisis 我会尽快编辑问题,以便向您展示我正在处理的全部问题。到目前为止,您的回答最有帮助
    • ` FILTER regex(str(?name), "Jeffrey D\\. Ullman") .` 返回 0 个结果
    • 可能取决于您的系统如何转义.。尝试单个反斜杠或查找正在使用的正则表达式语法。
    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2014-05-30
    • 2012-03-27
    • 2011-08-05
    相关资源
    最近更新 更多