我创建了一个包含以下内容的简单海龟文件 -
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<uri:uuid#1> rdfs:label "Communication"^^xsd:string .
<uri:uuid#2> rdfs:label "Communication" .
然后我在Big数据中加载了这个turtle文件。 在此之后,我运行了两个选择查询。第一个是 -
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?x ?name ?datatype
WHERE {
?x rdfs:label ?name .
FILTER (STRSTARTS(?name,"Comm"))
BIND(datatype(?name) as ?datatype)
}
这给出了以下结果 -
x name datatype
<uri:uuid#1> Communication xsd:string
<uri:uuid#2> Communication xsd:string
但是当我在FILTER中使用REGEX运行一个不同的查询时,就像这样 -
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?x ?name ?datatype
WHERE {
?x rdfs:label ?name .
FILTER (regex(?name, "^Comm"))
BIND(datatype(?name) as ?datatype)
}
结果是 -
x name datatype
<uri:uuid#2> Communication xsd:string
我期望SELECT查询得到相同的结果,因为在两种情况下“Communication”都是一个字符串。 你能告诉我为什么结果不同,是否适用于REGEX。如果是这样,那么在大数据中,如果字符串是“强类型”xsd:string,则REGEX不起作用。 任何帮助将不胜感激。
答案 0 :(得分:1)
好的,得到了解决方案。正则表达式实际上只适用于简单的无类型文字。要使正则表达式工作?名称需要包含在str()运算符周围。所以查询需要是 -
SELECT ?x ?name ?datatype
WHERE {
?x rdfs:label ?name .
FILTER (regex(str(?name), "^Comm"))
BIND(datatype(?name) as ?datatype)
}
这将带回两个三元组。