7

現在、SPARQL エンドポイントを介してDBPedia の Infobox Onyology データベースにクエリを実行し、クラスのリスト、選択したクラスのサブクラス、および特定のクラスのプロパティを取得する方法を探しています。私が見つけた限りでは、探しているプロパティを知るか、特定のものを検索する必要があります。私が見つけたすべての例は、特定のものを検索したいという考えに基づいているようです。 (特定の標高を超える都市の人口など)、カテゴリを効果的に「閲覧」できるものを構築したいと考えています。例えば、このクラス階層図の「owl:Thing」のサブクラス一覧から選択したサブクラスのサブクラスのリストをユーザーに提示します。マッピング wiki を介してこのようなものを参照することは可能のようですが、SPARQL エンドポイントに直接クエリを実行することをお勧めします。

利用可能なクラスとそれらのクラスのプロパティを返す単純な SPARQL クエリはありますか?

更新:このクエリ を反復することにより、クラス階層を取得する方法を思いつきました:

SELECT ?subject WHERE {
     ?subject rdfs:subClassOf owl:Thing
}

これは、owl:Thing のサブクラスのリストを返します。owl:Thing をサブクラスの 1 つに置き換えると、そのサブクラスのリストが取得され、サブクラスがなくなるまで続きます。サブクラスがなくなると、すべてのリソースを選択できます。選択されたサブクラスによって与えられる型。ただし、サブクラスに共通のすべてのプロパティを取得する方法はまだよくわかりません。

更新 2 近づいています。このクエリは、国でもあるすべてのプロパティ (dbpedia:property の子) とそのタイトルを取得します。

SELECT DISTINCT ?prop ?title WHERE {
     ?country ?prop ?value.
     ?country a <http://dbpedia.org/ontology/Country>.
     ?prop rdf:type rdf:Property.
     ?prop rdfs:label ?title
}

実際に私が本当に求めたのはこれだけです。私が今やろうとしている最後のことは、それらが表示されるページ数でこれらを並べることです (おそらく、最も一般的なプロパティが最も興味深いものになります)。

4

4 に答える 4

7

OK、実際にこれを行う方法を多かれ少なかれ正確に把握したので、これを単なる編集ではなく回答として送信します。私が探しているものを正確に与えるように見えるのは、このクエリを使用してクラス階層を反復することから始めることです:

SELECT ?class ?label WHERE {
     ?class rdfs:subClassOf owl:Thing.
     ?class rdfs:label ?label. 
     FILTER(lang(?label) = "en")
}

選択した結果を毎回 owl:Thing の代わりにクエリにフィードします。

ユーザーが希望する最低レベルのクラスを選択したら、プロパティのリストを、表示されるエントリ数の降順で表示するために、次のクエリを使用します。

SELECT ?prop ?title WHERE {
     ?country ?prop [].
     ?country a <http://dbpedia.org/ontology/Country>.
     ?prop rdf:type rdf:Property.
     ?prop rdfs:label ?title
} ORDER BY DESC(COUNT(DISTINCT ?country))

もちろん、これらの結果を実際に見ると、あまり説明的でないラベル (「s」? 何?) を持たないファンキーなプロパティがいくつかありますが、これは少なくとも私が最初に探していたものです.

于 2011-03-20T02:22:08.357 に答える
3

(1) 既存のすべてのクラスを照会します。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?class
WHERE {
  ?s rdf:type ?class .
}

(2) クラス C の任意のインスタンスで使用されるすべてのプロパティのクエリ:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?property
WHERE {
  ?s rdf:type <C> .
  ?s ?property ?o
}
于 2011-03-20T01:11:38.113 に答える
2

これにより、 sでrdfs:domainあるすべてのプロパティが取得されます。SpaceMission

select ?property where {
    ?property rdfs:domain <http://dbpedia.org/ontology/SpaceMission>
}

これらのプロパティはすべてSpaceMissionサブジェクトとして受け入れます。

RDF(S) では、プロパティの使用によって s が暗示される可能rdfs:domain性があるため、プロパティごとに明示的なステートメントを持つ必要がないことに注意してください。rdfs:domainしたがって、このクエリはのドメインで定義されたすべてのプロパティのリストを提供しますが、 のすべてのインスタンスで実際に使用されるSpaceMissionすべてのプロパティのリストを提供するわけではありません。SpaceMission

于 2011-03-20T00:45:40.933 に答える
1

一部のプロパティが実際には次のように定義されていない可能性は十分にあります。

?par rdf:プロパティ .

しかし、中間の位置にある用語は、定義上、プロパティです。したがって、次の方法でより多くの結果が得られる場合があります。

SELECT ?prop ?title WHERE {
     ?country a <http://dbpedia.org/ontology/Country>。
     ?国 ?prop [] .
     ?prop rdfs:label ?title .
}
ORDER BY DESC(COUNT(DISTINCT ?国))

(わずかに並べ替えます。最初に選択すると、パフォーマンスが向上する場合があります)

于 2011-03-29T17:33:29.137 に答える