私はかなり単純な SPARQL SELECT および CONSTRUCT クエリを実行できます。また、Jena の SimpleSelector を使用して Jena モデルからステートメントを取得しました。しかし、結果に対して多くの後処理を行わずに Jena モデルにクエリを実行する最善の方法についてはよくわかりません。
リーグに参加しているチームの Dave という名前のプレーヤーのチーム カラーとプレーヤー スコアを見つけたいと考えています。
SPARQL SELECT クエリを使用すると、リーグのチームの色と Dave という選手のスコアを別々に見つけることができますが、同じクエリで両方を指定して明確な結果を返すにはどうすればよいでしょうか?
次のオントロジーを使用しています。
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
<!ENTITY stackont "http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#" >
]>
<rdf:RDF xmlns="http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#"
xml:base="http://www.semanticweb.org/id117167/ontologies/2013/9/stackont"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:stackont="http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<owl:Ontology rdf:about="http://www.semanticweb.org/id117167/ontologies/2013/9/stackont"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Object Properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#hasPlayer -->
<owl:ObjectProperty rdf:about="&stackont;hasPlayer">
<rdfs:range rdf:resource="&stackont;Player"/>
<rdfs:domain rdf:resource="&stackont;Team"/>
</owl:ObjectProperty>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Data properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#PlayerName -->
<owl:DatatypeProperty rdf:about="&stackont;PlayerName">
<rdfs:domain rdf:resource="&stackont;Player"/>
<rdfs:range rdf:resource="&xsd;string"/>
<rdfs:subPropertyOf rdf:resource="&owl;topDataProperty"/>
</owl:DatatypeProperty>
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#PlayerScore -->
<owl:DatatypeProperty rdf:about="&stackont;PlayerScore">
<rdfs:domain rdf:resource="&stackont;Player"/>
<rdfs:range rdf:resource="&xsd;double"/>
<rdfs:subPropertyOf rdf:resource="&owl;topDataProperty"/>
</owl:DatatypeProperty>
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#TeamCategory -->
<owl:DatatypeProperty rdf:about="&stackont;TeamCategory">
<rdfs:domain rdf:resource="&stackont;Team"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#TeamColor -->
<owl:DatatypeProperty rdf:about="&stackont;TeamColor">
<rdfs:domain rdf:resource="&stackont;Team"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#Player -->
<owl:Class rdf:about="&stackont;Player">
<owl:disjointWith rdf:resource="&stackont;Team"/>
</owl:Class>
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#Team -->
<owl:Class rdf:about="&stackont;Team"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Individuals
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#Player1a -->
<owl:NamedIndividual rdf:about="&stackont;Player1a">
<PlayerScore>500</PlayerScore>
<PlayerName>Bob</PlayerName>
</owl:NamedIndividual>
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#Player1b -->
<owl:NamedIndividual rdf:about="&stackont;Player1b">
<PlayerScore>100</PlayerScore>
<PlayerName>Dave</PlayerName>
</owl:NamedIndividual>
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#Player2a -->
<owl:NamedIndividual rdf:about="&stackont;Player2a">
<PlayerScore>75</PlayerScore>
<PlayerName>Steve</PlayerName>
</owl:NamedIndividual>
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#Player2b -->
<owl:NamedIndividual rdf:about="&stackont;Player2b">
<PlayerName>Jack</PlayerName>
<PlayerScore>200</PlayerScore>
</owl:NamedIndividual>
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#Team1 -->
<owl:NamedIndividual rdf:about="&stackont;Team1">
<TeamColor>red</TeamColor>
<TeamCategory>league</TeamCategory>
<hasPlayer rdf:resource="&stackont;Player1a"/>
<hasPlayer rdf:resource="&stackont;Player1b"/>
</owl:NamedIndividual>
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#Team2 -->
<owl:NamedIndividual rdf:about="&stackont;Team2">
<TeamCategory>division</TeamCategory>
<TeamColor>blue</TeamColor>
<hasPlayer rdf:resource="&stackont;Player2a"/>
<hasPlayer rdf:resource="&stackont;Player2b"/>
</owl:NamedIndividual>
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#Team3 -->
<owl:NamedIndividual rdf:about="&stackont;Team3">
<TeamColor>green</TeamColor>
<TeamCategory>league</TeamCategory>
<hasPlayer rdf:resource="&stackont;Player3a"/>
</owl:NamedIndividual>
<!-- http://www.semanticweb.org/id117167/ontologies/2013/9/stackont#Player3a -->
<owl:NamedIndividual rdf:about="&stackont;Player3a">
<PlayerName>Dave</PlayerName>
<PlayerScore>125</PlayerScore>
</owl:NamedIndividual>
</rdf:RDF>