Project Gutenberg カタログ (ページの下部にあるGutenberg Feedsで入手可能) の SPARQL クエリを構築するのに苦労しています。SparQL/RDF/etc. 実際に動作し、SQL と混同するなどです。しかし、いくつかのチュートリアルを試しましたが、多次元データセットと思われるものと WHERE 句をつなぎ合わせることについて、まったく頭に浮かびません。
catalog.rdf を (Jena プロジェクトから) TDB データベースにインポートし、tdbquery ツールを使用して最初にクエリをセットアップしてから、著者またはタイトルで検索できるコマンドライン ツールにクエリをラップします。
これが私がこれまでに持っているものです:
$ cat gutenquery.tq
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX dcmitype: <http://purl.org/dc/dcmitype/>
PREFIX cc: <http://web.resource.org/cc/>
PREFIX pgterms: <http://www.gutenberg.org/rdfterms/>
PREFIX dcmitype: <http://purl.org/dc/dcmitype/>
SELECT ?title ?author
WHERE {
?book dc:title ?title ;
dc:creator ?author
}
LIMIT 10
$ ./tdbquery --loc=/var/db/gutenberg/ --file=gutenquery.tq
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
| title | author |
======================================================================================================================================================================
| "The Belgian Curtain\nEurope after Communism"^^rdf:XMLLiteral | "Vaknin, Samuel, 1961-"^^rdf:XMLLiteral |
| "Fairy Tales; Their Origin and Meaning\nWith Some Account of Dwellers in Fairyland"^^rdf:XMLLiteral | "Bunce, John Thackray, 1828-1899"^^rdf:XMLLiteral |
| "The World English Bible (WEB): Zephaniah"^^rdf:XMLLiteral | "Anonymous"^^rdf:XMLLiteral |
| "Lectures of Col. R. G. Ingersoll - Latest"^^rdf:XMLLiteral | "Ingersoll, Robert Green, 1833-1899"^^rdf:XMLLiteral |
| "Selections from Erasmus\nPrincipally from his Epistles"^^rdf:XMLLiteral | "Erasmus, Desiderius, 1469-1536"^^rdf:XMLLiteral |
| "East and West\nPoems"^^rdf:XMLLiteral | "Harte, Bret, 1836-1902"^^rdf:XMLLiteral |
| "The Enormous Room"^^rdf:XMLLiteral | "Cummings, E. E. (Edward Estlin), 1894-1962"^^rdf:XMLLiteral |
| "The Enormous Room"^^rdf:XMLLiteral | _:b0 |
| "Actes et Paroles, Volume 4\nDepuis l'Exil 1876-1885"^^rdf:XMLLiteral | "Hugo, Victor, 1802-1885"^^rdf:XMLLiteral |
| "L'ÃŽle Des Pingouins"^^rdf:XMLLiteral | "France, Anatole, 1844-1924"^^rdf:XMLLiteral |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
すべてのフィールドがすべてのレコードに存在するわけではありませんが、PG からの典型的なエントリは次のようになります。
<pgterms:etext rdf:ID="etext7250">
<dc:publisher>&pg;</dc:publisher>
<dc:title rdf:parseType="Literal">A Connecticut Yankee in King Arthur's Court, Part 9.</dc:title>
<dc:creator rdf:parseType="Literal">Twain, Mark, 1835-1910</dc:creator>
<pgterms:friendlytitle rdf:parseType="Literal">A Connecticut Yankee in King Arthur's Court, Part </pgterms:friendlytitle>
<dc:language><dcterms:ISO639-2><rdf:value>en</rdf:value></dcterms:ISO639-2></dc:language>
<dc:subject>
<rdf:Bag>
<rdf:li><dcterms:LCSH><rdf:value>Americans -- Great Britain -- Fiction</rdf:value></dcterms:LCSH></rdf:li>
<rdf:li><dcterms:LCSH><rdf:value>Arthurian romances -- Adaptations</rdf:value></dcterms:LCSH></rdf:li>
<rdf:li><dcterms:LCSH><rdf:value>Britons -- Fiction</rdf:value></dcterms:LCSH></rdf:li>
<rdf:li><dcterms:LCSH><rdf:value>Fantasy fiction</rdf:value></dcterms:LCSH></rdf:li>
<rdf:li><dcterms:LCSH><rdf:value>Kings and rulers -- Fiction</rdf:value></dcterms:LCSH></rdf:li>
<rdf:li><dcterms:LCSH><rdf:value>Knights and knighthood -- Fiction</rdf:value></dcterms:LCSH></rdf:li>
<rdf:li><dcterms:LCSH><rdf:value>Satire</rdf:value></dcterms:LCSH></rdf:li>
<rdf:li><dcterms:LCSH><rdf:value>Time travel -- Fiction</rdf:value></dcterms:LCSH></rdf:li>
</rdf:Bag>
</dc:subject>
<dc:subject><dcterms:LCC><rdf:value>PS</rdf:value></dcterms:LCC></dc:subject>
<dc:created><dcterms:W3CDTF><rdf:value>2004-07-07</rdf:value></dcterms:W3CDTF></dc:created>
<dc:rights rdf:resource="&lic;" />
たとえば、dc:author と dc:title に加えて、pgterms:etext rdf:ID="STUFF IN HERE" の属性から値を取得したいと思います。
<pgterms:etext rdf:ID="etext7250">
dc:subject などの下のリストのエントリを結合するだけでなく、基本的に、コマンドライン クエリを介して、この本のすべての情報を 1 つの一貫したエントリとして提供します。
だから、私の質問:
- pg:eterms rdf:ID の属性値を残りのクエリと組み合わせるにはどうすればよいですか?
- dc:subject のリストの下にあるエントリを 1 つの文字列に結合するにはどうすればよいですか?
- すべてのフィールドがすべてのレコードに表示されるわけではないため、OPTIONAL() 句を使用して、常に表示されるとは限らないフィールドを囲む必要がありますか?
- ユーザー指定の文字列に基づいてクエリを制限するにはどうすればよいですか? そのために FILTER() を使用することになっていますか?
どうもありがとう。単一層の情報を取得するためのクエリを作成することはできましたが、それ以上のもの、属性などはほとんど不可解です。これは標準 SQL とは大きく異なり、当初考えていたよりもはるかに複雑なプロジェクトです。