加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 解析RDFa,Microdata等的最佳方法是,使用统一的模式/词汇

发布时间:2020-12-17 03:35:06 所属栏目:百科 来源:网络整理
导读:我主要使用 Ruby来做到这一点,但到目前为止我的攻击计划如下: 使用gems rdf,rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据.我认为最好映射到schema.org之类的统一模式,例如,使用这个yaml文件试图描述数据词汇表和opengraph到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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读