Rdf 通过正则表达式查询主语或谓词

Rdf 通过正则表达式查询主语或谓词,rdf,sparql,Rdf,Sparql,鉴于此RDF: ]> 苹果 当我执行这个SPARQL查询时 SELECT * WHERE { ?s ?p ?o . FILTER (regex(?o, 'Apple','i')) } 我得到主语和谓语: s: http://example.org/Fadi , p: http://example.org/eat . 但当我执行 SELECT * WHERE { ?s ?p ?o . FILTER (regex(?s, 'Fadi','i')) } 或 我什么也得不到。

鉴于此RDF:


]>
苹果
当我执行这个SPARQL查询时

SELECT *
WHERE {
  ?s ?p ?o . 
  FILTER (regex(?o, 'Apple','i'))
}
我得到主语和谓语:

s: http://example.org/Fadi , p: http://example.org/eat .
但当我执行

SELECT *
WHERE {
  ?s ?p ?o .
  FILTER (regex(?s, 'Fadi','i'))
}

我什么也得不到。如何查询主语或谓语?
如何查询
startTime
endTime

?s是一个URI,regex用于字符串。使用str函数获取字符串:

FILTER (regex(str(?s), 'Fadi','i'))
用于查询文本值,而不是用于与资源IRI匹配。您可以使用该函数获取资源的IRI,因此您的筛选器如下所示

FILTER (regex( str( ?s ), 'http://example.org/Fadi','i'))
但你真的不想在这里这么做。因为您希望检索表单的三元组

<http://example.org/Fadi> ?p ?o
这些属性值需要由
rdf:Description
元素中的元素指定。我不认为
xml:startTime
xml:endTime
是有意义的属性;不管这里的开始时间和结束时间是什么意思,它们可能应该由不同的属性指定,但这是一个建模问题,而不是语法问题。无论如何,我们可以相应地调整输入文件以获得(使用
xml:base
xml:(开始|结束)时间
元素):


]>
苹果
00:01:38
00:01:39
现在,当我们运行查询时,我们得到

$ /usr/local/lib/apache-jena-2.10.0/bin/arq --data fadi.rdf --query fadi.sparql 
------------------------------------------------------------------------------------------------
| s                             | p                                               | o          |
================================================================================================
| <http://www.example.org/Fadi> | <http://www.w3.org/XML/1998/namespaceendTime>   | "00:01:39" |
| <http://www.example.org/Fadi> | <http://www.w3.org/XML/1998/namespacestartTime> | "00:01:38" |
| <http://www.example.org/Fadi> | ex:eat                                          | "Apple"    |
------------------------------------------------------------------------------------------------
产生

$ /usr/local/lib/apache-jena-2.10.0/bin/arq --data fadi.rdf --query fadi.sparql 
---------------------------
| start      | end        |
===========================
| "00:01:38" | "00:01:39" |
---------------------------

D是的,这就是我需要的。但我仍然需要知道如何通过查询获得开始时间和结束时间。我必须在电影中使用startTime。再次感谢你。。谢谢你@Joshua Tayloriam在我尝试加载rdf文件时使用了c#dotnetrdf。这让我感到惊讶:无法解析此RDF/XML,因为System.XML无法解析文档,请参阅内部异常以了解详细信息。您能帮助我吗@约书亚Taylor@HasanSarraj这听起来是另一个问题。我没有C#方面的经验,但是如果你在这个网站上发布一个单独的问题,你可能会得到一些答案。选择*WHERE{{s?p?o.FILTER(regex(str(?s),')}UNION{GRAPH?g{s?p?o}}我得到的答案不仅仅是subject=Fadi。“有什么问题吗?”HasanSarraj这真的是一个单独的问题。我希望过滤器只适用于联合体中的左侧模式,而联合体中包含
?s?p?o
的右侧模式将捕获所有内容。
PREFIX ex: <http://example.org/>
SELECT * 
WHERE {
 ex:Fadi ?p ?o .
}
$ arq --data fadi.rdf --query fadi.sparql 
12:13:21 WARN  riot                 :: {W118} XML attribute: xml:startTime is not known and is being discarded.
12:13:21 WARN  riot                 :: {W118} XML attribute: xml:endTime is not known and is being discarded.
----------------------------------------------------
| s                             | p      | o       |
====================================================
| <http://www.example.org/Fadi> | ex:eat | "Apple" |
----------------------------------------------------
$ /usr/local/lib/apache-jena-2.10.0/bin/arq --data fadi.rdf --query fadi.sparql 
------------------------------------------------------------------------------------------------
| s                             | p                                               | o          |
================================================================================================
| <http://www.example.org/Fadi> | <http://www.w3.org/XML/1998/namespaceendTime>   | "00:01:39" |
| <http://www.example.org/Fadi> | <http://www.w3.org/XML/1998/namespacestartTime> | "00:01:38" |
| <http://www.example.org/Fadi> | ex:eat                                          | "Apple"    |
------------------------------------------------------------------------------------------------
PREFIX ex: <http://www.example.org/>
PREFIX xml: <http://www.w3.org/XML/1998/namespace>
SELECT *
WHERE {
  ex:Fadi xml:startTime ?start ;
          xml:endTime ?end .
}
$ /usr/local/lib/apache-jena-2.10.0/bin/arq --data fadi.rdf --query fadi.sparql 
---------------------------
| start      | end        |
===========================
| "00:01:38" | "00:01:39" |
---------------------------