【问题标题】:Using an individual tag without breaking the standards?在不违反标准的情况下使用单个标签?
【发布时间】:2018-07-07 11:24:56
【问题描述】:

我想创建某种 API,人们可以在其中包含网站内的隐藏信息,以便机器人可以读取信息。

我知道使用元标记是可能的,但我正在考虑使用某种单独的标记,因为这样我可以使用更舒适的 DOM,并且更容易被人类阅读。

例子:

<html>
...
<body>
...
<mytag id="123" foo="bar" bar="foo"></mytag>
...
<mytag id="345" foo="bar" bar="foo"></mytag>
...
</body>
</html>

我的问题是,是否可以通过创建某种 DTD 使这个单独的标签以某种方式符合标准?

如果可能,我希望支持 HTML 4.01、XHTML 和 HTML 5。

【问题讨论】:

  • 我会看看这个问题,但是,我的问题是不同的,因为我也在寻找支持 HTML 4 和 XHTML 的可能性。所以,仅 HTML5 的解决方案不是我想要的。
  • 有很多不同的答案,取决于你问的是谁。 技术上,答案是否定的,标签名称mytag 违反标准。
  • 您想要实现哪些是使用具有特定类的 div、文件中 JavaScript 部分中的数据块或使用非 HTML xml 文件无法完成的?跨度>
  • 感谢您的想法。我希望人们可以输出一些视觉信息以及不可见的机器可读信息。因此,纯 XML 文件不是解决方案。 Javascript 数据块有点棘手,因为我想用 PHP 读取机器可读的部分,所以我需要一个 JS 解析器。具有数据属性的 span 或 div 可能是一种解决方案,尽管不是 100% HTML 4。(我可以在 HTML4 文档的开头添加某种 DTD 以让它知道数据标签是有效的吗?)

标签: html xhtml w3c-validation


【解决方案1】:

必须支持 HTML 4.01 HTML5 使这变得困难。你不能使用 meta-name 元素(would work 用于 HTML 4.01,但它们必须为 HTML5 注册),你不能使用自定义 data-* 属性(HTML 4.01 中不允许),不能使用 Microdataonly defined 用于 HTML5+),不能使用 自定义元素(@ 987654323@ 用于 HTML5+)。

我可以想到两种方法。

script元素作为数据块

在 HTML5 中,script 元素 can also be used for data blocks。示例:text/htmltext/plain

HTML 4.01 规范 doesn’t define it like that,但它仍然应该是可能的/有效的(它会将其理解为“脚本”,但如果用户代理无法识别内容类型,则不应尝试运行它尽可能用于脚本)。

缺点:内容不是文档 DOM 的一部分。

RDFa

它是allowed in HTML 4.01 和 HTML5(您可能需要为旧的 HTML 版本调整 DOCTYPE,e.g., for XHTML)。

您不能使用自定义元素,但可以添加 propertycontent 属性(用于名称-值对),并且可以将 typeof 用于“项目”(例如,您将使用元素名称),您可以在body 中使用metalink 元素(默认隐藏)。

<div vocab="https://api.example.com/voc#" class="the-hidden-information">

  <div typeof="Item-123">
    <meta property="foo1" content="bar1" />
    <meta property="foo2" content="bar2" />
  </div>

  <div typeof="Item-345">
    <meta property="foo1" content="bar1" />
    <link property="foo5" href="/some-url" />
  </div>

</div>

(当使用 RDFa 1.0 而不是 1.1 时,您必须使用 xmlns instead of vocab

【讨论】:

  • 非常感谢您的回答和两个建议! RDFa 听起来很有趣,但看起来也有点复杂(通常需要一个框架来阅读它们)。我想我会使用 JSON 数据块。这样,我可以轻松地在文件中读取和写入分层的机器可读数据结构(我将使用 PHP 的 DOM 库定位 &lt;script type="application/json"&gt; 元素,然后使用 json_decode 评估其内容)
猜你喜欢
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
相关资源
最近更新 更多