OWLS Заземление разбора документа с Йеной - PullRequest
1 голос
/ 20 июня 2011

У меня проблема при синтаксическом анализе документа OWLS (RDF) с Jena.

Документ является Заземлением СОВ, есть интересующий меня код:

<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 ]

2 голосов
/ 21 июня 2011

Вы должны убедиться, что используете синтаксис SPARQL 1.1.По умолчанию используется SPARQL 1.0, который не поддерживает пути к свойствам.Используйте вызовы API, которые принимают параметр com.hp.hpl.jena.query.Syntax и передают константу syntaxSPARQL_11.

0 голосов
/ 21 июня 2011

Спасибо всем, но я нашел решение.

Я пробовал решение 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 }

И я вижу, что Джена использует это значение для следующей части запроса ?op grounding:WsdlOperationRef ?or . (с? Op == _: b0) и не находит следующее свойство.

Но проблема заключалась в том, что, когда я запрашиваю "grounding: wsdlOperation", Jena возвращает ссылку на объект "grounding: WsdlOperationRef", действующий "_: b0" как субъект для следующей части неудавшегося запроса, поэтому я могу не спрашивайте "Grounding: 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 . }

0 голосов
/ 20 июня 2011

Вы уверены, что цепные свойства работают?Что если вы попытаетесь изложить промежуточные понятия:

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 .
}
...