什么是解析RDFa,Microdata等的最佳方法,使用统一的模式/词汇表来存储和显示信息(例如,schema.org)

时间:2011-08-26 05:49:53

标签: ruby semantic-markup rdfa microdata schema.org

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

2 个答案:

答案 0 :(得分:4)

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

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

另一种处理整个问题的方法是使用owl:equivalentProperty / equivalentClass断言创建一个词汇表,并执行OWL蕴涵以向原始图形添加适当的三元组。目前,Ruby的工具集尚未达到此目的。

答案 1 :(得分:4)

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

另见:

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