HTML Standard Tracker

Diff (omit for latest revision)
Filter

Short URL: http://html5.org/r/4834

File a bug

SVNBugCommentTime (UTC)
4834[Authors] [Conformance Checkers] [Gecko] [Internet Explorer] [Opera] [Webkit] Disallow empty URLs for external resources. Make UAs ignore such references.2010-03-09 00:35
Index: source
===================================================================
--- source	(revision 4833)
+++ source	(revision 4834)
@@ -871,7 +871,15 @@
   title="MIME type">MIME types</span> <code>text/html</code> and
   <code>text/html-sandboxed</code>.</p>
 
+  <p>A resource's <dfn>critical subresources</dfn> are those that the
+  resource needs to have available to be correctly processed. Which
+  resources are considered critical or not is defined by the
+  specification that defines the resource's format. For CSS resources,
+  only <code title="">@import</code> rules introduce <span>critical
+  subresources</span>; other resources, e.g. fonts or backgrounds, are
+  not.</p>
 
+
   <h4>XML</h4>
 
   <p id="html-namespace">To ease migration from HTML to XHTML, UAs
@@ -4311,6 +4319,9 @@
   <span>valid Web address</span> as defined by the Web addresses
   specification. <a href="#refsWEBADDRESSES">[WEBADDRESSES]</a></p>
 
+  <p>A <span>URL</span> is a <dfn>valid non-empty URL</dfn> if it is a
+  <span>valid URL</span> but it is not the empty string.</p>
+
   <p>A <span>URL</span> is an <dfn>absolute URL</dfn> if it is an
   <span>absolute Web address</span> as defined by the Web addresses
   specification. <a href="#refsWEBADDRESSES">[WEBADDRESSES]</a></p>
@@ -11044,7 +11055,7 @@
   cache</span> <span
   title="concept-appcache-manifest">manifest</span>, if there is
   one. If the attribute is present, the attribute's value must be a
-  <span>valid URL</span>.</p>
+  <span>valid non-empty URL</span>.</p>
 
   <p>The <code title="attr-html-manifest">manifest</code> attribute
   only <span title="concept-appcache-init">has an effect</span> during
@@ -11387,10 +11398,10 @@
 
   <p>The destination of the link(s) is given by the <dfn
   title="attr-link-href"><code>href</code></dfn> attribute, which must
-  be present and must contain a <span>valid URL</span>. <span
-  class="impl">If the <code title="attr-link-href">href</code>
-  attribute is absent, then the element does not define a
-  link.</span></p>
+  be present and must contain a <span>valid non-empty
+  URL</span>. <span class="impl">If the <code
+  title="attr-link-href">href</code> attribute is absent, then the
+  element does not define a link.</span></p>
 
 <!--END w3c-html-->
   <p>A <code>link</code> element must have either a <code
@@ -11434,57 +11445,69 @@
   <p>The exact behavior for links to external resources depends on the
   exact relationship, as defined for the relevant link type. Some of
   the attributes control whether or not the external resource is to be
-  applied (as defined below). <span class="impl">For external
-  resources that are represented in the DOM (for example, style
-  sheets), the DOM representation must be made available even if the
-  resource is not applied. To <dfn title="concept-link-obtain">obtain
-  the resource</dfn>, the user agent must <span title="resolve a
-  url">resolve</span> the <span>URL</span> given by the <code
-  title="attr-link-href">href</code> attribute, relative to the
-  element, and then <span>fetch</span> the resulting <span>absolute
-  URL</span>. User agents may opt to only try to obtain such resources
-  when they are needed, instead of pro-actively <span
-  title="fetch">fetching</span> all the external resources that are
-  not applied.</span></p> <!-- http-origin privacy sensitive -->
+  applied (as defined below).</p>
 
   <div class="impl">
 
