ruby – 解析RDFa,Microdata等的最佳方法是,使用统一的模式/词汇
我主要使用
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的工具集尚未达到此目的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |