1

最近、Jena を使用して RDF を作成し、クエリを作成するセマンティック Web にアプローチしようとしています。これで、Jena でフクロウ ベースの RDF ファイルを作成できました。しかし、異なるオントロジー (cidoc-crm など) を使用しようとすると、それらのオントロジーを Jena にインポートする方法がわかりません。それらをJenaにインポートする方法を知っている人はいますか? 新しいオントロジー モデルを作成する必要がありますか?

4

1 に答える 1

3

Jena のOntModelインターフェースは、オントロジー (RDFS オントロジーを含む) を操作する便利な方法を提供します。次のコードは、オントロジーのデータを含む OntModel を取得する方法を示しています。このコードでは、作成した CIDOC モデルを含む推論サポートを備えた別の OntModel を作成します。推論モデルを使用すると、個体を作成してそれらの計算された型を確認したり、推論モデルによって導出されたサブクラスの関係を確認したりすることが簡単になります。

import com.hp.hpl.jena.ontology.Individual;
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;

public class CIDOCExample {

    final static String CIDOCNS = "http://www.cidoc-crm.org/cidoc-crm/";

    public static void main( String[] args ) {
        // Load the CIDOC-CRM into an OntModel.  We won't add any reasoning capability to this model, but
        // we'll use it as a submodel of OntModels that do.  Jena can pull the document from the web, but
        // you could also download a local copy and read that.  It would certainly a bit quicker than 
        // downloading it every time.
        final OntModel cidocModel = ModelFactory.createOntologyModel( OntModelSpec.RDFS_MEM );
        cidocModel.read( "http://www.cidoc-crm.org/rdfs/cidoc_crm_v5.1-draft-2013May.rdfs" );

        // Create an OntModel that imports the cidocModel, and give it inference support.
        final OntModel model = ModelFactory.createOntologyModel( OntModelSpec.RDFS_MEM_RDFS_INF );
        model.addSubModel( cidocModel );

        // Retrieve a class from the OntModel and shows its subclasses.
        final OntClass e5_event = model.getOntClass( CIDOCNS+"E5_Event" );
        System.out.println( "Subclasses of E5_Event:" );
        for ( final ExtendedIterator<OntClass> it = e5_event.listSubClasses(); it.hasNext() ;) {
            System.out.println( "\t* "+it.next() );
        }

        // Create your own instance data in an OntModel that imports the cidocModel
        final Individual someJoining = model.createIndividual( "http://example.org/someJoining", cidocModel.getOntClass( CIDOCNS+"E85_Joining"));
        System.out.println( "Types of "+someJoining );
        for ( final ExtendedIterator<Resource> types = someJoining.listRDFTypes(false); types.hasNext(); ) {
            System.out.println( "\t* "+types.next() );
        }
    }
}

を使用してクラスを取得するのOntModel.getOntClass(CIDCOCNS+"...")は少しぎこちなく、タイプミスを犯しやすいです。Jena は、オントロジーを取り、オントロジーで宣言されたクラス、プロパティ、および個体を表す定数のクラスを生成する優れたスキーマ生成ツールを提供します。たとえば、定数オブジェクトなどを使用してクラスschemagenを作成するために使用できます。CIDOCOntClassE5_Event

final OntClass e5_event = model.getOntClass( CIDOCNS+"E5_Event" );
System.out.println( "Subclasses of E5_Event:" );
for ( final ExtendedIterator<OntClass> it = e5_event.listSubClasses(); it.hasNext() ;) {
  System.out.println( "\t* "+it.next() );
}

あなたができる

System.out.println( "Subclasses of E5_Event:" );
for ( final ExtendedIterator<OntClass> it = CIDOC.E5_Event.inModel( model ).listSubClasses(); it.hasNext() ;) {
  System.out.println( "\t* "+it.next() );
}
于 2013-07-15T16:50:30.340 に答える