+  <p>For external resources that are represented in the
+  DOM (for example, style sheets), the DOM representation must be made
+  available even if the resource is not applied. To <dfn
+  title="concept-link-obtain">obtain the resource</dfn>, the user
+  agent must run the following steps:</p>
+
+  <ol>
+
+   <li><p>If the <code title="attr-link-href">href</code> attribute's
+   value is the empty string, then abort these steps.</p></li>
+
+   <li><p><span title="resolve a url">Resolve</span> the
+   <span>URL</span> given by the <code
+   title="attr-link-href">href</code> attribute, relative to the
+   element.</li>
+
+   <li><p>If the previous step fails, then abort these steps.</p></li>
+
+   <li><p><span>Fetch</span> the resulting <span>absolute
+   URL</span>.</p></li> <!-- http-origin privacy sensitive -->
+
+  </ol>
+
+  <p>User agents may opt to only try to obtain such resources when
+  they are needed, instead of pro-actively <span
+  title="fetch">fetching</span> all the external resources that are
+  not applied.</p>
+
   <p>The semantics of the protocol used (e.g. HTTP) must be followed
   when fetching external resources. (For example, redirects will be
   followed and 404 responses will cause the external resource to not
   be applied.)</p>
 
   <!-- the next few paragraph are similar to text in the <style> section -->
-  <p>Once the attempts to obtain the resource and its critical
-  subresources are complete, the user agent must, if the loads were
-  successful, <span>queue a task</span> to <span>fire a simple
+  <p>Once the attempts to obtain the resource and its <span>critical
+  subresources</span> are complete, the user agent must, if the loads
+  were successful, <span>queue a task</span> to <span>fire a simple
   event</span> named <code title="event-load">load</code> at the
   <code>link</code> element, or, if the resource or one of its
-  critical subresources failed to completely load for any reason
-  (e.g. DNS error, HTTP 404 response, a connection being prematurely
-  closed, unsupported Content-Type), <span>queue a task</span> to
-  <span>fire a simple event</span> named <code
+  <span>critical subresources</span> failed to completely load for any
+  reason (e.g. DNS error, HTTP 404 response, a connection being
+  prematurely closed, unsupported Content-Type), <span>queue a
+  task</span> to <span>fire a simple event</span> named <code
   title="event-error">error</code> at the <code>link</code>
   element. Non-network errors in processing the resource or its
   subresources (e.g. CSS parse errors, PNG decoding errors) are not
   failures for the purposes of this paragraph.</p>
 
   <p>The <span>task source</span> for these <span
-  title="concept-task">tasks</span> is the <span>DOM manipulation
-  task source</span>.</p>
+  title="concept-task">tasks</span> is the <span>DOM manipulation task
+  source</span>.</p>
 
   <p>The element must <span>delay the load event</span> of the
   element's document until all the attempts to obtain the resource and
