我在使用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。
提前致谢;)
答案 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 .
}