2

通常,在 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,那么这是没有区别的区别。但是,如果所述创建者打算创建一个网页来描述所述词汇表,那么他们可能更容易使用后者,因为整个词汇表的描述出现在 URL 为“www.example.com”的一个网页上。

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

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

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

我们是否创建了一个使用#jane 作为其节点 ID 的空白节点 (bNode),然后开始谈论该空白节点?但是,我认为创建空白节点的正确方法是 about="[_:jane]" 所以我很困惑。

或者我们是在谈论一些 XHTML 元素,包含 ID="jane" 属性,在同一页面上的其他地方,可能已经创建,也可能没有创建,但在示例中根本没有提到?

还是所有这些教程和示例的作者都只是使用教程中普遍接受的速记,但没有解释他们到底在做什么?如果是这样,我有很多帅哥,当我遇到他们时,我会打得头晕目眩。

4

1 回答 1

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 属性。

所以如果要跳转到产品的片段标识符是

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

不要使用 about=#product",而是使用 about="#product_data" 来标识数据对象。

  1. 使用相同的标识符多次使用 about 属性是完全可以的,只要您谈论的是同一个对象(例如,同一个产品,同一个公司)。

现在,为什么片段标识符在示例中如此流行?因为您将使用该模板轻松获得每个单独页面的全局标识符 - 想想一个有 1,000 件商品的商店。如果你添加

about="#product_data" 

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

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

于 2012-02-20T18:30:25.893 回答