2011-08-26 37 views
5

我主要使用Ruby來做到這一點,但我迄今爲止的攻擊計劃是如下所示:什麼是解析RDFa,Microdata等,使用統一架構/詞彙表存儲和顯示信息的最佳方式(例如schema.org)

使用gems rdf,rdf-rdfa和rdf-microdata或mida來解析給定URI的數據。我覺得這是最好映射到一個統一模式類似schema.org,例如採取何種試圖描述數據的詞彙和opengraph之間的轉換將schema.org這個YAML文件:

# Schema X to schema.org conversion 
#data-vocabulary 
DV: 
    name:name 
    street-address:streetAddress 
    region:addressRegion 
    locality:addressLocality 
    photo:image 
    country-name:addressCountry 
    postal-code:postalCode 
    tel:telephone 
    latitude:latitude 
     longitude:longitude 
    type:type 
#opengraph 
OG: 
    title:name 
    type:type 
    image:image 
    site_name:site_name 
    description:description 
    latitude:latitude 
    longitude:longitude 
    street-address:streetAddress 
    locality:addressLocality 
    region:addressRegion 
    postal-code:postalCode 
    country-name:addressCountry 
    phone_number:telephone 
    email:email 

我可以然後存儲以一種格式發現的信息並用schema.org語法重新顯示它們。

另一部分是確定類型。我會在schema.org之後爲我的表建模,並且我想知道記錄的'Thing'(Thing)類型。所以如果我解析一個opengraph類型的'bar',我會將它存儲爲'BarOrPub'(BarOrPub)。

有沒有更好的方法來做到這一點?自動化的東西?已經有解決方案了嗎?任何輸入讚賞。

編輯:

所以我覺得這一分析相當不錯(其中包括all_tags我感興趣的密鑰和schema.org等同價值的標籤):

RDF::RDFa::Reader.open(url) do |reader| 
     reader.each_statement do |statement| 
      tag = statement.predicate.to_s.split('/')[-1].split('#')[-1] 
      Rails.logger.debug "rdf tag: #{tag}" 
      Rails.logger.debug "rdf predicate: #{statement.predicate}" 
      if all_tags.keys.include? tag 
      Rails.logger.debug "Found mapping for #{statement.predicate} and #{all_tags[tag]}" 
      results[all_tags[tag]] = statement.object.to_s.strip 
      end 
     end 
     end 

回答

4

對於原來的問題,你是在正確的軌道上。實際上,我們在structured-data.org linter中做類似的事情。查看GitHub回購可能會對您有所幫助。基本思想是格式化檢測並選擇合適的閱讀器(RDFa,Microdata或其他)。一旦閱讀,你會有一個圖表。您需要遍歷圖中的每條語句並創建一個新的輸出圖,其中謂詞和類型基於您的表映射。因此,例如,如果在源圖中將dv:name表示爲謂詞,則可以在輸出圖中輸出schema:name。

確定類型還需要一個映射表來提供適當的輸出類型。請注意,OGP實際上並不使用rdf:type,因此您需要使用ogp:type來查找語句,並與映射的類一起輸出rdf:類型。

解決整個問題的另一種方法是創建一個包含owl:equivalentProperty/equivalentClass斷言的詞彙表,並執行OWL包含以將適當的三元組添加到原始圖中。在這一點上,Ruby的工具集還沒有達到這個水平。

+1

感謝您的驗證!另一種方法聽起來像最乾淨和最可靠的。 – imorsi

4

關於Schema.org映射,我們正在收集相關鏈接http://www.w3.org/wiki/WebSchemas。如果您生產任何新的,請添加它們。

參見:

在某些時候你」無疑會遇到超越簡單的「這與此相同」或「這意味着」三重模式的映射。您應該可以進一步使用SPARQL查詢,特別是如果您有支持v1.1的SPARQL引擎。最終,映射任務有時需要自定義代碼。

+0

這些都是很好的資源,謝謝! – imorsi

相關問題