1

オントロジーを読み取り/検索するために Jena Java API を使用しています。オントロジーの特定のクラスのすべてのメンバーを見つけようとしています。

したがって、次のコードを使用します。

OntClass oc = model.getOntClass(NS + "ClassName");
for (ExtendedIterator<? extends OntResource> i = oc.listInstances(); i.hasNext();)
{
    OntResource or = i.next();
    System.out.println("Local name:" + or.getLocalName()); 
}

オントロジーが読み取られるオブジェクトはどこmodelにありますか。OntModel

このコードから得られる結果は、className1、className5 などの形式の値のリストです。

しかし、Protege でオントロジーを開くと、同じクラスのメンバーには通常の名前が付けられています。私getInstances()の目的に適した機能ですか?もしそうなら、オントロジーに保存されているProtegeで見た名前はどこにあり、どうすればその値を取得できますか?

4

1 に答える 1

2

ループ自体は問題ありません。への呼び出しは、(通常) qname ペア.localName()の名前部分である URI の部分を引き出しています。これは多くの場合、や などprefix:nameの意味のある文字列ですが、RDF 標準では正式に定義されておらず、厳密に言えば、RDF は URI 全体を内部構造のない単一のトークンとして扱います。myontology:Wheelmyontology:Truck

コードでオントロジーを処理している場合、リソース (またはクラス、プロパティ、個体など) の URI は、そのリソースを参照するために必要なものです。ただし、何らかの UI を介して人間にリソースを提示するには、より読みやすいものが必要です。RDF には、これに関する多くの規則があります (残念ながら、それは複数形の規則です)。通常、次のプロパティの 1 つ以上がリソースに添付されています。

  • rdfs:label- 通常、コンパクトで読みやすい名前に使用されます
  • rdfs:comment- 通常、より長く、より説明的な用語に使用されます
  • skos:prefLabel- 「優先」ラベル
  • skos:altLabel- 「代替」ラベル

ほとんどのオントロジーまたはデータセットは、rdfs:commentrdfs:label、または SKOS 用語のいずれかを使用します。両方を使用する人もいます。ラベルには、言語タグ付きのバリアントも含まれている可能性があることに注意してください。

<http://example.org/terms#Cat>
  a owl:Class ;
  rdfs:label "cat"@en ;
  rdfs:label "chat"@fr ;
  rdfs:comment "denotes the set of all cats"@en ;
  rdfs:comment "désigne l'ensemble de tous les chats"@fr .

したがって、Protege が行うことは、これらのプロパティのどれが編集中のオントロジーで使用されているかを確認し、優先するものを選択して表示することです。たとえば、次のように同じことができます。

OntClass oc = model.getOntClass(NS + "ClassName");
for (ExtendedIterator<? extends OntResource> i = oc.listInstances(); i.hasNext();)
{
  OntResource or = i.next();
  Property labelProp = null;

  if (or.hasProperty( RDFS.label )) {
    labelProp = RDFS.label;
  }
  else if (or.hasProperty( SKOS.prefLabel )) {
    labelProp = SKOS.prefLabel;
  }

  // note: does not deal with lang tags
  String label = (labelProp != null) ? or.getProperty( labelProp ).getString() : "unknown";

  System.out.println("Resource " + or.getURI() + " is labelled: " + label ); 
}
于 2013-01-08T12:10:58.527 に答える