私はJenaで一度だけオントロジーを読み込む必要があります。 SPARQLクエリが含まれている私の方法は、また、それはすべての行動を毎回除いても方法はオントロジーをリロードするクエリを作品jenaの場合:オントロジーを一度ロードするにはどうしたらいいですか?
Model model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
model = FileManager.get().loadModel("c:/jena/ICD.owl");
が含まれています。 私は一度だけロードされるオントロジとメソッドで '見られる' 'モデル'変数を必要とします。 2つのモデルステートメントをメインクラスに移動すると、メソッドは 'モデル'を見ることができません。 Javaにはグローバル変数はありません。ここで
は、コードは次のとおりです。任意の提案のための
class store {
Model model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM);
public void myQuery() {
String pattern = "\\#(.*)$";
model = FileManager.get().loadModel("c:/jena/ICD.owl");
String singleQueryWord1="VEnTRICULAR FIBRILLATION";
String firstQueryWord2="pedestrian";
String secondQueryWord2="car";
String queryPattern1="("+singleQueryWord1+"(.*))";
String queryPattern2="("+firstQueryWord2+"(.|\\n)*"+secondQueryWord2+")|("+secondQueryWord2+"(.|\\n)*"+firstQueryWord2+")";
Pattern r = Pattern.compile(pattern);
String queryString = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\r\n" +
"PREFIX afn:<http://jena.apache.org/ARQ/function#>\r\n"+
"PREFIX owl: <http://www.w3.org/2002/07/owl#>\r\n" +
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\r\n" +
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\r\n" +
"PREFIX dc: <http://purl.org/dc/elements/1.1/>\r\n" +
"SELECT DISTINCT ?subject ?object\r\n" +
" WHERE {\r\n"+
"?subject dc:title ?object \r\n" +
"FILTER regex(?object,\""+ queryPattern1 +"\",\"i\")\r\n" +
//"FILTER regex(?object,\"(pedestrian (.|\\n)* car)|(car (.|\\n)* pedestrian)\",\"i\")\r\n"+
"}"
;
Query query = QueryFactory.create(queryString) ;
try (QueryExecution qexec = QueryExecutionFactory.create(query, model)) {
ResultSet results = qexec.execSelect() ;
if(!results.hasNext()) {
System.out.println("No results");
}else
for (; results.hasNext() ;)
{
QuerySolution soln = results.nextSolution();
Resource subj = (Resource) soln.get("?subject");
String subStr = subj.toString();
Matcher m = r.matcher(subStr);
if(m.find()) {
Literal obj = (Literal) soln.get("?object");
System.out.println(m.group()+" ........ "+obj);
}
m.reset();
}
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
感謝します。 フィル
そしてコンストラクタでオントロジーをロードすることは、なぜ動作しませんか?クエリを実行するメソッドを表示してください! – AKSW
"Javaにはグローバル変数はありません" - 何? – AKSW
お返事ありがとうございます。返信ASKW。 David Flanniganによると、「Java in a nutshell」には、グローバル変数はありません。 Instread、変数はクラス内で宣言され、そのクラスの一部を形成します。私はMainクラスにコンストラクタを配置しようとしていました。しかし、私はそれを "store"という新しいクラスを宣言し、そのメソッドの中にメソッド "my query"を置くことで解決したと思います。それは単なる学習の楽しみです。ここにコードです: – Phil