【问题标题】:Parsing RDFa in html/xhtml?在 html/xhtml 中解析 RDFa?
【发布时间】:2014-01-13 02:38:33
【问题描述】:

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

【问题讨论】:

    标签: html xml perl parsing rdfa


    【解决方案1】:

    (我是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 => @_ );
    }
    

    【讨论】:

    猜你喜欢
    • 2021-09-30
    • 2015-10-06
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    相关资源
    最近更新 更多