在HTML中展示街道地址的最语义化方式是什么?

38

我有一个地址需要在网站上显示,但它不是网页作者的地址。根据w3c推荐,这应该如何编码以保持语义:

作者可以使用ADDRESS元素为文档或文档的重要部分(例如表单)提供联系信息。该元素通常出现在文档开头或结尾。

建议在页面中使用一个ADDRESS元素将地址展示出来并标识它不是作者地址。例如: ```
123 Main St, Anytown USA
```

@Franz:Microformats使用类来描述它们的内容,这是完全合法的。 - Gumbo
你能否在地址标签内语义化地显示一个微格式化的地址? - Ally
@Ally:是的,这是可能的。 - Gumbo
虽然我个人喜欢使用微格式,但还是要适度使用。值得一提的是,Jeff Atwood等人可能持有反对观点,可以参考这篇文章:http://www.codinghorror.com/blog/2009/12/microformats-boon-or-bane.html - David Thomas
这个网站很好地介绍了如何为街道地址添加样式以及如何处理HTML本身(与hCard无关)。 - Kzqai
显示剩余3条评论
4个回答

25
你可以使用hCard微格式来描述你的地址。微格式的优点是你可以在现有文档中使用它们来丰富文档。
这里是一个从微格式维基示例派生出来的示例:
<address class="vcard">
  <span class="adr">
    <span class="street-address">169 University Avenue</span>
    <span class="locality">Palo Alto</span>,  
    <abbr class="region" title="California">CA</abbr>&nbsp;&nbsp;
    <span class="postal-code">94301</span>
    <span class="country-name">USA</span>
  </span>
</address>

2
谢谢您指出地址标签内不允许使用div :) - Ally
26
考虑到问题所提出的“这不是页面作者的地址”,就不应该使用HTML地址元素address。地址元素仅用于页面或文章作者的联系信息。在这里,地址元素应该是div,尽管p也可以接受。HTML5草案对此更加具体:http://dev.w3.org/html5/spec/sections.html#the-address-element。 - Stephen Booher
9
这个回答具有误导性,因为正如@StephenBooher指出的那样,地址元素不应该用于通用地址。 - User
一个hcard/vcard需要有一个名称 http://microformats.org/wiki/hcard#Property_List - Tristanisginger
1
规范说明正确的语义用法(由于@StephenBooher链接已失效)- https://www.w3.org/wiki/HTML/Elements/address - zumek
@Ally div标签可以在address标签内使用。请参见此处的允许内容部分:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/address - VKK

12

Gumbo 的回答缺少一个要素。一个hcard/vcard 必须有一个名字(fn)。

http://microformats.org/wiki/hcard#Property_List

此外,在这种情况下不应使用address标签,因为它专门用于与显示在页面上的作者相关联。

<div class="vcard">
  <span class="fn">Tristan Ginger</span>
  <span class="adr">
    <span class="street-address">169 University Avenue</span>
    <span class="locality">Palo Alto</span>,  
    <abbr class="region" title="California">CA</abbr>
    <span class="postal-code">94301</span>
    <span class="country-name">USA</span>
  </span>
</div>

大多数想在网站上显示地址的企业应该使用以下内容:

<address class="vcard">
  <span class="fn org">Tristan Ginger Inc</span>
  <span class="adr">
    <span class="street-address">69 University Avenue</span>
    <span class="locality">Great Bookham</span>,  
    <span class="region">Surrey</span>
    <span class="postal-code">KT22 9TQ</span>
    <span class="country-name">UK</span>
  </span>
</address>

4

你可以使用RDFa,例如:

<html
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xmlns:address="http://schemas.talis.com/2005/address/schema#"
    xml:lang="fr" lang="fr"
>
 <head>...</head>
 <body>
  <div typeof="foaf:Person" about="http://you.openid.com#me">
   <span id="name" property="foaf:name">First Name, Last Name</span>
   <address property="address:streetAddress">My Street, My City</address>
  </div>
 </body>
</html>

2
您可以使用Schema.org词汇表中的PostalAddress项来实现此目的。它可以通过MicrodataRDFaJSON-LD来使用。
例如,使用RDFa:
<div vocab="http://schema.org/" typeof="PostalAddress">
 <span property="name">Google Inc.</span>
 P.O. Box<span property="postOfficeBoxNumber">1234</span>
 <span property="addressLocality">Mountain View</span>,
 <span property="addressRegion">CA</span>
 <span property="postalCode">94043</span>
 <span property="addressCountry">United States</span>
</div>

据我所知,这也适用于将 <address> 替换为包围的 <div>
<address vocab="http://schema.org/" typeof="PostalAddress">
 <span property="name">Google Inc.</span>
 P.O. Box<span property="postOfficeBoxNumber">1234</span>
 <span property="addressLocality">Mountain View</span>,
 <span property="addressRegion">CA</span>
 <span property="postalCode">94043</span>
 <span property="addressCountry">United States</span>
</address>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接