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

tob*_*bib 5 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?

最后:我的选择将如何改变第三方(谷歌,脸谱,...)对待网站的方式?

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

<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>
Run Code Online (Sandbox Code Playgroud)

uno*_*nor 10

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

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

示例(在Turtle语法中):

<http://en.wikipedia.org/wiki/The_Lord_of_the_Rings> ex:author "John Doe"
Run Code Online (Sandbox Code Playgroud)

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

有多种方法可以区分URI代表什么,并且存在一些争议.围绕此讨论被称为httpRange-14问题.例如,参见Wikipedia文章Web资源.

一种方法是使用哈希URI(另请参阅此答案).示例:http://magma.com/play/42可以识别有关该剧的页面,http://magma.com/play/42#play可以识别该剧.

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

请参阅303和Hash之间的选择.

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

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

<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>
Run Code Online (Sandbox Code Playgroud)

  • @tobib:这对它们用于搜索结果的URI等没有任何影响,因为它们通常对页面感兴趣,而不是它们可能代表的内容。但是,当然,服务可能会解释/理解关于您所提供的东西的陈述,并随其喜欢的信息而使用这些信息。我不了解Facebook,但是AFAIK他们只使用[Open Graph](http://ogp.me/)词汇表。Google可能仅使用[已记录的词汇表](http://support.google.com/webmasters/bin/answer.py?hl=zh_CN&amp;answer=99170)。但是我对他们的服务不好。 (2认同)