zoukankan      html  css  js  c++  java
  • 为什么 script 标签不能写成自关闭形式

    今天早上在 Stack Overflow 看到了这个问题: Why don't self-closing script tags work? 。答案给出的解释是,在 XHTML 的标准里面规定非 EMPTY 标签不能使用自关闭形式。注意这里使用的是全大写的 EMPTY ,所以我不把它翻译为「空白」。

    那么 EMPTY 到底是什么呢?写过 DTD 的人应该知道它是个关键字,用来指明一个标签的内容必须是空白,而不能包含文本内容或子节点。看看具体的例子就很容易明白了:

    <!ELEMENT img EMPTY>
    <!ATTLIST img   %attrs;
      src %URI; #REQUIRED
      alt %Text; #REQUIRED
      longdesc %URI; #IMPLIED
      height %Length; #IMPLIED
      width %Length; #IMPLIED
      usemap %URI; #IMPLIED
      ismap (ismap) #IMPLIED
      >

    这是 img 标签的定义。 ELEMENT 关键字说明它是一个元素, EMPTY 关键字说明它的内容必须是空白。因此,我们可以使用自关闭形式:

    <img src="image.png" alt="some image" />

    留意 ATTLIST 里面声明了两个属性是 #REQUIRED 的,所以必须提供。

    接下来我们再看看 script 标签的定义:

    <!ELEMENT script (#PCDATA)>
    <!ATTLIST script
      id ID #IMPLIED
      charset %Charset; #IMPLIED
      type %ContentType; #REQUIRED
      language CDATA #IMPLIED
      src %URI; #IMPLIED
      defer (defer) #IMPLIED
      xml:space (preserve) #FIXED 'preserve'
      >

    可以看到 script 标签通过 (#PCDATA) 声明了它的内部允许包含 CDATA 数据,因此它不是一个带 EMPTY 关键字的标签,也就不可能使用自关闭的写法。

    总结一下:有空看看 Stack Overflow 还是挺有意思的。学习 DTD 的语法,并且看看 XHTML 1.0 Strict DTD 也会帮助你增加对 XHTML 的理解。

  • 相关阅读:
    Win32的开发过程
    Win32的开发过程
    内存模式
    在DOS下生成一个可执行文件一般步骤
    内存模式
    内存模式
    静态链接
    在DOS下生成一个可执行文件一般步骤
    备忘录模式(存档模式)
    建造者模式
  • 原文地址:https://www.cnblogs.com/cathsfz/p/2100839.html
Copyright © 2011-2022 走看看