-  its critical subresources are complete. (Resources that the user
-  agent has not yet attempted to obtain, e.g. because it is waiting
-  for the resource to be needed, do not <span>delay the load
+  its <span>critical subresources</span> are complete. (Resources that
+  the user agent has not yet attempted to obtain, e.g. because it is
+  waiting for the resource to be needed, do not <span>delay the load
   event</span>.)</p>
 
-  <p>Which resources are considered critical or not is defined by the
-  relevant specification. For CSS resources, only <code
-  title="">@import</code> rules introduce critical subresources; other
-  resources, e.g. fonts or backgrounds, are not.</p>
-
   <hr>
 
   <p id="linkui">Interactive user agents may provide users with a
@@ -12882,18 +12905,19 @@
   URL don't affect the CSS --></p>
 
   <!-- the next few paragraph are similar to text in the <style> section -->
-  <p>Once the attempts to obtain the style sheet's critical
-  subresources, if any, are complete, or, if the style sheet has no
-  critical subresources, once the style sheet has been parsed and
-  processed, the user agent must, if the loads were successful or
-  there were none, <span>queue a task</span> to <span>fire a simple
-  event</span> named <code title="event-load">load</code> at the
-  <code>style</code> element, or, if one of the style sheet's critical
-  subresources failed to completely load for any reason (e.g. DNS
-  error, HTTP 404 response, a connection being prematurely closed,
-  unsupported Content-Type), <span>queue a task</span> to <span>fire a
-  simple event</span> named <code title="event-error">error</code> at
-  the <code>style</code> element. Non-network errors in processing the
+  <p>Once the attempts to obtain the style sheet's <span>critical
+  subresources</span>, if any, are complete, or, if the style sheet
+  has no <span>critical subresources</span>, once the style sheet has
+  been parsed and processed, the user agent must, if the loads were
+  successful or there were none, <span>queue a task</span> to
+  <span>fire a simple event</span> named <code
+  title="event-load">load</code> at the <code>style</code> element,
+  or, if one of the style sheet's <span>critical subresources</span>
+  failed to completely load for any reason (e.g. DNS error, HTTP 404
+  response, a connection being prematurely closed, unsupported
+  Content-Type), <span>queue a task</span> to <span>fire a simple
+  event</span> named <code title="event-error">error</code> at the
+  <code>style</code> element. Non-network errors in processing the
   style sheet or its subresources (e.g. CSS parse errors, PNG decoding
   errors) are not failures for the purposes of this paragraph.</p>
 
@@ -12903,13 +12927,9 @@
 
   <p>The element must <span>delay the load event</span> of the
   element's document until all the attempts to obtain the style
-  sheet's critical subresources, if any, are complete.</p>
+  sheet's <span>critical subresources</span>, if any, are
+  complete.</p>
 
-  <p>Which resources are considered critical or not is defined by the
-  relevant specification. For CSS resources, only <code
-  title="">@import</code> rules introduce critical subresources; other
-  resources, e.g. fonts or backgrounds, are not.</p>
-
   </div>
 
   <p class="note">This specification does not specify a style system,
@@ -13199,8 +13219,8 @@
   <p>The <dfn title="attr-script-src"><code>src</code></dfn>
   attribute, if specified, gives the address of the external script
   resource to use. The value of the attribute must be a <span>valid
-  URL</span> identifying a script resource of the type given by the
-  <code title="attr-script-type">type</code> attribute, if the
+  non-empty URL</span> identifying a script resource of the type given
+  by the <code title="attr-script-type">type</code> attribute, if the
   attribute is present, or of the type "<code
   title="">text/javascript</code>", if the attribute is absent. A
   resource is a script resource of a given type if that type
@@ -13421,13 +13441,19 @@
    <li>
 
     <p>If the element has a <code title="attr-script-src">src</code>
-    attribute, then the value of that attribute must be <span
-    title="resolve a url">resolved</span> relative to the element, and
-    if that is successful, the specified resource must then be <span
-    title="fetch">fetched</span>, from the <span>origin</span> of the
-    element's <code>Document</code>.</p> <!-- not http-origin privacy
-    sensitive -->
+    attribute whose value is not the empty string, then the value of
+    that attribute must be <span title="resolve a url">resolved</span>
+    relative to the element, and if that is successful, the specified
+    resource must then be <span title="fetch">fetched</span>, from the
+    <span>origin</span> of the element's <code>Document</code>.</p>
+    <!-- not http-origin privacy sensitive -->
 
+    <p>If the <code title="attr-script-src">src</code> attribute's
+    value is the empty string or if it could not be resolved, then the
+    user agent must <span>queue a task</span> to <span>fire a simple
+    event</span> named <code title="event-error">error</code> at the
+    element, and abort these steps.</p>
+
     <p>For historical reasons, if the <span>URL</span> is a <span
     title="javascript protocol"><code title="">javascript:</code>
     URL</span>, then the user agent must not, despite the requirements
@@ -13696,7 +13722,12 @@
 
      <li>
 
-      <p><span>Fire a simple event</span> named <code
+      <p>If the script is from an external file, <span>fire a simple
+      event</span> named <code title="event-load">load</code> at the
+      <code>script</code> element.</p>
+
+      <p>Otherwise, the script is internal; <span>queue a task</span>
+      to <span>fire a simple event</span> named <code
       title="event-load">load</code> at the <code>script</code>
       element.</p>
 
@@ -19594,12 +19625,9 @@
   <code>img</code> element's <span>fallback content</span>.</p>
 
   <p>The <code title="attr-img-src">src</code> attribute must be
-  present, and must contain a <span>valid URL</span> referencing a
-  non-interactive, optionally animated, image resource that is neither
-  paged nor scripted. If the <i>base URI of the element</i> is the
-  same as <span>the document's address</span>, then the <code
-  title="attr-img-src">src</code> attribute's value must not be the
-  empty string.</p>
+  present, and must contain a <span>valid non-empty URL</span>
+  referencing a non-interactive, optionally animated, image resource
+  that is neither paged nor scripted.</p>
 
   <p class="note">Images can thus be static bitmaps (e.g. PNGs, GIFs,
   JPEGs), single-page vector documents (single-page PDFs, XML files
@@ -19625,8 +19653,8 @@
   <p>Unless the user agent cannot support images, or its support for
   images has been disabled, or the user agent only fetches elements on
   demand, or the element's <code title="attr-img-src">src</code>
-  attribute has a value that is an <i>ignored self-reference</i>,
-  then, when an <code>img</code> is created with a <code
+  attribute's value is the empty string, then, when an
+  <code>img</code> is created with a <code
   title="attr-img-src">src</code> attribute, and whenever the <code
   title="attr-img-src">src</code> attribute is set subsequently, the
   user agent must <span title="resolve a url">resolve</span> the value
@@ -19635,11 +19663,6 @@
   how this does NOT happen when the base URL changes. --> <!--
   http-origin privacy sensitive -->
 
-  <p>The <code title="attr-img-src">src</code> attribute's value is an
-  <i>ignored self-reference</i> if its value is the empty string, and
-  the <i>base URI of the element</i> is the same as <span>the
-  document's address</span>.</p>
-
   <!-- same text in <input type=image> section and similar text elsewhere -->
   <p>Fetching the image must <span>delay the load event</span> of the
   element's document until the <span title="concept-task">task</span>
@@ -21114,7 +21137,7 @@
   <p>The <dfn title="attr-iframe-src"><code>src</code></dfn> attribute
   gives the address of a page that the <span>nested browsing
   context</span> is to contain. The attribute, if present, must be a
-  <span>valid URL</span>.</p>
+  <span>valid non-empty URL</span>.</p>
 
   <p>The <dfn title="attr-iframe-srcdoc"><code>srcdoc</code></dfn>
   attribute gives the content of the page that the <span>nested
@@ -21202,11 +21225,9 @@
 
     <ol>
 
-<!--
      <li><p>If the value of the <code
      title="attr-iframe-src">src</code> attribute is the empty string,
      jump to the <i title="">empty</i> step below.</p></li>
--->
 
      <li><p><span title="resolve a url">Resolve</span> the value of
      the <code title="attr-iframe-src">src</code> attribute, relative
@@ -21969,7 +21990,7 @@
 
   <p>The <dfn title="attr-embed-src"><code>src</code></dfn> attribute
   gives the address of the resource being embedded. The attribute, if
-  present, must contain a <span>valid URL</span>.</p>
+  present, must contain a <span>valid non-empty URL</span>.</p>
 
   <p>The <dfn title="attr-embed-type"><code>type</code></dfn>
   attribute, if present, gives the <span>MIME type</span> by which the
@@ -22034,6 +22055,7 @@
    <li>The element is <span title="in a document">in a <code>Document</code></span>.</li>
    <li>The element's <code>Document</code> is <span>fully active</span>.</li>
    <li>The element has either a <code title="attr-embed-src">src</code> attribute set or a <code title="attr-embed-type">type</code> attribute set (or both).</li>
+   <li>The element's <code title="attr-embed-src">src</code> attribute is either absent or its value is the empty string.</li>
    <li>The element is not in a <code>Document</code> whose <span>browsing context</span> had the <span>sandboxed plugins browsing context flag</span> set when the <code>Document</code> was created (unless this has been overrriden as described above).</li>
    <li>The element's <code>Document</code> was not parsed from a resource whose <span title="Content-Type sniffing">sniffed type</span> as determined during <span title="navigate">navigation</span> is <code>text/html-sandboxed</code> (unless this has been overrriden as described above).</li>
    <li>The element is not a descendant of a <span>media element</span>.</li>
@@ -22299,7 +22321,8 @@
 
   <p>The <dfn title="attr-object-data"><code>data</code></dfn>
   attribute, if present, specifies the address of the resource. If
-  present, the attribute must be a <span>valid URL</span>.</p>
+  present, the attribute must be a <span>valid non-empty
+  URL</span>.</p>
 
   <p>The <dfn title="attr-object-type"><code>type</code></dfn>
   attribute, if present, specifies the type of the resource. If
@@ -22725,13 +22748,14 @@
 
    <li><p>If the <code title="attr-object-data">data</code> attribute
    is absent but the <code title="attr-object-type">type</code>
-   attribute is present, <a href="#sandboxPluginObject">plugins
-   aren't being sandboxed</a>, and the user agent can find a <span>plugin</span>
-   suitable according to the value of the <code
-   title="attr-object-type">type</code> attribute, then that <span>plugin</span>
-   <a href="#object-plugin">should be used</a>. If no suitable <span>plugin</span>
-   can be found, or if the <span>plugin</span> reports an error, jump to the next
-   step (fallback).</p></li>
+   attribute is present, <a href="#sandboxPluginObject">plugins aren't
+   being sandboxed</a>, and the user agent can find a
+   <span>plugin</span> suitable according to the value of the <code
+   title="attr-object-type">type</code> attribute, then that
+   <span>plugin</span> <a href="#object-plugin">should be used</a>. If
+   no suitable <span>plugin</span> can be found, or if the
+   <span>plugin</span> reports an error, jump to the next step
+   (fallback).</p></li>
 
    <li><p>(Fallback.) The <code>object</code> element
    <span>represents</span> the element's children, ignoring any
@@ -23061,13 +23085,14 @@
   <p>The <dfn title="attr-video-poster"><code>poster</code></dfn>
   attribute gives the address of an image file that the user agent can
   show while no video data is available. The attribute, if present,
-  must contain a <span>valid URL</span>. <span class="impl">If the
-  specified resource is to be used, then, when the element is created
-  or when the <code title="attr-video-poster">poster</code> attribute
-  is set, its value must be <span title="resolve a
-  url">resolved</span> relative to the element, and if that is
-  successful, the resulting <span>absolute URL</span> must be <span
-  title="fetch">fetched</span>, from the element's
+  must contain a <span>valid non-empty URL</span>. <span
+  class="impl">If the specified resource is to be used, then, when the
+  element is created or when the <code
+  title="attr-video-poster">poster</code> attribute is set, if its
+  value is not the empty string, its value must be <span
+  title="resolve a url">resolved</span> relative to the element, and
+  if that is successful, the resulting <span>absolute URL</span> must
+  be <span title="fetch">fetched</span>, from the element's
   <code>Document</code>'s <span>origin</span>; this must <span>delay
   the load event</span> of the element's document. The <dfn>poster
   frame</dfn> is then the image obtained from that resource, if
@@ -23508,7 +23533,8 @@
 
   <p>The <dfn title="attr-source-src"><code>src</code></dfn> attribute
   gives the address of the <span>media resource</span>. The value must
-  be a <span>valid URL</span>. This attribute must be present.</p>
+  be a <span>valid non-empty URL</span>. This attribute must be
+  present.</p>
 
   <p>The <dfn title="attr-source-type"><code>type</code></dfn>
   attribute gives the type of the <span>media resource</span>, to help
@@ -23898,7 +23924,8 @@
   <p>The <dfn title="attr-media-src"><code>src</code></dfn> content
   attribute on <span title="media element">media elements</span> gives
   the address of the media resource (video, audio) to show. The
-  attribute, if present, must contain a <span>valid URL</span>.</p>
+  attribute, if present, must contain a <span>valid non-empty
+  URL</span>.</p>
 
   <div class="impl">
 
@@ -24306,6 +24333,11 @@
 
     <ol>
 
+     <li><p>&#x231B; <i>Process candidate</i>: If the <code
+     title="attr-media-src">src</code> attribute's value is the empty
+     string, then end the <span>synchronous section</span>, and jump
+     down to the <i title="">failed</i> step below.</p></li>
+
      <li><p>&#x231B; Let <var title="">absolute URL</var> be the
      <span>absolute URL</span> that would have resulted from <span
      title="resolve a url">resolving</span> the <span>URL</span>
@@ -24330,9 +24362,9 @@
      algorithm returns without aborting <em>this</em> one, then the
      load failed.</p></li>
 
-     <li><p>Reaching this step indicates that the media resource
-     failed to load or that the given <span>URL</span> could not be
-     <span title="resolve a url">resolved</span>. Set the <code
+     <li><p><i>Failed</i>: Reaching this step indicates that the media
+     resource failed to load or that the given <span>URL</span> could
+     not be <span title="resolve a url">resolved</span>. Set the <code
      title="dom-media-error">error</code> attribute to a new
      <code>MediaError</code> object whose <code
      title="dom-MediaError-code">code</code> attribute is set to <code
@@ -24417,9 +24449,10 @@
 
      <li><p>&#x231B; <i>Process candidate</i>: If <var
      title="">candidate</var> does not have a <code
-     title="attr-source-src">src</code> attribute, then end the
-     <span>synchronous section</span>, and jump down to the <i
-     title="">failed</i> step below.</p></li>
+     title="attr-source-src">src</code> attribute, or if its <code
+     title="attr-source-src">src</code> attribute's value is the empty
+     string, then end the <span>synchronous section</span>, and jump
+     down to the <i title="">failed</i> step below.</p></li>
 
      <li><p>&#x231B; Let <var title="">absolute URL</var> be the
      <span>absolute URL</span> that would have resulted from <span
@@ -39840,17 +39873,19 @@
   <p>The image is given by the <dfn
   title="attr-input-src"><code>src</code></dfn> attribute. The <code
   title="attr-input-src">src</code> attribute must be present, and
-  must contain a <span>valid URL</span> referencing a non-interactive,
-  optionally animated, image resource that is neither paged nor
-  scripted.</p>
+  must contain a <span>valid non-empty URL</span> referencing a
+  non-interactive, optionally animated, image resource that is neither
+  paged nor scripted.</p>
 
   <div class="impl">
 
   <p>When any of the following events occur, unless the user agent
   cannot support images, or its support for images has been disabled,
-  or the user agent only fetches elements on demand, the user agent
-  must <span title="resolve a url">resolve</span> the value of the
-  <code title="attr-input-src">src</code> attribute, relative to the
+  or the user agent only fetches elements on demand, or the <code
+  title="attr-input-src">src</code> attribute's value is the empty
+  string, the user agent must <span title="resolve a
+  url">resolve</span> the value of the <code
+  title="attr-input-src">src</code> attribute, relative to the
   element, and if that is successful, must <span>fetch</span> the
   resulting <span>absolute URL</span>:</p> <!-- Note how this does NOT
   happen when the base URL changes. --> <!-- http-origin privacy
@@ -48973,10 +49008,13 @@
   <p>The <dfn title="attr-command-icon"><code>icon</code></dfn>
   attribute gives a picture that represents the command. If the
   attribute is specified, the attribute's value must contain a
-  <span>valid URL</span>. <span class="impl">To obtain the
-  <span>absolute URL</span> of the icon, the attribute's value must be
-  <span title="resolve a url">resolved</span> relative to the
-  element.</span></p> <!-- this is affected by the base URL being
+  <span>valid non-empty URL</span>. <span class="impl">To obtain the
+  <span>absolute URL</span> of the icon when the attribute's value is
+  not the empty string, the attribute's value must be <span
+  title="resolve a url">resolved</span> relative to the element. When
+  the attribute is absent, or its value is the empty string, or <span
+  title="resolve a url">resolving</span> its value fails, there is no
+  icon.</span></p> <!-- this is affected by the base URL being
   changed, so users of this should cache the image once they've
   fetched it once, at least until the relative url changes again -->
 
@@ -50439,26 +50477,23 @@
   title="hyperlink">hyperlinks</dfn>.</p>
 
   <p>The <dfn title="attr-hyperlink-href"><code>href</code></dfn>
-  attribute on a hyperlink element must have a value that is a
-  <span>valid URL</span>. This URL is the <em>destination
-  resource</em> of the hyperlink.</p>
+  attribute on <code>a</code> and <code>area</code> elements must have
+  a value that is a <span>valid URL</span>. This <span>URL</span> is
+  the <i>destination resource</i> of the hyperlink.</p>
 
-  <div class="note">
+  <p class="note">The <code title="attr-hyperlink-href">href</code>
+  attribute on <code>a</code> and <code>area</code> elements is not
+  required; when those elements do not have <code
+  title="attr-hyperlink-href">href</code> attributes they do not
+  represent hyperlinks.</p>
 
-   <p>The <code title="attr-hyperlink-href">href</code> attribute on
-   <code>a</code> and <code>area</code> elements is not required; when
-   those elements do not have <code
-   title="attr-hyperlink-href">href</code> attributes they do not
-   represent hyperlinks.</p>
+  <p class="note">The <code title="attr-link-href">href</code>
+  attribute on the <code>link</code> element <em>is</em> required (and
+  has to be a <span>valid <em>non-empty</em> URL</span>), but whether
+  a <code>link</code> element represents a hyperlink or not depends on
+  the value of the <code title="attr-link-rel">rel</code> attribute of
+  that element.</p>
 
-   <p>The <code title="attr-link-href">href</code> attribute on the
-   <code>link</code> element <em>is</em> required, but whether a
-   <code>link</code> element represents a hyperlink or not depends on
-   the value of the <code title="attr-link-rel">rel</code> attribute
-   of that element.</p>
-
-  </div>
-
   <p>The <dfn title="attr-hyperlink-target"><code>target</code></dfn>
   attribute, if present, must be a <span>valid browsing context name
   or keyword</span>. It gives the name of the <span>browsing
@@ -50470,9 +50505,9 @@
   title="attr-hyperlink-ping"><code>ping</code></dfn> attribute, if
   present, gives the URLs of the resources that are interested in
   being notified if the user follows the hyperlink. The value must be
-  a <span>set of space-separated tokens</span>, each of which must be a
-  <span title="valid URL">valid URL</span>. <span class="impl">The
-  value is used by the user agent for <span>hyperlink
+  a <span>set of space-separated tokens</span>, each of which must be
+  a <span>valid non-empty URL</span>. <span class="impl">The value is
+  used by the user agent for <span>hyperlink
   auditing</span>.</span></p>
 <!--START w3c-html--><!--PING-->
 
@@ -61974,20 +62009,21 @@
   <p>If the root element, as parsed according to the XML
   specifications cited above, is found to be an <code>html</code>
   element with an attribute <code
-  title="attr-html-manifest">manifest</code>, then, as soon as the
-  element is <span title="insert an element into a document">inserted
-  into the document</span>, the user agent must <span title="resolve a
-  url">resolve</span> the value of that attribute relative to that
-  element, and if that is successful, must run the <span
-  title="concept-appcache-init">application cache selection
-  algorithm</span> with the resulting <span>absolute URL</span> with
-  any <span title="url-fragment">&lt;fragment&gt;</span> component
-  removed as the manifest URL, and passing in the newly-created
-  <code>Document</code>. Otherwise, if the attribute is absent or
-  resolving it fails, then as soon as the root element is <span
-  title="insert an element into a document">inserted into the
-  document</span>, the user agent must run the <span
-  title="concept-appcache-init">application cache selection
+  title="attr-html-manifest">manifest</code> whose value is not the
+  empty string, then, as soon as the element is <span title="insert an
+  element into a document">inserted into the document</span>, the user
+  agent must <span title="resolve a url">resolve</span> the value of
+  that attribute relative to that element, and if that is successful,
+  must run the <span title="concept-appcache-init">application cache
+  selection algorithm</span> with the resulting <span>absolute
+  URL</span> with any <span
+  title="url-fragment">&lt;fragment&gt;</span> component removed as
+  the manifest URL, and passing in the newly-created
+  <code>Document</code>. Otherwise, if the attribute is absent, its
+  value is the empty string, or resolving its value fails, then as
+  soon as the root element is <span title="insert an element into a
+  document">inserted into the document</span>, the user agent must run
+  the <span title="concept-appcache-init">application cache selection
   algorithm</span> with no manifest, and passing in the
   <code>Document</code>.</p>
 
@@ -87121,17 +87157,19 @@
     <p id="parser-appcache">If the <code>Document</code> is being
     loaded as part of <span title="navigate">navigation</span> of a
     <span>browsing context</span>, then: if the newly created element
-    has a <code title="attr-html-manifest">manifest</code> attribute,
-    then <span title="resolve a url">resolve</span> the value of that
-    attribute to an <span>absolute URL</span>, relative to the newly
-    created element, and if that is successful, run the <span
+    has a <code title="attr-html-manifest">manifest</code> attribute
+    whose value is not the empty string, then <span title="resolve a
+    url">resolve</span> the value of that attribute to an
+    <span>absolute URL</span>, relative to the newly created element,
+    and if that is successful, run the <span
     title="concept-appcache-init">application cache selection
     algorithm</span> with the resulting <span>absolute URL</span> with
     any <span title="url-fragment">&lt;fragment&gt;</span> component
-    removed; otherwise, if there is no such attribute or resolving it
-    fails, run the <span title="concept-appcache-init">application
-    cache selection algorithm</span> with no manifest. The algorithm
-    must be passed the <code>Document</code> object.</p>
+    removed; otherwise, if there is no such attribute, or its value is
+    the empty string, or resolving its value fails, run the <span
+    title="concept-appcache-init">application cache selection
+    algorithm</span> with no manifest. The algorithm must be passed
+    the <code>Document</code> object.</p>
 
     <p>Switch the <span>insertion mode</span> to "<span
     title="insertion mode: before head">before head</span>".</p>
@@ -98798,7 +98836,7 @@
      <th> <code title="">data</code>
      <td> <code title="attr-object-data">object</code>
      <td> Address of the resource
-     <td> <span>Valid URL</span>
+     <td> <span>Valid non-empty URL</span>
     <tr>
      <th> <code title="">datetime</code>
      <td> <code title="attr-mod-datetime">del</code>;
@@ -98928,12 +98966,16 @@
     <tr>
      <th> <code title="">href</code>
      <td> <code title="attr-hyperlink-href">a</code>;
-          <code title="attr-hyperlink-href">area</code>;
-          <code title="attr-link-href">link</code>
+          <code title="attr-hyperlink-href">area</code>
      <td> Address of the <span>hyperlink</span>
      <td> <span>Valid URL</span>
     <tr>
      <th> <code title="">href</code>
+     <td> <code title="attr-link-href">link</code>
+     <td> Address of the <span>hyperlink</span>
+     <td> <span>Valid non-empty URL</span>
+    <tr>
+     <th> <code title="">href</code>
      <td> <code title="attr-base-href">base</code>
      <td> <span>Document base URL</span>
      <td> <span>Valid URL</span>
@@ -98953,7 +98995,7 @@
      <th> <code title="">icon</code>
      <td> <code title="attr-command-icon">command</code>
      <td> Icon for the command
-     <td> <span>Valid URL</span>
+     <td> <span>Valid non-empty URL</span>
     <tr>
      <th> <code title="">id</code>
      <td> <span title="attr-id">HTML elements</span>
@@ -99029,7 +99071,7 @@
      <th> <code title="">manifest</code>
      <td> <code title="attr-html-manifest">html</code>
      <td> <span title="concept-appcache-manifest">Application cache manifest</span>
-     <td> <span>Valid URL</span>
+     <td> <span>Valid non-empty URL</span>
     <tr>
      <th> <code title="">max</code>
      <td> <code title="attr-input-max">input</code>
@@ -99140,7 +99182,7 @@
      <td> <code title="attr-hyperlink-ping">a</code>;
           <code title="attr-hyperlink-ping">area</code>
      <td> <span title="URL">URLs</span> to ping
-     <td> <span>Set of space-separated tokens</span> consisting of <span title="valid URL">valid URLs</span>
+     <td> <span>Set of space-separated tokens</span> consisting of <span title="valid non-empty URL">valid non-empty URLs</span>
 <!--START w3c-html--><!--PING-->
     <tr>
      <th> <code title="">placeholder</code>
@@ -99152,7 +99194,7 @@
      <th> <code title="">poster</code>
      <td> <code title="attr-video-poster">video</code>
      <td> Poster frame to show prior to video playback
-     <td> <span>Valid URL</span>
+     <td> <span>Valid non-empty URL</span>
     <tr>
      <th> <code title="">preload</code>
      <td> <code title="attr-media-preload">audio</code>;
@@ -99278,7 +99320,7 @@
           <code title="attr-source-src">source</code>;
           <code title="attr-media-src">video</code>
      <td> Address of the resource
-     <td> <span>Valid URL</span>
+     <td> <span>Valid non-empty URL</span>
     <tr>
      <th> <code title="">srcdoc</code>
      <td> <code title="attr-iframe-srcdoc">iframe</code>
@@ -101681,6 +101723,7 @@
   Neil Soiffer,
   Nicholas Shanks,
   Nicholas Stimpson,
+  Nicholas Zakas,
   Nicolas Gallagher,
   Noah Mendelsohn,
   Noah Slater,

|