它通常更容易理解SPARQL查询应该是什么样子,如果你第一次把数据转换成龟,它有非常相似的SPARQL语法。这是你的数据是什么乌龟:
@prefix DOL: <http://www.MyOnt.com/something/v1#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix DC: <http://purl.org/dc/dcmitype/> .
<http://www.MyOnt.com/something/data/MyDomain>
DOL:domainName "MyDomainValue2" , "MyDomainValue" .
<http://www.MyOnt.com/something/data/MyJavaClass>
DOL:belongsTo <http://www.MyOnt.com/something/data/MyDomain> ;
DOL:hasMethod <http://www.MyOnt.com/something/data/MyMethod> ;
foaf:name "MyJavaClass" .
<http://www.MyOnt.com/something/data/MyMethod>
DOL:returnType "MethodReturnType" .
一旦你做到了这一点,查询看起来几乎完全一样的数据,除了与它的变量。这里唯一的问题是,既然你正在寻找域和方法,你需要使用联合(假设你想将域和方法绑定为不同的变量)。
prefix DOL: <http://www.MyOnt.com/something/v1#>
prefix foaf: <http://xmlns.com/foaf/0.1/>
select ?domain ?method {
?class foaf:name "MyJavaClass" .
{ ?class DOL:belongsTo ?domain }
union
{ ?class DOL:hasMethod ?method }
}
---------------------------------------------------------------------------------------------------
| domain | method |
===================================================================================================
| <http://www.MyOnt.com/something/data/MyDomain> | |
| | <http://www.MyOnt.com/something/data/MyMethod> |
---------------------------------------------------------------------------------------------------
如果你愿意有绑定到同一个可变域和方法,你可以使用一个交替属性路径选择要么域或方法:
prefix DOL: <http://www.MyOnt.com/something/v1#>
prefix foaf: <http://xmlns.com/foaf/0.1/>
select ?domainOrMethod {
?class foaf:name "MyJavaClass" ;
DOL:belongsTo|DOL:hasMethod ?domainOrMethod
}
--------------------------------------------------
| domainOrMethod |
==================================================
| <http://www.MyOnt.com/something/data/MyDomain> |
| <http://www.MyOnt.com/something/data/MyMethod> |
--------------------------------------------------
作为另一种替代方法,您可以使用值块来指定要遵循的属性(hasMethod或属于关联),在这种情况下,你可以为了选择最好知道你有哪种类型的值:
prefix DOL: <http://www.MyOnt.com/something/v1#>
prefix foaf: <http://xmlns.com/foaf/0.1/>
select ?property ?value {
values ?property { DOL:belongsTo DOL:hasMethod }
?class foaf:name "MyJavaClass" ;
?property ?value
}
------------------------------------------------------------------
| property | value |
==================================================================
| DOL:belongsTo | <http://www.MyOnt.com/something/data/MyDomain> |
| DOL:hasMethod | <http://www.MyOnt.com/something/data/MyMethod> |
------------------------------------------------------------------
,我看主要是,很多人在这里做的问题不要试图首先学习或理解至少一些SPARQL基础知识。从你身边做出很多努力和出色的工作,但我不认为下一个查询可以由他们自己编写。 – AKSW
@Joshua:谢谢你的详细解释。它确实帮了很多忙。我的目标是显示域值和返回类型。我修改了您的查询并获得了期望的结果。事实上,我保持你的查询相同,并增加了两个变量“dValues”和“rType”。它工作正常,但我只是不明白,我必须使用不同的变量为上述两个变量:这是一个代码片段: '{?class2 DOL:domainName?dValues}' 它的工作原理我使用“class2”,但不适用于“class”。它看起来像“类”已经定义,这有冲突吗? – Viki