问题描述
例如:“john@mora.org”是电子邮件地址,我想使用 SPARQL 从此电子邮件中提取 mora
这是我没有给出预期结果的方法:
BASE <http://timbl.org/foaf.rdf>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?work_place
FROM <http://timbl.org/foaf.rdf>
WHERE
{
<#timbl> foaf:kNows ?friend .
?friend foaf:name ?name .
?friend foaf:mBox ?mail .
BIND(REPLACE(STR(?mail),"^.*@","","i") as ?work_place) .
}
示例输入:
"john@mora.org"
预期结果:
"mora"
我收到的结果:
"mora.org"
解决方法
您的方法仅删除了您匹配的部分字符串,如果您还想匹配并删除另一个子字符串,您可以嵌套替换。像这样的东西应该可以工作。
BASE <http://timbl.org/foaf.rdf>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?work_place
FROM <>
WHERE
{ <#timbl> foaf:knows ?friend .
?friend foaf:name ?name ;
foaf:mbox ?mail
BIND(replace(replace(str(?mail),"^.*@","","i"),"\..*$","i") AS ?work_place)
}