首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在html/xhtml中解析RDFa?

在html/xhtml中解析RDFa?
EN

Stack Overflow用户
提问于 2013-12-25 07:53:02
回答 1查看 256关注 0票数 2

使用perl中的RDF::RDFa::Parser模块解析出网站的rdf数据。在带有!DOCTYPE html PUBLIC“-/W3C//DTD HTML 4.01过渡//EN”>的网站上,它可以工作,但在使用xhtml !DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML1.0过渡//EN“"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">的网站上没有输出...

测试网站-> http://www.filmstarts.de/kritiken/186918.html

代码语言:javascript
复制
use RDF::RDFa::Parser;

my $url     = 'http://www.filmstarts.de/kritiken/186918.html';
my $options = RDF::RDFa::Parser::Config->tagsoup;
my $rdfa    = RDF::RDFa::Parser->new_from_url($url, $options);

print $rdfa->opengraph('image');
print $rdfa->opengraph('description');
EN

回答 1

Stack Overflow用户

发布于 2013-12-25 08:20:43

(我是RDF::RDFa::Parser的作者。)

看起来RDFa解析器使用的超文本标记语言解析器在该页面上失败了。(我也是所讨论的HTML解析器的维护者,所以我不能将责任推给其他任何人!)因此,当RDFa解析开始时,它看到的只是一个空的DOM树。

页面是quite hideously invalid XHTML的,但我仍然希望HTML解析器能做一个合理的工作。我已经filed a bug report for you了。

同时,一种变通办法可能是在RDF::RDFa::解析器之外构建XML::LibXML DOM树(可能使用libxml的内置HTML解析器?)。您可以将该树直接传递给RDFa解析器:

代码语言:javascript
复制
use RDF::RDFa::Parser;
use LWP::Simple qw(get);

my $url     = 'http://www.filmstarts.de/kritiken/186918.html';
my $xhtml   = get($url);
my $dom     = somehow_build_a_dom_tree($xhtml);  # hand-waving!!
my $options = RDF::RDFa::Parser::Config->tagsoup;
my $rdfa    = RDF::RDFa::Parser->new($dom, $url, $options);

print $rdfa->opengraph('image');
print $rdfa->opengraph('description');

我希望这对你有帮助!

更新:这是somehow_build_a_dom_tree的一个可能的实现...

代码语言:javascript
复制
sub somehow_build_a_dom_tree {
    my $p = XML::LibXML->new;
    $p->recover_silently(1);
    $p->load_html( string => @_ );
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20767903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档