我有一个IRI,在IRI中有一个斜线:
示例三重
:name/name1 :hasCity :City.我要找到所有有斜杠的名字。
我尝试过这个查询:
select ?name {?name ?pred ?obj FILTER regex(str(?name),"/")}这给了我所有的名字,即使他们没有/
我试过:
select ?name {?name ?pred ?obj FILTER regex(str(?name),"//")}这也给了我所有的名字,包括那些没有/
我试过:
select ?name {?name ?pred ?obj FILTER regex(str(?name),"\/")}为此,我得到了错误:在'"\‘处有一个简短的双引号字符串中的错误转义序列
是否有正确的方法使"/“只出现在IRI前缀之后的部分中?
后续问题:是否有一种方法可以查询这些名称而不引发sparql错误?
发布于 2017-03-02 13:00:41
大多数“典型的”虹膜中至少会有两个斜线(例如,在http://),中,但并不是所有的都是这样的)(例如,urn:ex:foo),所以不会有一种通用的方法来做到这一点。但是,如果您主要使用的是“典型”虹膜,那么您只需使用一个正则表达式,在双斜杠之后查找斜杠,比如"//.*/"。例如:
select ?name {
values ?name { <urn:ex:foo> #-- no slash, but won't match
<http://example.org> #-- no slash
<http://example.org/foo> #-- a slash
}
filter regex(str(?name), "//.*/")
} ----------------------------
| name |
============================
| <http://example.org/foo> |
----------------------------发布于 2017-03-01 14:46:33
示例三重 名称/名称1:城市:城市。 我尝试过这个查询: 选择?name {?name ?pred ?obj筛选器regex(str(?name),"/")} 这给了我所有的名字,即使他们没有/
这个答案几乎肯定是正确的,但并不明显,因为你看的是缩写的名字。
尝试以下几点:
select (str(?name) as ?fullname) {?name ?pred ?obj FILTER regex(str(?name),"/")}这将确保像regex所看到的那样显示对象的名称。我的猜测是,您的所有对象都启动了http://或类似的URI,它们显然是匹配的。
发布于 2022-03-18 17:35:40
例如,可以用反斜杠转义斜杠:
PREFIX mdb: <http://example.org/movieDB/>
PREFIX country: <http://example.org/movieDB/country/>
BASE <http://example.org/movieDB/>
construct {
?s ?p ?o
}
where {
?s ?p ?o .
?s mdb:country mdb:country\/France .
}https://stackoverflow.com/questions/42531816
复制相似问题