html - 在 html/xhtml 中解析 RDFa?

标签 html xml perl parsing rdfa

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

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

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');

最佳答案

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

看起来 RDFa 解析器使用的 HTML 解析器在该页面上失败了。 (我也是相关 HTML 解析器的维护者,所以我不能把责任推给任何人!)因此,当 RDFa 解析开始时,它看到的只是一棵空的 DOM 树。

页面是quite hideously invalid XHTML但我仍然希望 HTML 解析器能够完成合理的工作。我有 filed a bug report for you .

与此同时,一个解决方法可能是在 RDF::RDFa::Parser 之外构建 XML::LibXML DOM 树(也许使用 libxml 的内置 HTML 解析器?)。您可以将该树直接传递给 RDFa 解析器:

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 的可能实现...

sub somehow_build_a_dom_tree {
    my $p = XML::LibXML->new;
    $p->recover_silently(1);
    $p->load_html( string => @_ );
}

关于html - 在 html/xhtml 中解析 RDFa?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20767903/

相关文章:

Perl:解码二进制文件中的时间戳

perl - 为什么这个返回 PerlIO* 的 XS 代码会泄漏?

javascript - 在 td 内追加 div 并设置值?

html - Firefox 中的 CSS 高度 100% 不起作用

xml - 使用 XSLT 转义内部子节点时,根 xml 命名空间被错误映射

java - 在经典在线教程中找到正确的文件来构建 Android 项目

java - Selenium IDE - Javascript 警报,按 Enter,要使用哪个目标?

html - 如何将复选框放在div的底部?

java - 程序如何决定xml文件的编码?

regex - 从命令行打印正则表达式的所有匹配项?