sparql 正则表达式 文件扩展

sparql regex file extension

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

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

虽然我的正则表达式 (.*\.(\w+) 出错了。

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

但是我的表达在我的 Regex 101

中有效

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

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

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

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

诚然丑陋。正在修复。