繁体   English   中英

使用Jena-2.5.7解析和查询OWL-S profile.owl文件

[英]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中, ardf: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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM