5

我主要使用 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
4

2 回答 2

4

对于原始问题,您走在正确的轨道上。事实上,我们在结构化数据.org linter中做类似的事情。查看 GitHub 存储库可能对您有用。基本思想是格式化检测并选择合适的阅读器(RDFa、微数据或其他)。阅读后,您将获得一个图表。您需要遍历图中的每个语句并创建一个新的输出图,其中包含基于您的表映射的谓词和类型。因此,例如,如果您将 dv:name 作为源图中的谓词,则可以在输出图中输出 schema:name。

确定类型还需要一个映射表来提供适当的输出类型。请注意,OGP 实际上并不使用 rdf:type,因此您需要找到一个带有 ogp:type 的语句并输出一个 rdf:type 以及映射的类。

处理整个事情的另一种方法是使用 owl:equivalentProperty/equivalentClass 断言创建一个词汇表,并执行 OWL 蕴涵以将适当的三元组添加到原始图。Ruby 的工具集目前还没有达到这个水平。

于 2011-08-27T01:42:02.877 回答
4

关于 Schema.org 映射,我们正在http://www.w3.org/wiki/WebSchemas收集相关链接。如果您生产任何新的,请添加它们。

也可以看看:

在某些时候,您无疑会遇到超越简单的“这与那个相同”或“这意味着”三重模式的映射。您应该能够使用 SPARQL 查询更进一步,特别是如果您有一个支持 v1.1 的 SPARQL 引擎。最终,映射任务有时需要自定义代码。

于 2011-10-23T19:48:47.630 回答