Я в основном использую Ruby для этого, но мой план атаки на данный момент следующий:
Используйте gems rdf, rdf-rdfa и либо rdf-microdata или mida для анализа данных с любым URI. Я думаю, что было бы лучше сопоставить с единой схемой, такой как schema.org, например, возьмите этот файл yaml, который пытается описать преобразование между словарем данных и opengraph в 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
Затем я могу сохранить найденную информацию в одном формате и повторно отобразите их с синтаксисом schema.org.
Другая часть - определение типа. Я бы смоделировал свои таблицы после schema.org и хотел бы знать, какой тип «вещи» ( 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