通常,在XML中,当#前缀在短文本字符串上时,它用于指示XML"片段"。它只是在加载整个页面后告诉浏览器跳转到XHTML元素,并使用@ID属性将该文本指定为ID。
在RDFa中,人们在创建词汇表时似乎倾向于使用这个词,以避免为每个不同的术语创建不同的URL的必要性。假设主URI是类似于"www.example.com/glossary/"的东西,那么词汇表创建者可以选择使词汇表中术语的URI具有类似于这样的URI:"www.example.com/sglossary/term1"或类似于这样:"www.sample.com/glossary#term1"没有区别的区别。然而,如果所述创建者打算创建一个网页来描述所述词汇表,那么他们可能更容易使用后者,因为整个词汇表的描述出现在一个URL为"www.example.com/glossary/index.html"的网页上,并且#term1将导致浏览器跳到XHTML元素,其中term1使用@ID属性设置为ID。
然而,问题是,在关于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"属性,这些元素可能已经创建,也可能没有创建,但在示例中根本没有提到?
或者所有这些教程和示例的作者都只是简单地使用教程中普遍接受的简写,而却没有解释他们到底在做什么?如果是这样的话,我有很多家伙,当我遇到他们时,我会大吃一惊。
在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中分散的内容。
简而言之:
- 在RDFa中使用about是一种非常好的做法,因为它有助于将您的数据与其他数据链接起来。动手
- 对于about属性,不要重用id="#xyz"用于导航目的的片段
因此,如果要跳转到产品的片段标识符是
<div id="product"> blablabla> </div>
不要使用about=#product",而是例如about="#product_data"来识别数据对象。
- 只要您谈论的是同一对象(例如,同一产品、同一公司),就可以多次使用about属性和同一标识符
现在,为什么片段标识符在示例中如此流行?因为使用该模板,你可以很容易地获得每个页面的全局标识符——想想一家有1000件商品在售的商店吧。如果添加
about="#product_data"
到产品数据标记元素,那么每个产品都将有一个其他产品可以引用的全局标识符
注意事项:一些模板将所有单独页面的基本URI设置为主页。在这种情况下,所有产品都将获得相同的URI。因此,如果将基本URI设置为除个别页面的规范URI之外的任何内容,则相对URI都不起作用。