首页 文章

html文档中元数据的最佳实践?

提问于
浏览
60

我在大规模,大批量,面向公众的Web应用程序上工作 . 应用程序的成功运行对业务非常重要,因此有许多MI工具可以针对它运行 .

其中一个MI工具本质上是查看每个页面请求发送到浏览器的html(我已经简化了很多,但是出于这个问题的目的,它是一个对html进行一些分析的工具)

对于这个MI工具来获取它需要的数据,我们将元数据放在head元素中 . 目前我们以html评论的方式做到:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="">
<head>
    <!-- details = 52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009] -->
    <!-- policy id = 1234567890 -->
    <!-- party id = 0987654321 -->
    <!-- email address = user@email.com -->
    <!-- error = 49 -->
    <!-- subsessionid = bffd5bc0-a03e-42e5-a531-50529dae57e3-->
    ...

该工具只需使用正则表达式查找给定的元数据注释

由于这些数据是元数据,我想将其更改为html元标记,因为它在语义上是正确的 . 像这样的东西:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="">
<head>
    <meta name="details" content="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" />
    <meta name="policyId" content="1234567890" />
    <meta name="partyId" content="0987654321" />
    <meta name="emailAddress" content="user@email.com" />
    <meta name="error" content="49" />
    <meta name="subsessionid" content="bffd5bc0-a03e-42e5-a531-50529dae57e3" />
    ...

这感觉更具语义性,我可以让MI工具使用它没问题 - 只是改变正则表达式的情况 . 但它现在给我一个w3c验证器的问题 . 它不会验证,因为我正在使用的元名称无法识别 . 我收到错误“元素元素属性名称的错误值详细信息:未注册关键字详细信息” . 它建议我在WHATWG维基上注册这些名称值 .

虽然我能做到这一点但感觉不对劲 . 我的一些meta标签是'通用的'(例如error和emailAddress),所以我可能会找到已注册的名称值并使用它 . 但是,大多数都是针对行业/组织的 . 注册名为subsessionid或partyId的公共名称值感觉不对,因为这些值特定于我的组织和应用程序 .

那么,问题是 - 在这种情况下什么被认为是最佳做法?我应该把它们留作html评论吗?我应该如上所述使用meta标签而不担心w3c验证失败吗? (虽然这对组织越来越重要)我应该尝试在WHATWG wiki上注册我的元名称值,但是知道它们不是非常通用的吗?还是有其他解决方案吗?

欣赏你的想法,欢呼

弥敦道


编辑以显示最终解决方案:

我要完整的答案如下 . 它基于Rich Bradshaws的回答,所以他是被接受的,但这就是我要完整的东西:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="">
<head>
    <meta name="application-name" content="Our app name" 
        data-details="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" 
        data-policyId="1234567890"
        data-partyId="0987654321"
        data-emailAddress="user@email.com"
        data-error="49"
        data-subsessionid="bffd5bc0-a03e-42e5-a531-50529dae57e3"
    />
    ...

这个验证,所以所有方框都勾选了:)

4 回答

  • 25

    W3C验证毫无意义 . HTML!= XML,因此没有任何架构可以验证它 . 没有浏览器会因为你添加了一个带有未注册名称的元元素而窒息 . 如果您真的很担心,可以在meta元素上使用data属性,例如:

    <meta data-details="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" data-policyId="0123456789" />
    

    至少那时你知道未来的规范不会给你的数据带来意义 .

    欲了解更多信息,请阅读:http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#custom-data-attribute

  • 0

    虽然您的示例可能有效,但请注意关键字application-name仅适用于Web应用程序 .

    对于通常的网页不是网络应用程序,或者如果没有给出 application-name ,请参阅一些替代方案:

    在头部使用data- *属性

    不需要 meta 元素 .

    <!DOCTYPE html>
    <html>
    <head
        data-details="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" 
        data-policyId="1234567890"
        data-partyId="0987654321"
        data-emailAddress="user@email.com"
        data-error="49"
        data-subsessionid="bffd5bc0-a03e-42e5-a531-50529dae57e3">
    </head>
    

    使用微数据

    你可以创建一个词汇表,但那是not required for local use .

    <!DOCTYPE html>
    <html>
    <head itemscope>
      <meta itemprop="details" content="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" />
      <meta itemprop="policyId" content="1234567890" />
      <meta itemprop="partyId" content="0987654321" />
      <link itemprop="emailAddress" href="mailto:user@email.com" /> <!-- or use a meta element if you don’t want to provide a full URI with "mailto:" scheme -->
      <meta itemprop="error" content="49" />
      <meta itemprop="subsessionid" content="bffd5bc0-a03e-42e5-a531-50529dae57e3" />
    </head>
    

    在脚本中使用数据

    script 元素can be used for data blocks . 您可以选择任何适合您需求的格式 . 纯文本示例:

    <!DOCTYPE html>
    <html>
    <head>
      <script type="text/plain">
        details = 52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]
        policyId = 1234567890
        partyId = 0987654321
        emailAddress = user@email.com
        error = 49
        subsessionid = bffd5bc0-a03e-42e5-a531-50529dae57e3
      </script>
    </head>
    
  • 2

    如果您尝试使用数据格式向其添加自定义属性,如数据类型或数据名称,省略实名属性或将其全部设置为“抽象”或其他内容(如果验证器将会给重复的元名称提出问题):

    <meta data-name="details" content="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" />
    

    因此,您可以引用该数据名称来处理您的元数据...

    http://html5doctor.com/html5-custom-data-attributes/

  • 33

    这两种选择在技术上都可行,尽管解决方案可以归结为您的组织对页面验证的感受 .

    如您所说,将信息添加到自定义元数据标记中将使标记无效 .

    对于我的组织,页面验证是技术可访问性的一部分,并且被认为非常重要 . 不允许做任何阻止页面验证的事情 .

    我不会尝试注册新的元数据名称和值,因为这些特定于您的组织而不是公共用途 .

    如果这已经适用于您的组织,我可能会将此信息保留为HTML注释 .

相关问题