SPARQL查询的确切语法取决于您的数据在RDF中的建模方式。让我们假设一类MyClass
的对象被表示为在RDF数据库如下,他们有一个name属性my:name
:
@prefix my: <http://example.org/my/> .
my:object1 a my:MyClass .
my:object1 my:name "object 1" .
查询找回在这个确切的时装模型中的所有对象,他们的名字会看像这样:
PREFIX my: <http://example.org/my/>
SELECT ?x ?name
WHERE {
?x rdf:type my:MyClass ;
my:name ?name .
}
SPARQL查询工作作为图模式匹配器:查询查找的三元匹配WHERE子句中指定的模式的任意组合:所以我们正在寻找˚F或两个三元组,其中一个表示rdf:type
财产的值为my:MyClass
,另一个表示具有相同主题的另一个三元组应该具有名为my:name
的属性,其中我们希望返回该值(绑定到变量?name
)。
正如您所见,它取决于您的特定RDF模型:在您的数据库中,类的名称(my:MyName
)和属性名称(my:name
)可能不同。因此,在编写可在您的特定情况下工作的查询之前,您需要了解如何将数据建模为RDF。
编辑作为一旁:SPARQL具有用于属性rdf:type
,这是a
的简化符号。所以位?x rdf:type my:MyClass
通常写为?x a my:MyClass
。我想强调一个事实,即您正在查询三元组/属性,这就是我使用实际属性名称的原因。
因为对于不同类型的对象,谓词(例如“name”)和对象(例如“Foo”)可以是相等的,所以我肯定需要将限制放在主语中。因此,类型信息只能在主题中找到。 – 2015-03-19 13:33:41
所以你已经知道在哪里看。只是在你的查询中,只要求所有不同的主题,然后你就知道你在找什么类型。 – Artemis 2015-03-19 13:37:51
Artemis:我的问题是关于SPARQL **语法**:我知道我想要什么,但我不知道如何在SPARQL中表达它。 – 2015-03-19 14:01:41