向网站添加语义的最佳实践

时间:2013-04-14 14:19:37

标签: semantic-web rdfa

我对网站的语义有点困惑。我知道每个URI都应该代表一个资源。我假设RDFa在网页内提供的所有信息都描述了该网页的URI所代表的资源。我的问题是:为网站的子页面提供语义数据的最佳做法是什么。

在我的情况下,我想使用带有schema.org和opengraph词汇表的RDFa为一个名为magma的剧院组创建一个网站。假设我有一个欢迎页面(http://magma.com/),一个联系页面(http://magma.com/contact/)和各个游戏的页面(http://magma.com/play/<playid>/)。

现在我认为欢迎页面和联系页面代表相同的资源(岩浆),同时提供有关该资源的不同信息。然而,剧本页面代表恰好由岩浆执行的剧本。或者更好地说,游戏页面也代表了岩浆,但提供了由该组执行的游戏信息?我偶然发现的第三个选项是http://schema.org/WebPage。特别是像ContactPage这样的子类似乎是相关的。

说到实施,我在哪里放RDFa?

最后:我的选择如何改变第三方(google,facebook,...)对待网站的方式?

我意识到这个问题有点模糊。为了使它更具体,我将添加一个你可能会批评的例子:

<html vocab="http://schema.org/" typeof="TheaterGroup">
  <head>
    <meta charset="UTF-8"/>
    <title>Magma - Romeo and Juliet</title>

    <!-- magma sematics from a template  file -->
    <meta property="name" content="Magma"/>
    <meta property="logo" content="/static/logo.png"/>
    <link rel="home" property="url" content="http://magma.com/"/>
  </head>

  <body>
    <h1>Romeo and Juliet</h1>

    <!-- semantics of the play -->
    <div typeof="CreativeWork" name="Romeo and Juliet">
      ...
    </div>

    <h2>Shows</h2>

    <!-- samantics of magma events -->
    <ul property="events">
      <li typeof="Event"><time property="startDate">...</time></li>
      ...
    </ul>
  </body>
</html>

2 个答案:

答案 0 :(得分:10)

  

我知道每个URI都应该代表一个资源。我假设RDFa在网页中提供的所有信息都描述了该网页的URI所代表的资源。

嗯,HTTP URI可以识别页面本身或页面的内容。您无法通过简单地查看URI来判断URI是否标识了该页面。

示例(在Turtle语法中):

<http://en.wikipedia.org/wiki/The_Lord_of_the_Rings> ex:author "John Doe"

可以表示具有URI http://en.wikipedia.org/wiki/The_Lord_of_the_Rings的HTML页面由“John Doe”创作。或者它可能意味着该HTML页面描述的东西(→小说)由“John Doe”创作。当然这是一个重要的区别。

有多种方法可以区分URI代表什么,并且存在一些争议。围绕此问题的讨论称为 httpRange-14问题。例如,参见维基百科文章Web resource

一种方法是使用哈希URI see also this answer)。示例:http://magma.com/play/42可以识别关于播放的页面http://magma.com/play/42#play可以识别播放

另一种方法是使用 HTTP状态代码303 。代码200给出了关于该事物的页面的表示,代码303 See Other给出了标识该事物的附加URI。 DBpedia使用此方法:

请参阅Choosing between 303 and Hash

现在,在使用RDFa时,您可以对页面本身和页面所代表的事物进行声明。只需使用相应的URI作为主题(例如,使用resource attribute)。

所以让我们说http://magma.com/#magma代表剧团。现在,您可以在每个页面(/ contact,/ play /,...)上使用此URI来生成关于组的语句。引用该组。

<div resource="http://magma.com/#magma">
  <span property="ex:name">Magma</span>
</div>

<div resource="http://magma.com/">
  <span property="ex:name">Website of Magma</span>
</div>

答案 1 :(得分:2)

我建议您先查看schema.org straightforward documentation。这个词汇表非常全面,可以满足您的需求并得到主要搜索引擎的支持。

以下是您开始使用的代码段示例,您可以将其直接包含在HTML页面中。当您在页面上谈论该剧的表现时,您可以使用:

<div itemscope itemtype="http://schema.org/TheaterEvent">
  <h1 itemprop="name">Romeo and Juliet</h1>
  <span itemprop="location">Council Bluffs, IA, US</span>
  <meta itemprop="startDate" content="2011-05-23">May 23
  <a href="/offers.html" itemprop="offers">Buy tickets</a>
</div>

在您的联系页面上,您可以包括:

<div itemscope itemtype="http://schema.org/TheaterGroup">
  <span itemprop="name">Magma</span>
  Tel:<span itemprop="telephone">( 33 1) 42 68 53 00 </span>
</div>