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
诚然丑陋。正在修复。
我正在尝试开发一个 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
诚然丑陋。正在修复。