2011-08-26 8 views
5

Używam głównie Ruby, ale mój plan ataku do tej pory jest w następujący sposób:Jaki jest najlepszy sposób analizowania RDFa, mikrodanych, itp., Przechowywania i wyświetlania informacji z powrotem za pomocą jednolitego schematu/słownictwa (np. Schema.org)

Skorzystaj z klejnotów rdf, rdf-rdfa i rdf-microdata lub mida, aby analizować dane z dowolnym identyfikatorem URI. Myślę, że byłoby najlepiej, aby mapować do jednolitego schematu schema.org jak na przykład wziąć ten plik yaml który próbuje opisać konwersji pomiędzy danymi słownictwo i opengraph do 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 

mogę następnie przechowuj informacje znalezione w jednym formacie i wyświetlaj je ponownie za pomocą składni schema.org.

Druga część to określenie typu. Modelowałem swoje tabele po schema.org i chciałbym wiedzieć, jaki jest typ "Thing" (Thing). Więc jeśli parsuję typ "paska" typu opengraph, zapisałbym go jako "BarOrPub" (BarOrPub).

Czy jest lepszy sposób to zrobić? Coś zautomatyzowanego? Rozwiązanie już tam jest? Wszelkie dane wejściowe zostały docenione.

EDIT:

Więc jestem stwierdzenia, że ​​ten analizuje całkiem dobrze (gdzie all_tags zawiera tagów jestem zainteresowany jak klucze i schema.org jako ekwiwalent wartości):

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 

Odpowiedz

4

Jeśli chodzi o oryginalne pytanie, jesteś na dobrej drodze. W rzeczywistości robimy podobne rzeczy w structured-data.org linter. Przydatne może być sprawdzenie repozytorium GitHub. Podstawową ideą jest formatowanie wykrywania i wybór odpowiedniego czytnika (RDFa, Microdata lub cokolwiek innego). Po przeczytaniu otrzymasz wykres. Będziesz chciał przejść przez każdą instrukcję na wykresie i utworzyć nowy wykres wyjściowy z predykatami i typami mapowanymi na podstawie Twojej tabeli. Na przykład, jeśli powiesz dv: name jako predykat na wykresie źródłowym, możesz wypisać na schemacie wyjściowym schemat: name.

Określenie typu będzie również wymagało tabeli odwzorowania do wymyślenia odpowiedniego typu wydruku. Zauważ, że OGP w rzeczywistości nie używa rdf: type, więc musisz znaleźć instrukcję z ogp: wpisz i wypisz rdf: type wraz z mapowaną klasą.

Innym sposobem podejścia do całości byłoby stworzenie słownika z asemunami owl: equivalentProperty/equivalentClass i wykonanie polecenia OWL, aby dodać odpowiednie trójek do oryginalnego wykresu. Zestaw narzędzi Ruby nie jest (jeszcze) dość do tego w tym momencie.

+1

Dziękujemy za sprawdzenie poprawności! Alternatywne podejście brzmi jak najczystsze i najbardziej niezawodne. – imorsi

4

Jeśli chodzi o mapowania Schema.org, zbieramy odpowiednie linki pod adresem http://www.w3.org/wiki/WebSchemas. Jeśli tworzysz nowe, dodaj je.

Zobacz także:

w pewnym momencie” Bez wątpienia natrafię na mapowania, które wykraczają poza proste "to jest to samo" lub "to implikuje, że" potrójne wzory.Powinieneś być w stanie pójść dalej przy użyciu zapytań SPARQL, szczególnie jeśli masz silnik SPARQL obsługujący v1.1. W końcu zadania mapowania wymagają czasem niestandardowego kodu.

+0

To są świetne zasoby, dzięki! – imorsi

Powiązane problemy