RDFa中pound-sign / hash-mark的完整含义

时间:2012-02-20 05:32:00

标签: syntax xhtml fragment-identifier rdfa

通常,在XML中,#(当作为短文本字符串作为前缀时)用于表示XML“片段”。它只是告诉浏览器跳转到XHTML元素,并在整个页面加载后使用@ID属性指定为ID。

在RDFa中,人们似乎倾向于在创建词汇表时使用它,以避免为每个不同的术语创建不同的URL。假设主URI类似于“www.example.com/vocabulary/”,那么词汇创建者可以选择使词汇表的URI具有如下URI:“www.example.com/vocabulary/term1”或者像这样:“www.example.com/vocabulary#term1”。如果这些URI只被用作无法解析为实际网页的空灵URI,那么它就是一个没有区别的区别。但是,如果所述创建者打算创建一个描述所述词汇表的网页,那么他们可能更容易使用后者,因为整个词汇表的描述出现在一个网页上,网址为“www.example.com/” vocabulary / index.html“和#term1将使浏览器跳转到XHTML元素,并使用@ID属性将term1设置为ID。

然而,问题是,我也看到哈希标记在各种解释和RDFa教程中使用了不同的方式。我已经看到它在@about属性中使用,如下所示:

<span about="#jane">
    <!-- Other RDFa or XHTML in here. -->
</span>

在这种情况下,这些教程声称#jane现在是一个主题URI,可以编写谓词和对象。但是,如果#jane是一个URI,那么“她”的完整URI是什么?是#jane附加到页面末尾的页面的当前基URI吗?如果是这样,那么about =“#jane”属性是否在同一个XHTML元素中提供了与ID =“jane”属性相同的函数?但是,关于=“#jane”可以用在许多不同的XHTML元素中,这些元素会给它们所有相同的ID,这是非法的。

我们是否创建了一个空白节点(bNode),它使用#jane作为其节点ID,然后开始说明该空白节点的内容?但是,我认为创建一个空白节点的正确方法是关于=“[_:jane]”所以我很困惑。

或者我们是否正在谈论一些XHTML元素,其中包含ID =“jane”属性,在同一页面的其他地方可能已创建或未创建,但在示例中未提及?

是所有这些教程和示例的所有作者,只是简单地使用教程中普遍接受的速记,但没有解释他们正在做什么?如果是这样的话,我会遇到很多家伙,当我遇到他们的时候,我会站起来。

1 个答案:

答案 0 :(得分:2)

在RDFa中,about =“#xyz”指定相对URI作为以下RDF语句主题的标识符。 关于如何从本地标识符派生全局URI的正式规范有点复杂,但实际上,它将是资源的基URI加上片段部分。如果未明确设置文档的基URI,则这将是从中检索表示的URI。

因此,如果您有一个文件product.html并在URI

下提供此文件

http://www.example.org/product.html(请注意,本地文件名和公共URI不是硬连线的),

然后是一个节点

<div typeof="http://purl.org/goodrelations/v1#Offering" about="#offer">
...
</div>

将为此数据元素分配全局URI

http://www.example.org/product.html#offer

现在,你需要做什么?

最常见的情况是,您可能希望在另一个资源中创建关于此实体的声明,然后可以使用该声明来整理巨型图中相同对象的所有信息。

但是您也可以使用该技术来整理分散在同一HTML文档中的元数据,因为使用“about”多次使用相同的标识符是完全合法的。

例如,你可以使用这个

<div typeof="http://purl.org/goodrelations/v1#Offering" about="#offer">
<span property="gr:name">ACME Anvil</span>
</div>

和以下500行:

<div typeof="http://purl.org/goodrelations/v1#Offering" about="#offer">
<span property="gr:description">The ACME Anvil is the most advanced anvil that money can buy</span>
</div>

然后,RDFa解析器将知道gr:name和gr:description属性都属于同一个对象。

在微数据语法中,您可以使用稍微优雅的“itemref”关键字来直接链接包含引用同一对象的元数据的HTML元素。在RDFa中,您只能通过重复使用“about”的相同标识符来间接整合散布在HTML周围的内容。

简而言之:

  1. 在RDFa中使用about是一种非常好的做法,因为它有助于将数据与其他数据相关联。做吧!
  2. 请勿重复使用id =“#xyz”用于导航目的的片段作为about属性。
  3. 因此,如果跳转到产品的片段标识符是

    <div id="product"> blablabla> </div>
    

    不要使用about = #product“,但例如about =”#product_data“用于标识数据对象。

    1. 只要你谈论同一个对象(例如同一个产品,同一个公司),就可以多次使用具有相同标识符的about属性。
    2. 现在,为什么片段标识符在示例中如此受欢迎?因为您可以使用该模板轻松获取每个页面的全局标识符 - 想想一个有1,000件商品的商店。如果你添加

      about="#product_data" 
      

      到产品数据标记元素,然后每个产品都有一个其他人可以引用的全局标识符。

      警告:有些模板会将所有单个页面的基本URI设置为主页面。在这种情况下,所有产品都将获得相同的URI。因此,如果您将基本URI设置为除该单个页面的规范URI之外的任何内容,则相对URI不起作用。