[英]parsing and querying OWL-S profile.owl file using Jena-2.5.7
我在Eclipse上使用Jena查询服务配置文件Profile.owl
遇到问题,我使用以下查询:
String queryString =
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "
+ "PREFIX owl: <http://www.w3.org/2002/07/owl#> "
+ "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
+ "PREFIX service: <http://www.daml.org/services/owl-s/1.1/Service.owl#> "
+ "PREFIX profile: <http://www.daml.org/services/owl-s/1.1/Profile.owl#> "
+"SELECT ?service ?y WHERE { ?service <profile:profile> ?a ."
+"?a <service:presentedBy> ?b ."
+"?b <profile:serviceName> ?y .}";
服务配置文件的代码段如下所示:
<profile:Profile rdf:ID="AddServiceName">
<service:presentedBy rdf:resource="AddServicePresenter"/>
<profile:serviceName>"ser"</profile:serviceName>
根本没有结果。
简短的答案是数据看起来不像查询所期望的那样。 让我们看一下这个RDF / XML片段描述的图形:
<rdf:RDF xml:base="http://example.org/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:service="http://www.daml.org/services/owl-s/1.1/Service.owl#"
xmlns:profile="http://www.daml.org/services/owl-s/1.1/Profile.owl#">
<profile:Profile rdf:ID="AddServiceName">
<service:presentedBy rdf:resource="AddServicePresenter"/>
<profile:serviceName>"ser"</profile:serviceName>
</profile:Profile>
</rdf:RDF>
采用Turtle格式,与SPARQL的模式语言更加接近:
@prefix service: <http://www.daml.org/services/owl-s/1.1/Service.owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix profile: <http://www.daml.org/services/owl-s/1.1/Profile.owl#> .
<http://example.org/#AddServiceName>
a profile:Profile ;
profile:serviceName "\"ser\"" ;
service:presentedBy <http://example.org/AddServicePresenter> .
特别是,请注意,RDF / XML中与RDF图中的主题或对象相对应的元素可以使用其XML元素名称作为rdf:type
语句的简写。 因此<profile:Profile rdf:ID="x">…</profile:Profile>
表示资源<...#x>
具有rdf:type profile:Profile
。 在Turtle和SPARQL中, a
是rdf:type
的简写,因此<...#x> a profile:Profile
表示<...#x> rdf:type profile:Profile
。 <...#x>
的其他属性由元素的内容确定。 在这种情况下, <...#AddServiceName>
具有两个属性,一个属性用于service:presentedBy
,另一个属性用于profile:serviceName
。
要查找配置文件,其演示者和姓名,您需要一个查询,例如:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX service: <http://www.daml.org/services/owl-s/1.1/Service.owl#>
PREFIX profile: <http://www.daml.org/services/owl-s/1.1/Profile.owl#>
SELECT ?profile ?presenter ?name WHERE {
?profile a profile:Profile ;
service:presentedBy ?presenter ;
profile:serviceName ?name .
}
三重模式也可以用更详细的形式写成:
?profile rdf:type profile:Profile .
?profile service:presentedBy ?presenter .
?profile profile:serviceName ?name .
运行此查询将产生以下结果:
$ arq --query query.sparql --data data.rdf
-----------------------------------------------------------------------------------------------
| profile | presenter | name |
===============================================================================================
| <http://example.org/#AddServiceName> | <http://example.org/AddServicePresenter> | "\"ser\"" |
-----------------------------------------------------------------------------------------------
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.