【问题标题】:Filtering using REGEX failing in Big Data在大数据中使用 REGEX 过滤失败
【发布时间】:2014-07-28 14:27:40
【问题描述】:

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

@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" .

然后我在大数据中加载了这个海龟文件。 在此之后,我运行了两个选择查询。第一个是-

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 查询的结果相同,因为在这两种情况下,“通信”都是一个字符串。 你能告诉我为什么结果不同吗,是不是正则表达式。如果是这样,那么在大数据中,如果字符串是“强类型”xsd:string,那么 REGEX 就不起作用。 任何帮助将不胜感激。

【问题讨论】:

    标签: bigdata


    【解决方案1】:

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

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

    这将带回两个三元组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 2017-09-27
      • 2021-03-15
      相关资源
      最近更新 更多