在大数据中使用REGEX过滤失败

时间:2014-07-28 14:27:41

标签: bigdata

我创建了一个包含以下内容的简单海龟文件 -

@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不起作用。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

好的,得到了​​解决方案。正则表达式实际上只适用于简单的无类型文字。要使正则表达式工作?名称需要包含在str()运算符周围。所以查询需要是 -

SELECT ?x ?name ?datatype
WHERE {
?x rdfs:label ?name .
FILTER (regex(str(?name), "^Comm"))
BIND(datatype(?name) as ?datatype)
}

这将带回两个三元组。