Jenaを使ってみる

何をしていいのかさっぱりなので、とりあえずOntologyを作ってみる。
友人に聞いたらJavaのframeworkでJenaっていうのがあるっぽい。

Jena is a Java framework for building Semantic Web applications. It provides a programmatic environment for RDF, RDFS and OWL, SPARQL and includes a rule-based inference engine.

Apache Jena - Apache Jena

さっそくこれを使ってOntology(というかRDF)を作ることにする。

下準備

最新版をダウンロード。回答してできたもののうち、libディレクトリ内のjarファイルを適当なところにコピー&パスを通してあげればOK。
今回生成するRDFここにある
"Internet Movie DataBase"を簡略化したものにする。

ソースコード

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.RDFS;

public class MovieOntologyGenerator {

	public static String BASE_URI = "http://kslash.jp/movie";
	
	public static void main(String[] args) {
		Model model = ModelFactory.createDefaultModel();
		
		Resource movie = model.createResource(BASE_URI + "#movie",RDFS.Class);
		
		Resource company = model.createResource(BASE_URI + "#company",RDFS.Class);
		Resource moviePerson = model.createResource(BASE_URI + "#movie_person",RDFS.Class);
		Resource qualification = model.createResource(BASE_URI + "#qualification",RDFS.Class);
		
		Resource generatesProperty = model.createResource(BASE_URI + "#generates",RDF.Property);
		generatesProperty.addProperty(RDFS.domain, company);		
		generatesProperty.addProperty(RDFS.range, movie);
		 
		Resource participatesProperty = model.createResource(BASE_URI + "#participates", RDF.Property);
		participatesProperty.addProperty(RDFS.domain, moviePerson);
		participatesProperty.addProperty(RDFS.range, movie);

		
		Resource hasQualificationProperty = model.createResource(BASE_URI + "#has_qualification",RDF.Property);
		hasQualificationProperty.addProperty(RDFS.domain, movie);
		hasQualificationProperty.addProperty(RDFS.range, qualification);
		
		 model.write(System.out, "RDF/XML-ABBREV");		
	}
}

URIとかは適当。見る人が見れば、そんなに難しいコードではないはず。

出力結果

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  <rdfs:Class rdf:about="http://kslash.jp/movie#company"/>
  <rdfs:Class rdf:about="http://kslash.jp/movie#movie_person"/>
  <rdfs:Class rdf:about="http://kslash.jp/movie#movie"/>
  <rdfs:Class rdf:about="http://kslash.jp/movie#qualification"/>
  <rdf:Property rdf:about="http://kslash.jp/movie#generates">
    <rdfs:range rdf:resource="http://kslash.jp/movie#movie"/>
    <rdfs:domain rdf:resource="http://kslash.jp/movie#company"/>
  </rdf:Property>
  <rdf:Property rdf:about="http://kslash.jp/movie#participates">
    <rdfs:range rdf:resource="http://kslash.jp/movie#movie"/>
    <rdfs:domain rdf:resource="http://kslash.jp/movie#movie_person"/>
  </rdf:Property>
  <rdf:Property rdf:about="http://kslash.jp/movie#has_qualification">
    <rdfs:range rdf:resource="http://kslash.jp/movie#qualification"/>
    <rdfs:domain rdf:resource="http://kslash.jp/movie#movie"/>
  </rdf:Property>
</rdf:RDF>

xml:baseとrdf:IDをどうやったら使えるのか分かりません><