我主要使用 Ruby 来执行此操作,但到目前为止我的攻击计划如下:
使用 gems rdf、rdf-rdfa 和 rdf-microdata 或 mida 来解析给定任何 URI 的数据。我认为最好映射到像 schema.org 这样的统一模式,例如,以这个 yaml 文件为例,它试图描述 data-vocabulary 和 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 之后为我的表建模,我想知道记录的“事物”(事物)的类型。因此,如果我解析一个 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