【问题标题】:How to make Filter when querying turtle file using sparql使用 sparql 查询海龟文件时如何进行过滤
【发布时间】:2016-09-18 21:34:53
【问题描述】:

我应该提到我是语​​义网络世界的初学者。我的海龟文件具有以下结构:

@prefix ns0: <http://www.cws.org/ep/01#> .
@prefix dc: <http://purl.org/dc/terms/> .
@prefix gr: <http://purl.org/goodrelations/v1#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .    
#...
        <file:///C:/Users/Anis/Downloads/usdl-editor-master/usdl-editor-master/index.html#OSZwMOW5JiZTlJXb7>
          a ns0:GuaranteedState ;
          ns0:executionParameterType [
            a ns0:executionParameterType ;
            dc:description "Description Inpuuut" ;
            ns0:hasVariable <file:///C:/index.html#ekHCp7iFi1aEWM7QQ>

          ] ;
          dc:title "Input" .

        <file:///C:/index.html#ekHCp7iFi1aEWM7QQ>
          a ns0:Variable ;
          ns0:hasDefault [
            a gr:QuantitativeValue ;
            gr:hasValue "document.csv" ;
            gr:hasUnitOfMeasurement "csv"
          ] ;
          rdfs:label "test1" .
    #...

我正在尝试按dc:title = "Input" 过滤。

这是我的查询,我要添加什么?

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#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ns0: <http://www.cws.org/ep/01#>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX gr: <http://purl.org/goodrelations/v1#>
SELECT   *
WHERE   { 

          ?path  dc:title ?x

}

My query result 总是显示“@”.. 不知道是什么意思?

【问题讨论】:

    标签: sparql semantic-web apache-jena turtle-rdf


    【解决方案1】:

    如果完全匹配会得到你想要的,那么直接在三元组模式中指定,例如:

    SELECT ?path
    WHERE {
       ?path dc:title "Title" .
    }
    

    ..获取任何?pathdc:title 属性值为“Title”。例如,&lt;file:///C:/Users/Anis/Downloads/usdl-editor-master/usdl-editor-master/index.html#OSZwMOW5JiZTlJXb7&gt; 将在您的示例中匹配。

    如果匹配不准确,那么使用 FILTERregex() 应该可以工作。

    SELECT ?path
    WHERE {
       ?path dc:title ?x .
       FILTER regex(?x, "Title", "i")
    }
    

    ...匹配字符串中带有“Title”的任何dc:title 属性,忽略大小写。

    【讨论】:

    • 而不是正则表达式,我更喜欢"title" = lcase(?title) 不区分大小写。否则,如果文字标题包含在正则表达式模式中有意义的字符,那么您将进行比计划更多的匹配。例如,任何 .将匹配任何字符,$ 和 ^ 将匹配行尾等。
    • 第二个示例中的假设是他们正在寻找完全匹配,而不是不区分大小写的匹配。在这种情况下,它匹配任何带有“title”的字符串。
    • 如果假设“他们正在寻找完全匹配,而不是不区分大小写的匹配”,那么使匹配不区分大小写的 "i" flag 应该不 被包括在内。但即便如此,对于不区分大小写的包含匹配,contains(?x, "Title") 不是更清楚吗?同样,它避免了正则表达式匹配器的任何问题,例如字符串文字是否包含正则表达式有意义的字符,例如“.”。
    【解决方案2】:

    这只是一个想法,但我认为FILTER 子句可能是您需要的:

     FILTER(?x = "Input") 
    

    应该可以解决问题。

    【讨论】:

    • 问题已解决。我在结构文件中添加了@whatever(例如“@en”),然后在查询中添加了以下行:FILTER(?x = "Input"@en ) 这就是我的意思,在我的情况下,“@en”是必需的。
    【解决方案3】:

    问题已解决.. 在我的情况下,我必须将@whatever(例如“@en”)添加到我的结构文件中。然后我将此行添加到我的查询中:FILTER(?x =“Input”@en)。 以下是我的查询:

    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#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX ns0: <http://www.cws.org/ep/01#>
    PREFIX dc: <http://purl.org/dc/terms/>
    PREFIX gr: <http://purl.org/goodrelations/v1#>
    SELECT *
     WHERE { 
     ?path dc:title ?x .
    FILTER (?x = "Input"@en)
    }
    

    【讨论】:

    • 由于您问题中的示例数据不包含语言标签,因此这实际上并不能回答您提出的问题。
    • 虽然我的文件中没有“@sth..”,但查询结果显示总是以“@”结尾。此外,只是 FILTER (?x = "Input"@) 不起作用,所以在我的情况下,我在文件结构中添加了 "@en" 然后我应用了 FILTER (?x = "Input"@en) 并且它有效.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多