如何将 atom:link 和 rel="self" 添加到 rss 文档?

How do you add atom:link with rel="self" to an rss document?

我正在尝试创建一个非常简单的 rss 提要。我使用 this 服务表单 w3.org 验证我的 rss。这是我的 Feed 的样子:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>example.com RSS</title>
        <link>https://www.example.com/</link>
        <description>A cool website</description>
        <item>
            <title>Cool Article</title>
            <link>https://www.example.com/cool-article</link>
            <guid>https://www.example.com/cool-article</guid>
            <pubDate>Sun, 10 Dec 2017 05:00:00 GMT</pubDate>
            <description>My cool article description</description>
        </item>
    </channel>
</rss>

但我从 Feed 验证程序中收到此错误:

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

line 14, column 4: Missing atom:link with rel="self" [help]

所以我点击 [help] 得到这个:

If you haven't already done so, declare the Atom namespace at the top of your feed, thus:

Then insert a atom:link to your feed in the channel section. Below is an example to get you started. Be sure to replace the value of the href attribute with the URL of your feed.

<atom:link href="http://dallas.example.com/rss.xml" rel="self" type="application/rss+xml" />

好的,首先我试图验证 rss,不是 Atom,但他们似乎试图引导我朝着 Atom 的方向发展。好的,我还是试试看

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>example.com RSS</title>
        <link>https://www.example.com/</link>
        <description>A cool website</description>
        <atom:link href="http://www.example.com/rss.xml" rel="self" type="application/rss+xml" />
        <item>
            <title>Cool Article</title>
            <link>https://www.example.com/cool-article</link>
            <guid>https://www.example.com/cool-article</guid>
            <pubDate>Sun, 10 Dec 2017 05:00:00 GMT</pubDate>
            <description>My cool article description</description>
        </item>
    </channel>
</rss>

验证它并给你这个错误:

Self reference doesn't match document location [help]

所以我点击 [help] 得到这个:

Check the document referenced by the href attribute. If it is not the intended feed, correct it.

This may not be a problem. At the current time, the feedvalidator does not probe to assess equivalence of documents.

这就是我被困的地方。他们没有说如何让它做到这一点。我是否可以通过阅读原子规范并将我的提要重新实现为原子来做到这一点?因为我不会那样做。

如消息所述,提要有效。因此,您可以在不对 Feed 进行任何更改的情况下继续操作。 None 我的 Feed 有 link 并且它们工作得很好。该消息非常陈旧且不准确。

您不必将提要从 RSS 转换为 Atom 即可支持 atom:link

要解决此问题,请在 atom:link 元素中将 href 属性的值更改为 RSS 提要的 URL。因此,如果您的 RSS 提要位于 http://dallas.example.com/rss.xml,则 atom:link 元素应为:

<atom:link href="http://dallas.example.com/rss.xml" rel="self" 
type="application/rss+xml" />

在您的 RSS 提要中包含一个 atom:link 元素可以使其更便于携带和缓存。有关详细信息,请访问 RSS Best Practices Profile.

验证器经常出错或令人困惑。我最近正在生成一个 Atom 文档并尝试使用该工具进行检查,它开始向我提供有关 RSS 中缺少标签的建议...摆脱该工具建议的 atom:link 标签,它不是用于 Atom 文档RSS。我只是仔细检查 RSS 规范而不是使用该工具。

Self reference doesn't match document location [help]

它可能正在再次检查 Atom 规范。即使它是有效的 Atom 文档,如果您将 xml 内容粘贴到该工具中,您也会收到该消息。它检查 atom 中的 'self' link 是否与提供 atom 文档的位置相同。

这里已经有很好的答案,我猜 Dave Winer 的答案是权威的,但对于我们这些希望尽可能消除验证错误的人来说......

这可能是方案不匹配的情况 - 在此示例中,可能在 https://www.example.com/rss.xml, but atom:link specifies that the feed is to be found at http://www.example.com/rss.xml 请求了 Feed。

注意 httphttps:

<link>https://www.example.com/</link>
<atom:link href="http://www.example.com/rss.xml" rel="self" type="application/rss+xml" />

这个花了我一些时间!

<atom10:link
    xmlns:atom10="http://www.w3.org/2005/Atom"
    rel="self"
    type="application/rss+xml"
    href="https://example.com/news.rss"
/>

当它告诉您添加一个 <atom:link> 时,错误消息不是很有用,因为它应该告诉您添加一个 <atom10:link>.

这是它的工作演示:W3C Validator