OWLS使用Jena解析文档解析

时间:2011-06-20 17:14:16

标签: java sparql jena

我在使用Jena解析OWLS文档(RDF)时遇到了问题。

该文件是OWLS Grounding,有一段我感兴趣的代码:

<grounding:WsdlAtomicProcessGrounding rdf:ID="wsdl_Grounding">  
 <grounding:owlsProcess rdf:resource="process"/>                             
  <grounding:wsdlOperation>    
   <grounding:WsdlOperationRef>
     <grounding:portType rdf:datatype="&xsd;#anyURI">&WSDL;#operationPort</grounding:portType>
     <grounding:operation rdf:datatype="&xsd;#anyURI">&WSDL;#operationPort</grounding:operation>
   </grounding:WsdlOperationRef>        
  </grounding:wsdlOperation>
  ...(the OWLS Grounding continues)

我想获取“portType”值,但是如果我尝试使用下一个SPARQL代码,我就没有结果。

PREFIX grounding: "http://www.daml.org/services/owl-s/1.2/Grounding.owl"
SELECT ?x y? 
WHERE  {
           ?x grounding:hasAtomicProcessGrounding/grounding:wsdlOperation/grounding:WsdlOperationRef/grounding:portType ?y
       };

我构建的所有查询都有效,除了这种具有链接属性的查询, 就我而言,链式属性是; wsdlOperation,WsdlOperationRef和portType。

提前致谢;)

3 个答案:

答案 0 :(得分:2)

您需要确保使用SPARQL 1.1语法。默认值为SPARQL 1.0,它不支持属性路径。使用接受com.hp.hpl.jena.query.Syntax参数的API调用,并传递syntaxSPARQL_11常量。

答案 1 :(得分:0)

你确定链式属性有效吗?如果你尝试拼写中间概念怎么办:

PREFIX grounding: "http://www.daml.org/services/owl-s/1.2/Grounding.owl"
SELECT ?x y? 
WHERE
{
  ?x grounding:hasAtomicProcessGrounding ?apg .
  ?apg grounding:wsdlOperation ?op .
  ?op grounding:WsdlOperationRef ?or .
  ?or grounding:portType ?y .
}

答案 2 :(得分:0)

感谢所有人,但我找到了解决方案。

我尝试了RobV的解决方案,但它不起作用,所以我开始用较少的条件重复查询,我发现使用以下查询Jena返回_:b0。

PREFIX grounding: "http://www.daml.org/services/owl-s/1.2/Grounding.owl" SELECT ?op WHERE { ?x grounding:hasAtomicProcessGrounding ?apg . ?apg grounding:wsdlOperation ?op }

我看到Jena将该值用于查询的下一部分?op grounding:WsdlOperationRef ?or .(使用?op == _:b0)并且找不到下一个属性。

但问题是,当我要求“接地:wsdlOperation”时,Jena会返回“ground:WsdlOperationRef”对象的引用,作为“_:b0”的对象,作为失败查询的下一部分的主题,所以我可以要求“接地:WsdlOperationRef”,因为这个元素是我之前获得的主题参考。

所以解决方案是下一个(没有“WsdlOperationRef”属性):

PREFIX grounding: "http://www.daml.org/services/owl-s/1.2/Grounding.owl" SELECT ?x y? WHERE { ?x grounding:hasAtomicProcessGrounding ?apg . ?apg grounding:wsdlOperation ?op. ?op grounding:portType ?y . }