在Sparql查询中过滤不起作用

Rav*_*ish 3 rdf sparql

我正在对我的sparql端点之一运行sparql查询,该端点仅支持Sparql 1.0.
我试图使用以下查询从商店获取用户列表:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX tmp: <http://example.com/schema/temp#>
PREFIX resource: <http://example.com/2010/record/schema#>
Describe ?userURI
WHERE 
{
    ?userURI rdf:type resource:User.
    OPTIONAL
    {               
        ?userURI tmp:dataCleanupStatus ?cleanUpStatus.
        ?userURI tmp:lastDataCleanupDate ?cleanUpDate.                  
    }
    FILTER 
    ( 
        (!bound(?cleanUpStatus) || ?cleanUpStatus !="Running")
    )
                    FILTER(    
        (!bound(?cleanUpDate) || ?cleanUpDate < "2012-04-11" )
    )

}
Run Code Online (Sandbox Code Playgroud)

通过上面的查询,我试图获得用户,其中:

  1. 清理状态三元组不存在,或者状态不是"正在运行"
  2. clearnUpDate三元组不存在或小于指定日期.

它没有返回它应该返回的记录.
您可能会说我应该使用xsd函数,但是,它们仅在Sparql 1.1中受支持


请指教.
修改查询:


PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX tmp: <http://example.com/schema/temp#>
PREFIX resource: <http://example.com/2010/record/schema#>
Describe ?userURI
WHERE 
{
    ?userURI rdf:type resource:User.
    OPTIONAL
    {               
        ?userURI tmp:dataCleanupStatus ?cleanUpStatus.

    }

    OPTIONAL
    {               
        ?userURI tmp:lastDataCleanupDate ?cleanUpDate.                  
    }
    FILTER 
    ( 
        !bound(?cleanUpStatus) || ?cleanUpStatus !="Running"
    )
    FILTER
    (    
        !bound(?cleanUpDate) || ?cleanUpDate < "2012-04-11" 
    )

}
Run Code Online (Sandbox Code Playgroud)


cyg*_*gri 6

问题可能出在日期比较中,假设它存储为xsd:date原始数据中的类型文字.您无法将字符串与没有类型转换的日期进行比较.

有些事要尝试:

?cleanUpDate < "2012-04-11"^^xsd:date    # Compare against date
STR(?cleanUpDate) < "2012-04-11"         # Convert to string before comparison
Run Code Online (Sandbox Code Playgroud)

此外,根据数据的结构,您可能需要两个单独的OPTIONAL块用于?cleanUpStatus?cleanUpDate.

  • 仅作为记录,我的示例中使用的`xsd:date`类型文字是SPARQL 1.0的一部分并得到广泛支持.您可能正在考虑在SPARQL 1.1中添加的日期/时间操作和比较函数. (2认同)
  • 您不需要使用任何本体.它是RDF中的内置数据类型.你只需要声明`xsd`前缀,就是这样.如果您的问题是关于`xsd`前缀的名称空间URI,请在[prefix.cc](http://prefix.cc/)上查找. (2认同)