HTML文档中元数据的最佳做法?

我工作在一个大规模,高容量,面向公众的networking应用程序。 应用程序的成功运行对业务来说非常重要,因此有很多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--> ... 

该工具只是寻找一个给定的元数据评论与正则expression式

由于这些数据是元数据,我想将其更改为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工具来处理它没有任何问题 – 只是改变正则expression式的情况。 但是,现在给我一个w3cvalidation器的问题。 它不会validation,因为我正在使用的元名称不被识别。 我收到错误“元素元属性名称的错误值详细信息:关键字详细信息未注册。 并build议我在WHATWG wiki上注册这些名称值。

虽然我能做到这一点,但感觉不对。 我的一些元标记是“通用的”(如错误和emailAddress),所以我可能会find一个已经注册的名称值,并使用它。 但是,他们大多数是行业/组织特定的。 注册名为subsessionid或partyId的公共名称值是不正确的,因为这些值是特定于我的组织和应用程序的。

所以,问题是 – 在这种情况下什么被认为是最好的做法? 我应该离开他们作为html的意见? 我应该如上使用元标记,而不是担心W3Cvalidation失败? (尽pipe这对组织来说越来越重要)我是否应该尝试在WHATWG wiki上注册我的meta name值,但知道它们不是非常通用的? 还是有另一种解决scheme?

欣赏你的想法,欢呼

弥敦道


编辑以显示最终解决scheme:

我要去的完整答案如下。 它基于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" /> ... 

这validation,所以所有的盒子打勾:)

W3Cvalidation是没有意义的。 HTML!= XML,所以没有任何模式来validation它。 没有浏览器会因为添加了一个未注册名称的元素而窒息。 如果你真的担心,你可以在meta元素上使用data属性,例如:

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

至less你知道没有将来的规范会给你的数据赋予意义。

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

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

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

head使用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> 

使用微数据

你可以创build一个词汇表,但这不是本地使用所必需的 。

 <!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使用数据

script元素可以用于数据块 。 您可以select适合您需要的任何格式。 纯文本示例:

 <!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> 

如果您尝试使用数据格式向数据格式添加自定义属性(如数据types或数据名称),并省略真实姓名属性,或者将其全部设置为“抽象”或其他内容(如果validation器将给重复元名称的问题):

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

所以你可以参考这个数据名称来处理你的元数据…

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

这两种方法都可以在技术上起作用,尽pipe解决scheme可以归结为您的组织对页面validation的感受。

正如你所说,添加信息到自定义元数据标签将使您的标记无效。

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

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

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