2010-07-25 27 views
4

我很難爲Project Gutenberg目錄(可在Gutenberg Feeds朝向頁面底部)構建SPARQL查詢。我知道這是我對SparQL/RDF /等的基本理解缺乏理解。實際上工作,將它與SQL混淆,等等。但我已經嘗試了幾個教程,並且我無法完全理解將WHERE子句與似乎是多維數據集的東西結合在一起。通過SPARQL查詢Project Gutenberg catalog.rdf

我已經將catalog.rdf導入TDB數據庫(來自Jena項目),並且在使用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:作者和DC:標題,我想擺脫pgterms的屬性值:ETEXT的rdf:ID =「STUFF這裏」:

<pgterms:etext rdf:ID="etext7250"> 

除了下的列表中的條目合併dc:subject等。基本上,通過命令行查詢將本書的所有信息作爲一個單一的連貫條目提供。

所以,我的問題:

  1. 我怎樣才能從PG結合的屬性值:eterms的rdf:ID與查詢的休息嗎?
  2. 如何將dc:subject列表中的條目合併爲一個字符串?
  3. 由於並非所有字段都顯示爲每個記錄,我應該使用OPTIONAL()子句來圍繞不總是出現的字段嗎?
  4. 如何限制我的查詢基於用戶指定的字符串?我應該使用FILTER()嗎?

非常感謝。我已經能夠構建查詢來獲得單層信息,但除此之外的任何東西,屬性等對我來說都是難以理解的。這與標準的SQL有很大的不同,並且比我想象的要複雜得多。

回答

10

如何將pg:eterms rdf:ID的屬性值與 其餘查詢結合起來?

RDF id將是您的kb中的圖書的URI。在你的情況下,將書放入你的select子句中會將它帶回來。

如何將dc:subject列表中的條目合併爲一個字符串?

我對此不確定。您可以將dc:subject放入您的查詢中,然後與您的客戶端進行傳輸。

因爲並非所有字段都顯示爲每個記錄,我應該使用OPTIONAL()子句來包圍不總是出現的字段嗎?

我怎麼能限制根據用戶指定的字符串我的查詢?我應該使用FILTER()嗎?

是的,特別是FILTER regex()

+1

謝謝,這是有益的和直接的。我現在排序了。我沒有足夠的積分來支持你,但那回答了我的問題。 – 2010-08-07 02:01:56