2011-08-26 25 views
5

Sto usando principalmente Ruby per farlo, ma il mio piano di attacco finora è come segue:Qual è il modo migliore per analizzare RDFa, Microdata, ecc, archiviare e visualizzare le informazioni usando uno schema/vocabolario uniforme (schema.org per esempio)

Utilizzare le gemme rdf, rdf-rdfa e rdf-microdata o mida per analizzare i dati forniti da qualsiasi URI. Penso che sarebbe meglio per mappare a uno schema uniforme come schema.org, ad esempio, prendere questo file YAML, che cerca di descrivere la conversione tra i dati-vocabolario e Opengraph a schema.org:

# 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 

posso quindi memorizzare le informazioni trovate in un formato e visualizzarle nuovamente con la sintassi schema.org.

L'altra parte è di tipo determinante. Modellerei i miei tavoli dopo schema.org e mi piacerebbe sapere il tipo di "Cosa" (Thing) sarebbe un record. Quindi, se analizzo un tipo di "barra" di tipo "opengraph", lo memorizzo come "BarOrPub" (BarOrPub).

C'è un modo migliore per farlo? Qualcosa di automatizzato? Una soluzione già là fuori? Qualsiasi input apprezzato.

EDIT:

Così ho constatato che questo analizza abbastanza bene (dove all_tags comprende i tag mi interessa come chiavi e schema.org equivalenti come valore):

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 

risposta

4

Per la domanda originale, sei sulla strada giusta. In effetti, facciamo cose simili nel structured-data.org linter. Potrebbe essere utile per te controllare il repository GitHub. L'idea di base è quella di formattare il rilevamento e scegliere il lettore appropriato (RDFa, Microdata o qualsiasi altra cosa). Una volta letto, avrai un grafico. Dovrai scorrere ogni istruzione nel grafico e creare un nuovo grafico di output con predicati e tipi mappati in base alla tabella. Quindi, per esempio, se si dice dv: name come predicato nel grafico sorgente, si può stampare schema: nome nel grafico di output.

Determinare il tipo richiederà anche una tabella di mappatura per ottenere il tipo di output appropriato. Nota che OGP in realtà non usa rdf: type, quindi dovrai trovare una dichiarazione con ogp: type ed emettere un rdf: type insieme alla classe mappata.

Un altro modo per avvicinarsi al tutto sarebbe creare un vocabolario con gufo: equivalentiProprietà/equivalentiClass asserzioni ed eseguire OWL entailment per aggiungere triple appropriate al grafico originale. A questo punto, il set di strumenti di Ruby non è (ancora) all'altezza.

+1

Grazie per la convalida! L'approccio alternativo sembra il più pulito e affidabile. – imorsi

4

Per quanto riguarda i mapping Schema.org, stiamo raccogliendo i collegamenti pertinenti a http://www.w3.org/wiki/WebSchemas. Se ne produci di nuovi, per favore aggiungili.

Consulta anche:

Ad un certo punto' Sicuramente incapperò in mappature che vanno oltre il semplice "questo è lo stesso di quello" o "questo implica che" i tripli schemi.Dovresti essere in grado di andare avanti in qualche modo usando le query SPARQL, in particolare se hai un motore SPARQL che supporta la versione 1.1. E alla fine, le attività di mappatura a volte richiedono un codice personalizzato.

+0

Queste sono grandi risorse, grazie! – imorsi