A Baseball Ontology in Jena RDF/OWL Format

Chih-Chau Ma (http://www.google.co.jp/search?hl=ja&q=A%20Baseball%20Ontology%20in%20Jena%20RDF%2FOWL%20Format&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja)

 

Abstract-野球の情報を効率よく記録したり、推論したりする野球オントロジーを提案する。オントロジーはOWLで書かれ、データはRDFで記録される。ルールと構造は野球のルールに基づいて作られる。オントロジーの推論をテストするいくつかの例を示す。

 

1.      INTRODUCTION

ゲームでは図1のようなデータを記録する。そのデータの多くは互いに関係がある。例えば、ホームランの時はヒットで打点(RBI)が付く(表にはホームランがない)。我々は、このデータベースに「このゲームで誰がホームランを打ちましたか?」なんて聞くことができる。

2.ONTOLOGY  STRCTURE

オントロジーは次の3つの要素から出来ている( (1)ゲーム構成、(2)プレーヤ、(3)ゲームイベント)図2。

A.ゲーム構成:ゲーム、イニング、半インニング、先攻(TopInning)、後攻(BottomInning)という3つのGameElementからできている。これらの要素間の関係は、Happensとその逆HappenInで表現される(Happenconsist ofHappenInconcist inという感じ)。

B.ゲームメンバー:TeamPlayergamememberに関係するクラスで、あるゲームは2つのチームを”HasTeam”で持つ(一方がHasHomeTeamで、他方が”HasVisitingTeam”となる)。TeamPlayerHasMemberBeMemberOfで繋がれる。Playerには背番号Numberだけが与えられ、ポジションは与えない。なぜならゲーム中に変わることがある。ポジションはPitchesなどのPlayer間の関係で表す。ただ、ピッチャーだけは例外である。

HasRBIHasHitVersusPitcherなど重要なデータは記録するが、記録しないものも多い。

C.ゲームイベント:Hit,Walk,Failなどのゲームイベントは全てBattingの下位クラスである。図2を見て推測せよ(論文を読む上で、細かな野球用語は知らなくて大丈夫)。

 

 

IV 推論

推論には次のようなデータを使う。

(1)   BaseballInf.javaJenaの関数を使ったメインプログラム

(2)   data.rdf:ゲームデータ群(ゲームのイニング、各回の表裏、チーム、選手、最初からのバッティング結果)で、RDF形式で記録。

(3)   schema.owl:図2のオントロジーをowlで書いたもの。

(4)   myrule.rule:推論規則

 

 

 

 

 

 

 


結果の一部

Test 1: “John”に関する全てのデータを出せ、という質問に対する応えの一部

Batting information:

( John, Bats, Batting0003 )

( John, Bats, Batting0008 )

( John, Bats, Batting0013 )

( John, HasHit, Batting0003 )

( John, HasHit, Top1_Game001 )

( John, HasHit, Inn1_Game001 )

( John, HasHit, Game001 )

( John, HasHomerun, Batting0003 )

( John, HasHomerun, Top1_Game001 )

( John, HasHomerun, Inn1_Game001 )

( John, HasHomerun, Game001 )

( John, HasRBI, Batting0003 )

( John, HasRBI, Top1_Game001 )

( John, HasRBI, Inn1_Game001 )

( John, HasRBI, Game001 )

( John, HomerunOn, Tom )

Pitching Informaion:

( John, Pitches, Bottom1_Game001 )

( John, Pitches, Bottom2_Game001 )

( John, Pitches, Bottom3_Game001 )

( John, Pitches, Inn1_Game001 )

     :

 

 

 

 

 

 

 

 

 

付録1:data.rdf

    <!—ゲームを定義 -->

    <rdf:Description rdf:about="&h;Game001">

        <rdf:type rdf:resource="&h;BaseballGame"/>

        <h:GameDate rdf:datatype="&xsd;date">2007-06-25</h:GameDate>

        <h:GameNumber rdf:datatype="&xsd;positiveInteger">1</h:GameNumber> 

    </rdf:Description>

<!—第一イニングを定義 -->

    <rdf:Description rdf:about="&h;Inn1_Game001">

        <rdf:type rdf:resource="&h;Inning"/>

        <h:HappenIn rdf:resource="&h;Game001"/>

    </rdf:Description>

       :

<!—1回表を定義 -->

    <rdf:Description rdf:about="&h;Top1_Game001">

        <rdf:type rdf:resource="&h;TopInning"/>

        <h:HappenIn rdf:resource="&h;Inn1_Game001"/>

    </rdf:Description>

       :

    <!—チームを定義 -->

    <rdf:Description rdf:about="&h;Lions">

        <rdf:type rdf:resource="&h;Team"/>

        <h:BeVisitingTeamIn rdf:resource="&h;Game001"/>

    </rdf:Description>

       :

    <!—選手を定義 -->

    <rdf:Description rdf:about="&h;Smith">

        <rdf:type rdf:resource="&h;Player"/>

        <h:BeMemberOf rdf:resource="&h;Lions"/>

        <h:Number rdf:datatype="&xsd;positiveInteger">45</h:Number>

    </rdf:Description>

       :

    <!—バッティングを定義 --> 

    <rdf:Description rdf:about="&h;Batting0001">

                            <rdf:type rdf:resource="&h;Double"/>

                            <h:HappenIn rdf:resource="&h;Top1_Game001"/>

                            <h:BattedBy rdf:resource="&h;Smith"/>

                            <h:Outs rdf:datatype="&xsd;nonNegativeInteger">0</h:Outs>

                            <h:RBI rdf:datatype="&xsd;nonNegativeInteger">0</h:RBI>

                            <h:Runs rdf:datatype="&xsd;nonNegativeInteger">0</h:Runs>

    </rdf:Description>

        :

 

付録2:

    <!-- game structureのクラス -->

    <owl:Class rdf:about="&h;BaseballGame"/>

    <owl:Class rdf:about="&h;Inning"/>

    <owl:Class rdf:about="&h;HalfInning"/>

    <owl:Class rdf:about="&h;TopInning">

        <rdfs:subClassOf rdf:resource="&h;HalfInning" />   

    </owl:Class>

 

    <owl:Class rdf:about="&h;BottomInning">

        <rdfs:subClassOf rdf:resource="&h;HalfInning" />   

    </owl:Class>

        :

    <!-- game event (the batting result)のクラス -->

   

    <owl:Class rdf:about="&h;Hit">

        <rdfs:subClassOf rdf:resource="&h;Batting" />   

    </owl:Class>

    <owl:Class rdf:about="&h;Fail">

        <rdfs:subClassOf rdf:resource="&h;Batting" /> 

         :

    <!-- game structureのプロパティ -->

    <owl:DatatypeProperty rdf:about="&h;GameDate">

        <rdfs:domain rdf:resource="&h;BaseballGame" />   

        <rdfs:range  rdf:resource="&xsd;date"/>

    </owl:DatatypeProperty>

    <owl:DatatypeProperty rdf:about="&h;GameNumber">

        <rdfs:domain rdf:resource="&h;BaseballGame" />    

        <rdfs:range  rdf:resource="&xsd;positiveInteger"/>

    </owl:DatatypeProperty>

         :

    <!—クラス間のプロパティ -->

    <owl:ObjectProperty rdf:about="&h;Happens" >

        <rdf:type rdf:resource="&owl;TransitiveProperty" />

    </owl:ObjectProperty>

    <owl:ObjectProperty rdf:about="&h;HappenIn">

        <owl:inverseOf rdf:resource="&h;Happens"/>

        <rdf:type rdf:resource="&owl;TransitiveProperty" />

    </owl:ObjectProperty>

         :

 

付録3:myrule.rule:以下のようなものが並んでいる。?が付く単語は変数を表す(Prologの大文字に相当)。

 

[Pitches_Infer2: (?pitcher h:PitchesDuring ?event)

                                               -> (?pitcher h:Pitches ?event)]

                                                                      

[PitchesDuring_Infer:

                (?pitcher h:PitchesDuring ?game) (?game rdf:type h:BaseballGame)

                  (?pitcher h:BeMemberOf ?team) (?team h:BeHomeTeamIn ?game)

                         (?game h:Happens ?event) (?event rdf:type h:TopInning)

è     (?pitcher h:PitchesDuring ?event)]

è    

è      

例えば

誰がホームランを打ったかを推論するルール:

[HasHomerun_Infer: (?batter h:Bats ?batting) (?batting rdf:type h:Homerun)

è     (?batter h:HasHomerun ?batting)]

 

例えば、Johnに関して聞けば、( John, HasHomerun, Batting0003 )と答える(表1参照)。

 

次は、誰がいつホームランを打ったかに答える推論ルール:

                                                                      

[HasHomerun_Infer2: (?batter h:HasHomerun ?event1) (?event1 h:HappenIn ?event2)

                                         -> (?batter h:HasHomerun ?event2)]

答えは、Table1

( John, HasHomerun, Top1_Game001 )

( John, HasHomerun, Inn1_Game001 )

( John, HasHomerun, Game001 )

である。