Jena API使用紹介
ここではjenaの使用について簡単に紹介します.一部の内容はこちらを参考にしておりますhttp://jena.apache.org/tutorials/rdf_api.html .
1.jenaパッケージのダウンロードと開発環境の構成
まず、ここからjenaパッケージapache-jana-2.7.*をダウンロードします.tar.gz.解凍する.
Eclipseを開き、Javaプロジェクトを新規作成します.
プロジェクト->properties->Java Build Path->librariesを右クリックします.解凍後のlibディレクトリのjarファイルをbuild pathに追加します.
OK.今はプロジェクトでjenaを使うことができます.
2.jena簡単に使う
まず次の例を見てみましょう.これはpeopleリソースです.RDFにおける人間に関する情報はvcardで表すのが適切である.RDFのvCardの詳細についてはhttp://www.w3.org/TR/vcard-rdf/.
この例では、リソースhttp://.../JohnSmith人を表す.この人のフルネームはJohn Smith,すなわちvcard:FN属性の値はJohn Smithである.Jenaでは,リソースはResourceクラスで表され,その属性はPropertyクラスで表される.全体モデルはModelクラスで表されます.すなわち、上図はModelです.1つのModelオブジェクトに複数のリソースを含めることができます.
上述したリソースはjenaプログラミングを用いて以下のように表される.
ここで、ModelFactoryクラスはModelオブジェクトを作成するModelファクトリです.ModelのcreateResourceメソッドを使用してmodelにリソースを作成し、リソースのaddPropertyメソッドを使用してプロパティを追加できます.
3.jenaのStatement
Modelの各矢印は記述(Statement)です.Statementは主語、述語、客体の3つの部分から構成されています.主語:図示中の矢印の出発位置.リソースを表します. 述語:図示の矢印.リソースのプロパティを表します. ゲスト:図示の矢印が指す位置.属性を表す値.テキストでもリソースでも構いません.
次の図はModelを示しています.
各矢印はStatementを表します.リソースなどhttp://.../JohnSmithテキスト「John Smith」という値を持つvCard:FN属性があります.このリソースにはもう1つのvCard:N属性があります.この属性の値は別の無名リソースです.この無名リソースにはvCard:GivenとvCard:Familyの2つの属性があります.その値はそれぞれテキストの「John」と「Smith」です.
Jena APIを用いてこのRDFのStatementを解析することができる.
ModelクラスのlistStatementsは、StatementのIteratorを返します.Statementには、getSubject、getPredicate、getObjectの主語、述語、ゲストがあります.そのタイプはResource、Property、RDFNodeです.ゲストobjectタイプはResourceまたはユーザテキストです.
プログラムの出力は次のとおりです.
この4つは、上の図の4つの矢印である4つのStatementを表しています.ここにはリソース名が指定されていないリソースがあります.
4.出力RDF
次の例を見てみましょう.
Modelは、第3部の図示と同様です.Modelのwriteメソッドで、そのModelのコンテンツを出力ストリームに書き込むことができます.この例の出力は、次のとおりです.
model.write(OutputStream)、model.write(OutputStream、「RDF/XML-ABBREV」)、model.write(OutputStream,"N-TRIPLE")はそれぞれ異なるフォーマットの内容を出力する. model.write(OutputStream):modelも使用できます.代わりにwrite(OutputStream,null)を使用します.デフォルトの出力フォーマット. model.write(OutputStream、「RDF/XML-ABBREV」):XMLサムネイル構文を使用してRDFを出力します. model.write(OutputStream,"N-TRIPLE"):nタプルのフォーマットを出力します.
5.RDF入力
次のrdfファイルがあります
resources.rdf:
4つのPeopleリソースが含まれています.次のプログラムはrdfファイルを読み取り、コンテンツを出力します.
Modelのreadメソッドは、RDFをmodelに入力することを読み取ることができる.2番目のパラメータはフォーマットを指定できます.
6.Namespace接頭辞の設定
次の例を見てみましょう.
このプログラムはまずModelのcreatePropertyとcreateResource生成属性とリソースを呼び出します.Modelを呼び出します.addはモデルに3つのStatementを追加したいと思っています.addの3つのパラメータはそれぞれ3元グループの主語、述語、客体である.モデルにコンテンツを追加したいのは、実際には三元グループを追加することです.
ModelのsetNsPrefix関数は、名前空間接頭辞を設定するために使用されます.プログラムの出力は次のとおりです.
本例では主に以下の内容を用いた. ModelのgetResourceメソッド:このメソッドは、パラメータに基づいてリソースオブジェクトを返します. ResourceのgetPropertyメソッド:パラメータに基づいて属性オブジェクトを返します. PropertyのgetObjectメソッド:属性値を返します.実際のタイプがResourceかliteralかによって強制的に変換されます. PropertyのgetResourceメソッド:属性値のリソースを返します.プロパティ値がResourceでない場合は、エラーが表示されます. PropertyのgetStringメソッド:属性値のテキスト内容を返します.属性値がテキストでない場合は、エラーが表示されます. ResourceのlistPropertiesメソッド:条件に一致する属性が見つかりました.
8.Modelへのクエリー
JenaとコアAPIは、限られたクエリー操作のみをサポートします.ここで簡単に紹介します. Model.ListStatements():ModelのすべてのStatementsがリストされます. Model.ListSubjects():属性を持つすべてのリソースをリストします. Model.ListSubjectsWithProperty(Property p,RDFNode o):属性pがあり、その値がoのすべてのリソースがリストされます.
上記のいくつかのクエリはModelに対するものである.ListStatements(Selector s)はいくつかの包装を行って得た.のように Selector selector = new SimpleSelector(subject, predicate, object). このセレクタは、すべての主語がsubjectに合致し、述語がpredicateに合致し、ゲストがobjectに合致するStatementを選択します.
以下では、fullNameを持つリソースをそれぞれ2つの方法でクエリーします.
1.Modelを使用する.ListSubjectsWithPropertyクエリー:
2.Selectorクエリーを使用するには:
この例ではresourcesを用いる.rdfリソース.上記の2つの例の出力は、次のとおりです.
9.Modelの削除操作
データベースの操作には、主に増加、削除、変更、検索などが含まれていることがわかります.RDFに対してもこのいくつかの操作を実現することができます.クエリー操作について説明しましたが、このセクションではRDF Modelの削除操作について説明します.1つのRDFに対してStatementを追加または削除することができます.RDF Modelは完全にStatementsで構成されているため,これに基づいてリソースや属性などの削除を実現できる.変更操作は削除後に追加することで実現できます.
次の例を見てください.
この例では、まずModelを生成し、Modelを使用します.removeメソッドは、いくつかのstatementエントリを削除し、Modelを使用します.addはまた増えて帰ってきた.
Model.removeメソッドはstatementの削除操作を実現できる、Model.addはstatementの増加を実現することができる.
Modelを直接使用する方法に加えて、ModelのResource(リソース)またはProperty(プロパティ、実際にはResourceから継承)を削除することで、Modelを変更することもできます.
10 .Modelのマージ操作
Modelのマージは、主に交差、並列、補完の3つの操作に分けられます.
次の図に示します.
この2つの図はそれぞれ1つのModelを表している.名前は同じで、同じ属性vcard:FNを持ち、値はJohn Smithです.そこで,この2つのModelに対して「並列」(union)操作を行った.得られたModelの図形は以下のように表される.
重複するvcard:FN値は1つしか表示されません.
この3つの操作方法は、次のとおりです. Model.intersection(Model model):交差操作.以前の2つのモデルにある部分を含む新しいモデルを作成します. Model.Union(Model model):を実行します.前の2つのModelのいずれかが持つ部分を含む新しいModelを作成します. Model.difference(Model model):補足操作.新しいModelを作成します.新しいModelには、このModelのパラメータに示されているModelにはない部分が含まれています.
11.まとめ
本稿では,コアJena APIについて比較的包括的に紹介した.Jena APIはRDFを処理するJavaフレームワークである.RDFは、リソース記述のために使用される.
本明細書のすべての例は、本人のデバッグによって正常に動作しています.
Jenaの詳細については、「http://jena.apache.org/index.html .
RDFの詳細については、「http://www.w3.org/RDF/ .さらにhttp://www.w3school.com.cn/rdf/index.asp簡単な紹介です.
1.jenaパッケージのダウンロードと開発環境の構成
まず、ここからjenaパッケージapache-jana-2.7.*をダウンロードします.tar.gz.解凍する.
Eclipseを開き、Javaプロジェクトを新規作成します.
プロジェクト->properties->Java Build Path->librariesを右クリックします.解凍後のlibディレクトリのjarファイルをbuild pathに追加します.
OK.今はプロジェクトでjenaを使うことができます.
2.jena簡単に使う
まず次の例を見てみましょう.これはpeopleリソースです.RDFにおける人間に関する情報はvcardで表すのが適切である.RDFのvCardの詳細についてはhttp://www.w3.org/TR/vcard-rdf/.
この例では、リソースhttp://.../JohnSmith人を表す.この人のフルネームはJohn Smith,すなわちvcard:FN属性の値はJohn Smithである.Jenaでは,リソースはResourceクラスで表され,その属性はPropertyクラスで表される.全体モデルはModelクラスで表されます.すなわち、上図はModelです.1つのModelオブジェクトに複数のリソースを含めることができます.
上述したリソースはjenaプログラミングを用いて以下のように表される.
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.VCARD;
public class Introduction {
static String personURI = "http://somewhere/JohnSmith";
static String fullName = "John Smith";
public static void main(String[] args){
// create an empty Model
Model model = ModelFactory.createDefaultModel();
// create the resource
Resource johnSmith = model.createResource(personURI);
// add the property
johnSmith.addProperty(VCARD.FN, fullName);
}
}
ここで、ModelFactoryクラスはModelオブジェクトを作成するModelファクトリです.ModelのcreateResourceメソッドを使用してmodelにリソースを作成し、リソースのaddPropertyメソッドを使用してプロパティを追加できます.
3.jenaのStatement
Modelの各矢印は記述(Statement)です.Statementは主語、述語、客体の3つの部分から構成されています.
次の図はModelを示しています.
各矢印はStatementを表します.リソースなどhttp://.../JohnSmithテキスト「John Smith」という値を持つvCard:FN属性があります.このリソースにはもう1つのvCard:N属性があります.この属性の値は別の無名リソースです.この無名リソースにはvCard:GivenとvCard:Familyの2つの属性があります.その値はそれぞれテキストの「John」と「Smith」です.
Jena APIを用いてこのRDFのStatementを解析することができる.
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.vocabulary.VCARD;
public class StatementDemo {
public static void main(String[] args){
//Introduction
String personURI = "http://somewhere/JohnSmith";
String givenName = "John";
String familyName = "Smith";
String fullName = givenName + " " + familyName;
Model model = ModelFactory.createDefaultModel();
Resource johnSmith = model.createResource(personURI);
johnSmith.addProperty(VCARD.FN, fullName);
johnSmith.addProperty(VCARD.N,
model.createResource()
.addProperty(VCARD.Given, givenName)
.addProperty(VCARD.Family, familyName));
//Statement
StmtIterator iter = model.listStatements();
while(iter.hasNext()){
Statement stmt = iter.nextStatement();
Resource subject = stmt.getSubject();
Property predicate = stmt.getPredicate();
RDFNode object = stmt.getObject();
System.out.print(subject.toString());
System.out.print(" "+predicate.toString());
if(object instanceof Resource){
System.out.print(object.toString());
}else{
System.out.print("\"" + object.toString() + "\"");
}
System.out.println(" .");
}
}
}
ModelクラスのlistStatementsは、StatementのIteratorを返します.Statementには、getSubject、getPredicate、getObjectの主語、述語、ゲストがあります.そのタイプはResource、Property、RDFNodeです.ゲストobjectタイプはResourceまたはユーザテキストです.
プログラムの出力は次のとおりです.
http://somewhere/JohnSmith http://www.w3.org/2001/vcard-rdf/3.0#N-1e19b4fe:13bd0803952:-7fff .
http://somewhere/JohnSmith http://www.w3.org/2001/vcard-rdf/3.0#FN"John Smith" .
-1e19b4fe:13bd0803952:-7fff http://www.w3.org/2001/vcard-rdf/3.0#Family"Smith" .
-1e19b4fe:13bd0803952:-7fff http://www.w3.org/2001/vcard-rdf/3.0#Given"John" .
この4つは、上の図の4つの矢印である4つのStatementを表しています.ここにはリソース名が指定されていないリソースがあります.
4.出力RDF
次の例を見てみましょう.
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.VCARD;
public class RDFWriting {
public static void main(String[] args){
//Introduction
String personURI = "http://somewhere/JohnSmith";
String givenName = "John";
String familyName = "Smith";
String fullName = givenName + " " + familyName;
Model model = ModelFactory.createDefaultModel();
Resource johnSmith = model.createResource(personURI);
johnSmith.addProperty(VCARD.FN, fullName);
johnSmith.addProperty(VCARD.N,
model.createResource()
.addProperty(VCARD.Given, givenName)
.addProperty(VCARD.Family, familyName));
//Model write
model.write(System.out);
System.out.println();
model.write(System.out, "RDF/XML-ABBREV");
System.out.println();
model.write(System.out, "N-TRIPLE");
}
}
Modelは、第3部の図示と同様です.Modelのwriteメソッドで、そのModelのコンテンツを出力ストリームに書き込むことができます.この例の出力は、次のとおりです.
John Smith
Smith
John
Smith
John
John Smith
_:AX2dX498ae941X3aX13bd08e9fe5X3aXX2dX7fff .
"John Smith" .
_:AX2dX498ae941X3aX13bd08e9fe5X3aXX2dX7fff "Smith" .
_:AX2dX498ae941X3aX13bd08e9fe5X3aXX2dX7fff "John" .
model.write(OutputStream)、model.write(OutputStream、「RDF/XML-ABBREV」)、model.write(OutputStream,"N-TRIPLE")はそれぞれ異なるフォーマットの内容を出力する.
5.RDF入力
次のrdfファイルがあります
resources.rdf:
Smith
John
John Smith
Sarah Jones
Matt Jones
Smith
Rebecca
Jones
Sarah
Jones
Matthew
Becky Smith
4つのPeopleリソースが含まれています.次のプログラムはrdfファイルを読み取り、コンテンツを出力します.
import java.io.InputStream;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.util.FileManager;
public class RDFReading {
public static String inputFileName = "resources.rdf";
public static void main(String[] args){
Model model = ModelFactory.createDefaultModel();
// FileManager
InputStream in = FileManager.get().open( inputFileName );
if (in == null) {
throw new IllegalArgumentException(
"File: " + inputFileName + " not found");
}
// RDF/XML
model.read(in, null);
model.write(System.out);
}
}
Modelのreadメソッドは、RDFをmodelに入力することを読み取ることができる.2番目のパラメータはフォーマットを指定できます.
6.Namespace接頭辞の設定
次の例を見てみましょう.
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;
public class NSPrefix {
public static void main(String[] args){
Model m = ModelFactory.createDefaultModel();
String nsA = "http://somewhere/else#";
String nsB = "http://nowhere/else#";
// Resource Property
Resource root = m.createResource( nsA + "root" );
Property P = m.createProperty( nsA + "P" );
Property Q = m.createProperty( nsB + "Q" );
Resource x = m.createResource( nsA + "x" );
Resource y = m.createResource( nsA + "y" );
Resource z = m.createResource( nsA + "z" );
// Statement
m.add( root, P, x ).add( root, P, y ).add( y, Q, z );
System.out.println( "# -- no special prefixes defined" );
m.write( System.out );
System.out.println( "# -- nsA defined" );
// Namespace nsA “nsA”
m.setNsPrefix( "nsA", nsA );
m.write( System.out );
System.out.println( "# -- nsA and cat defined" );
// Namespace nsB “cat”
m.setNsPrefix( "cat", nsB );
m.write( System.out );
}
}
このプログラムはまずModelのcreatePropertyとcreateResource生成属性とリソースを呼び出します.Modelを呼び出します.addはモデルに3つのStatementを追加したいと思っています.addの3つのパラメータはそれぞれ3元グループの主語、述語、客体である.モデルにコンテンツを追加したいのは、実際には三元グループを追加することです.
ModelのsetNsPrefix関数は、名前空間接頭辞を設定するために使用されます.プログラムの出力は次のとおりです.
# -- no special prefixes defined
# -- nsA defined
# -- nsA and cat defined
如果我们没有为RDF 指定namespace 前缀,则jena 会自动为其生成名为 j.0, j.1 的名字空间。
7. jena 的 Model 访问
上面介绍了jena 用来创建、读、写 RDF Model,本部分将主要用来访问RDF Model 的信息,对Model 的内容进行操作。
看下面一个例子:
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.rdf.model.StmtIterator;
import com.hp.hpl.jena.vocabulary.VCARD;
public class ModelAccess {
public static void main(String[] args){
String personURI = "http://somewhere/JohnSmith";
String givenName = "John";
String familyName = "Smith";
String fullName = givenName + " " + familyName;
Model model = ModelFactory.createDefaultModel();
Resource johnSmith = model.createResource(personURI);
johnSmith.addProperty(VCARD.FN, fullName);
johnSmith.addProperty(VCARD.N,
model.createResource()
.addProperty(VCARD.Given, givenName)
.addProperty(VCARD.Family, familyName));
// Model
Resource vcard = model.getResource(personURI);
/*
// N ( getObject() )
Resource name = (Resource) vcard.getProperty(VCARD.N)
.getObject();
*/
// , getResource
Resource name = vcard.getProperty(VCARD.N)
.getResource();
// literal, getString
fullName = vcard.getProperty(VCARD.FN)
.getString();
// NICKNAME
vcard.addProperty(VCARD.NICKNAME, "Smithy")
.addProperty(VCARD.NICKNAME, "Adman");
System.out.println("The nicknames of \""
+ fullName + "\" are:");
// NICKNAME , listProperties
StmtIterator iter = vcard.listProperties(VCARD.NICKNAME);
while (iter.hasNext()) {
System.out.println(" " + iter.nextStatement()
.getObject()
.toString());
}
}
}
本例では主に以下の内容を用いた.
8.Modelへのクエリー
JenaとコアAPIは、限られたクエリー操作のみをサポートします.ここで簡単に紹介します.
上記のいくつかのクエリはModelに対するものである.ListStatements(Selector s)はいくつかの包装を行って得た.のように
以下では、fullNameを持つリソースをそれぞれ2つの方法でクエリーします.
1.Modelを使用する.ListSubjectsWithPropertyクエリー:
import java.io.InputStream;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.ResIterator;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.vocabulary.VCARD;
public class RDFQuery {
public static String inputFileName = "resources.rdf";
public static void main(String[] args){
Model model = ModelFactory.createDefaultModel();
InputStream in = FileManager.get().open( inputFileName );
if (in == null) {
throw new IllegalArgumentException(
"File: " + inputFileName + " not found");
}
model.read(in, null);
// listResourcesWithProperty
ResIterator iter = model.listResourcesWithProperty(VCARD.FN);
if(iter.hasNext()){
System.out.println("The database contains vcard for:");
while(iter.hasNext()){
System.out.println(" "+iter.nextResource().getProperty(VCARD.FN).getString());
}
}else{
System.out.println("No vcards were found in the database");
}
}
}
2.Selectorクエリーを使用するには:
import java.io.InputStream;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.SimpleSelector;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.vocabulary.VCARD;
public class RDFQuery1 {
public static String inputFileName = "resources.rdf";
public static void main(String[] args){
Model model = ModelFactory.createDefaultModel();
InputStream in = FileManager.get().open( inputFileName );
if (in == null) {
throw new IllegalArgumentException(
"File: " + inputFileName + " not found");
}
model.read(in, null);
// Selector
StmtIterator iter = model.listStatements(new SimpleSelector(null, VCARD.FN, (RDFNode)null));
if(iter.hasNext()){
System.out.println("The database contains vcard for:");
while(iter.hasNext()){
System.out.println(" "+iter.nextStatement().getString());
}
}else{
System.out.println("No vcards were found in the database");
}
}
}
この例ではresourcesを用いる.rdfリソース.上記の2つの例の出力は、次のとおりです.
The database contains vcard for:
Becky Smith
Matt Jones
Sarah Jones
John Smith
9.Modelの削除操作
データベースの操作には、主に増加、削除、変更、検索などが含まれていることがわかります.RDFに対してもこのいくつかの操作を実現することができます.クエリー操作について説明しましたが、このセクションではRDF Modelの削除操作について説明します.1つのRDFに対してStatementを追加または削除することができます.RDF Modelは完全にStatementsで構成されているため,これに基づいてリソースや属性などの削除を実現できる.変更操作は削除後に追加することで実現できます.
次の例を見てください.
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.vocabulary.VCARD;
public class AddDelete {
public static void main(String[] args){
String personURI = "http://somewhere/JohnSmith";
String givenName = "John";
String familyName = "Smith";
String fullName = givenName + " " + familyName;
Model model = ModelFactory.createDefaultModel();
Resource johnSmith = model.createResource(personURI);
johnSmith.addProperty(VCARD.FN, fullName);
johnSmith.addProperty(VCARD.N,
model.createResource()
.addProperty(VCARD.Given, givenName)
.addProperty(VCARD.Family, familyName));
System.out.println(" :");
model.write(System.out);
// Statement
model.remove(model.listStatements(null, VCARD.N, (RDFNode)null));
model.removeAll(null, VCARD.Given, (RDFNode)null);
model.removeAll(null, VCARD.Family, (RDFNode)null);
System.out.println("
:");
model.write(System.out);
// Statement
model.add(johnSmith, VCARD.N, model.createResource()
.addProperty(VCARD.Given, givenName)
.addProperty(VCARD.Family, familyName));
System.out.println("
:");
model.write(System.out);
}
}
この例では、まずModelを生成し、Modelを使用します.removeメソッドは、いくつかのstatementエントリを削除し、Modelを使用します.addはまた増えて帰ってきた.
Model.removeメソッドはstatementの削除操作を実現できる、Model.addはstatementの増加を実現することができる.
Modelを直接使用する方法に加えて、ModelのResource(リソース)またはProperty(プロパティ、実際にはResourceから継承)を削除することで、Modelを変更することもできます.
10 .Modelのマージ操作
Modelのマージは、主に交差、並列、補完の3つの操作に分けられます.
次の図に示します.
この2つの図はそれぞれ1つのModelを表している.名前は同じで、同じ属性vcard:FNを持ち、値はJohn Smithです.そこで,この2つのModelに対して「並列」(union)操作を行った.得られたModelの図形は以下のように表される.
重複するvcard:FN値は1つしか表示されません.
この3つの操作方法は、次のとおりです.
11.まとめ
本稿では,コアJena APIについて比較的包括的に紹介した.Jena APIはRDFを処理するJavaフレームワークである.RDFは、リソース記述のために使用される.
本明細書のすべての例は、本人のデバッグによって正常に動作しています.
Jenaの詳細については、「http://jena.apache.org/index.html .
RDFの詳細については、「http://www.w3.org/RDF/ .さらにhttp://www.w3school.com.cn/rdf/index.asp簡単な紹介です.