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 的理解。

  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/cathsfz/p/2100839.html
Copyright © 2011-2022 走看看