【问题标题】:sparql regex file extensionsparql 正则表达式 文件扩展名
【发布时间】:2018-08-30 21:35:43
【问题描述】:

我正在尝试开发一个 SPARQL 查询来捕获 RDF 对象中的文件扩展名。

SELECT DISTINCT
*
WHERE { 
    ?s <http://URI/identifier> ?o .
    BIND(REPLACE(?o,".*\.(\w+)", "$1") AS ?filetype)
} LIMIT 10

我的正则表达式 (.*\.(\w+) 出现错误。

MALFORMED QUERY: Lexical error at line 5, column 25.  Encountered: "." (46), after : "\".*\\"

但是我的表达方式在我的Regex 101中起作用

我需要转义哪些字符以及如何转义?

【问题讨论】:

  • 您的REPLACE 缺少参数。你不是说模式匹配应该被替换为 by

标签: regex xpath sparql


【解决方案1】:

从错误消息中我猜您正在使用 RDF4J 控制台或工作台。在这些工具中转义 SPARQL 正则表达式的特殊字符存在一个未解决的问题。见https://github.com/eclipse/rdf4j-tools/issues/72

有一种解决方法,不仅是像 Tim 在他的回答中建议的那样,将反斜杠加倍,而是为每个特殊字符使用 4 个反斜杠。您还需要在 REPLACE 中添加第三个参数以使其合法(假设您只想保留扩展名):

SELECT DISTINCT
*
WHERE { 
    ?s <http://URI/identifier> ?o .
    BIND(REPLACE(?o,".*\\\\.(\\\\w+)", "$1") AS ?filetype)
} LIMIT 10

诚然丑陋。正在进行修复。

【讨论】:

    猜你喜欢
    • 2010-09-19
    • 2013-03-18
    • 1970-01-01
    • 2010-12-21
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    相关资源
    最近更新 更多