sparql - заменить тройку объединением троек - PullRequest
0 голосов
/ 03 декабря 2018

Ниже приведен простой запрос sparql от lubm.

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ub: <http://swat.cse.lehigh.edu/onto/univ-bench-dl.owl#>
SELECT ?X  ?Y1  ?Y2  ?Y3
WHERE
{?X rdf:type ub:Professor .}

И есть Map<String,List<String>>, который содержит некоторые данные подкласса, выведенные из SCHEMA, такие как

{
    "<http://swat.cse.lehigh.edu/onto/univ-bench-dl.owl#Professor>":[
        "<http://swat.cse.lehigh.edu/onto/univ-bench-dl.owl#Chair>",
        "<http://swat.cse.lehigh.edu/onto/univ-bench-dl.owl#Dean>",
        "<http://swat.cse.lehigh.edu/onto/univ-bench-dl.owl#AssistantProfessor>",
        ....
    ]
}

Я хочу заменить эту тройку ?X rdf:type ub:Professor . в этом запросе sparql наобъединение его подклассов, таких как:

{{{{?X a <http://swat.cse.lehigh.edu/onto/univ-bench-dl.owl#Professor>}
    UNION
   {?X a <http://swat.cse.lehigh.edu/onto/univ-bench-dl.owl#Chair>}
  }
   UNION
  {?X a <http://swat.cse.lehigh.edu/onto/univ-bench-dl.owl#Dean>}
 }
  UNION
 {?X a <http://swat.cse.lehigh.edu/onto/univ-bench-dl.owl#AssistantProfessor>}
}

, но я понятия не имею, как я могу сделать эту конкретную вещь.

Не могли бы вы предоставить мне некоторый код, чтобы сделать это в jena (Java)) ...?

Спасибо с благодарностью:)

1 Ответ

0 голосов
/ 03 декабря 2018

Я решил этот вопрос следующим образом:

Используйте данные подкласса, чтобы создать ElementUnion и добавить его к Element из query.

Query query = QueryFactory.read(queryFile);
ElementGroup element = (ElementGroup) query.getQueryPattern();
Triple pattern1 = Triple.create(Var.alloc("s1"), Var.alloc("p1"), Var.alloc("o1"));
Triple pattern2 = Triple.create(Var.alloc("s2"), Var.alloc("p2"), Var.alloc("o2"));
ElementTriplesBlock block1 = new ElementTriplesBlock(); 
ElementTriplesBlock block2 = new ElementTriplesBlock(); 
block1.addTriple(pattern1);                             
block2.addTriple(pattern2);                             
ElementUnion eu = new ElementUnion();
eu.addElement(block1);
eu.addElement(block2);
element.addElement(eu);

После того, как я понял, как создать ElementUnion, эта проблема была решена.

...