名称属性和名称令牌之间的区别? (HTML)

问题描述 投票:0回答:2

我正在检查是否可以在名称属性中安全地使用空格,压倒性的共识(除了社区认为不正确的一个答案之外)是这样就可以了,因为名称属性使用 CDATA 令牌而不是名称令牌, 或类似的规定。问题是我似乎找不到关于这到底意味着什么的信息。

什么是名称令牌?如果 name 属性不使用,那还有什么意义呢?就此而言,代币到底是什么?我正在寻找有关该主题的一些信息,但这一切似乎都超出了我的能力范围。

谢谢!

html token
2个回答
3
投票

令牌可以粗略地定义为代表某事物并遵循特定模式的字符序列。您可能会发现编程语言语法的概述是基本定义的良好开端。支持的各种类型的代币可以在w3站点找到,并列出如下:

CDATA 是文档字符集中的字符序列, 可能包括字符实体。用户代理应该解释属性 值如下:用字符替换字符实体,忽略 换行,将每个回车符或制表符替换为一个空格。 用户代理可能会忽略 CDATA 中的前导和尾随空白 属性值(例如,“myval”可以解释为“myval”)。 作者不应声明带有前导或尾随的属性值 空白区域。

对于某些具有 CDATA 属性值的 HTML 4 属性, 规范对合法值集施加了进一步的限制 对于 DTD 可能无法表达的属性。

虽然 STYLE 和 SCRIPT 元素使用 CDATA 作为其数据模型, 对于这些元素,用户代理必须以不同的方式处理 CDATA。 标记和实体必须被视为原始文本并传递给 应用程序原样。字符序列第一次出现“

ID 和 NAME 令牌必须以字母 ([A-Za-z]) 开头,并且可以是 后跟任意数量的字母、数字 ([0-9])、连字符 (“-”)、 下划线(“_”)、冒号(“:”)和句点(“.”)。 IDREF 和 IDREFS 是对其他属性定义的 ID 令牌的引用。 IDREF 是一个 单个令牌,IDREFS 是一个以空格分隔的令牌列表。数字 令牌必须至少包含一位数字 ([0-9])。

仅仅因为令牌被称为 NAME 并不一定意味着它是用于 name 属性的。这只是类似术语的巧合,并且 name 属性是与 NAME SGML 标记不同的概念。如果您查看属性索引)表,您可以看到每个属性预期使用的标记类型。


0
投票

词法分析器读取组成源程序的字符流,并将字符分组为有意义的序列,称为词位。对于每个词素,词法分析器都会生成以下形式的标记作为输出

  <token-name, attribute-value>

它会进入后续阶段,即语法分析。

在令牌中,第一个组件 token-name 是语法分析期间使用的抽象符号,第二个组件 attribute-value 指向该令牌的符号表中的条目。语义分析和代码生成需要符号表条目中的信息。

© www.soinside.com 2019 - 2024. All rights reserved.