Is HTML5 valid XML?
I am confused. A co-worker turned me on to the possibility that tags ending in />
, such as <br />
can still be used in HTML5. I thought that only <br>
-style could be used. All of the "talk" across the Internet is about using the latter.
Could someone please explain this to me? This seems very confusing and poorly documented.
And this brings up another question: Is HTML 5 considered to be well-formed XML?
Solution 1:
No. Counter-examples:
These are valid HTML5 but invalid XHTML5:
-
Some closing tags can be omitted:
<p>First <p>Second
See: P-end-tag (</p>) is not needed in HTML
-
script
escape magic:<script><a></script>
See: What is CDATA in HTML?
-
Attributes without values (boolean attributes):
<input type="text" disabled />
See: Correct value for disabled attribute
-
Attributes without quotes, e.g.:
<div data-a=b></div>
See: In XHTML 1.0 Strict do attribute values need to be surrounded with quotes?
-
Implicit open elements and multiple top level elements.
Some HTML elements are created implicitly. E.g.
html
. This allows the HTML to have "multiple top level elements":<!doctype html><title>a</title><p>a</p>
See: Is it necessary to write HEAD, BODY and HTML tags?
Valid XHTML that is invalid HTML:
CDATA
constructs with invalid tags insideENTITY
and other exclamation mark constructs, which allow for billion laughs: How does the billion laughs XML DoS attack work?
Valid HTML and XHTML but with different meanings:
- HTML has hundreds of named character references (e.g.
£
,©
), XML has only 5 (quot
,amp
,apos
,lt
,gt
).
Solution 2:
There is an XML serialization of it, called XHTML5. Basically, you're free to use either HTML5 (HTML serialization) or XHTML5 (XML serialization). The draft spec says HTML5 "is the format suggested for most authors," mainly for the same reasons people recommend text/html
for XHTML 1.1.
Solution 3:
You can markup your page as valid HTML5 and XHTML5: http://www.w3.org/TR/html-polyglot/
Polyglot markup that meets a well defined set of constraints is interpreted as compatible, regardless of whether they are processed as HTML or as XHTML, per the HTML5 specification.
The basic document could look like:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title></title>
</head>
<body>
</body>
</html>
Of course you'd have to follow some additional rules (like not to use the noscript
element, for example), outlined in the linked working draft.