XHTML (eXtensible HyperText Markup Language) is a family of XML markup languages that mirror or extend versions of the widely-used Hypertext Markup Language (HTML), the language in which web pages are written.
While HTML (prior to HTML5) was defined as an application of Standard Generalized Markup Language (SGML), a very flexible markup language framework, XHTML is an application of XML, a more restrictive subset of SGML. Because XHTML documents need to be well-formed, they can be parsed using standard XML parsers—unlike HTML, which requires a lenient HTML-specific parser.
While HTML (prior to HTML5) was defined as an application of Standard Generalized Markup Language (SGML), a very flexible markup language framework, XHTML is an application of XML, a more restrictive subset of SGML. Because XHTML documents need to be well-formed, they can be parsed using standard XML parsers—unlike HTML, which requires a lenient HTML-specific parser.
XHTML 1.0 became a World Wide Web Consortium (W3C) Recommendation on January
26, 2000. XHTML 1.1 became a W3C Recommendation on May 31, 2001. XHTML5 is
undergoing development as of September 2009, as part of the HTML5
specification.
Overview
XHTML 1.0 is
"a reformulation of the three HTML 4 document types as applications of XML
1.0".The World Wide Web Consortium (W3C) also continues to maintain the
HTML 4.01 Recommendation, and the specifications for HTML5 and XHTML5 are being
actively developed. In the current XHTML 1.0 Recommendation document, as
published and revised to August 2002, the W3C commented that, "The XHTML
family is the next step in the evolution of the Internet. By migrating to XHTML
today, content developers can enter the XML world with all of its attendant
benefits, while still remaining confident in their content's backward and
future compatibility."
However, in
2004, the Web Hypertext Application Technology Working Group (WHATWG) formed,
independently of the W3C, to work on advancing ordinary HTML not based on
XHTML. The WHATWG eventually began working on a standard that supported both
XML and non-XML serializations, HTML5, in parallel to W3C standards such as
XHTML 2. In 2007, the W3C's HTML working group voted to officially recognize
HTML5 and work on it as the next-generated HTML standard. In 2009, the W3C
allowed the XHTML 2 Working Group's charter to expire, acknowledging that HTML5
would be the sole next-generation HTML standard, including both XML and non-XML
serializations. Of the two serializations, the W3C suggests that most authors
use the HTML syntax, rather than the XHTML syntax.
Motivation
XHTML was developed to make HTML more extensible and increase interoperability
with other data formats. HTML 4 was ostensibly an application of Standard
Generalized Markup Language (SGML); however the specification for SGML was
complex, and neither web browsers nor the HTML 4 Recommendation were fully
conformant to it. The XML standard, approved in 1998, provided a simpler data
format closer in simplicity to HTML 4. By shifting to an XML format, it was
hoped HTML would become compatible with common XML tools; servers and proxies
would be able to transform content, as necessary, for constrained devices such
as mobile phones. By utilizing namespaces, XHTML documents could provide
extensibility by including fragments from other XML-based languages such as Scalable
Vector Graphics and MathML. Finally, the renewed work would provide an
opportunity to divide HTML into reusable components (XHTML Modularization) and
clean up untidy parts of the language.
Relationship to HTML
There are various differences between XHTML and HTML. The Document Object
Model is a tree structure that represents the page internally in applications,
and XHTML and HTML are two different ways of representing that in markup
(serializations). Both are less expressive than the DOM (for example,
"--" may be placed in comments in the DOM, but cannot be represented
in a comment in either XHTML or HTML), and generally XHTML's XML syntax is a
little more expressive than HTML (for example, arbitrary namespaces are not
allowed in HTML). So, firstly one source of differences is immediate: XHTML
uses an XML syntax, while HTML uses a pseudo-SGML syntax (officially SGML for
HTML 4 and under, but never in practice, and standardised away from SGML
in HTML5). Secondly however, because the expressible contents of the DOM in
syntax are slightly different, there are some changes in actual behavior
between the two models.
Firstly then, syntax differences:
- Broadly,
the XML rules require that all elements be closed, either by a separate
closing tag or using self closing syntax (e.g.
<br />
), while HTML syntax permits some elements to be unclosed because either they are always empty (e.g.<input>
) or their end can be determined implicitly ("omissibility", e.g.<p>
). - XML is case-sensitive for element and attribute names, while HTML is not.
- Some
shorthand features in HTML are omitted in XML, such as (1) attribute
minimization, where attribute values or their quotes may be omitted
(e.g.
<option selected>
or<option selected=selected>
, while XML this must be expressed as<option selected="selected">
); (2) element minimization may be used to remove elements entirely (such as<tbody>
inferred in a table if not given); and (3) the rarely used SGML syntax for element minimization ("shorttag"), which most browsers do not implement. - There are numerous other technical requirements surrounding namespaces and precise parsing of whitespace and certain characters and elements. The exact parsing of HTML in practice has been undefined until recently; see the HTML5 specification (HTML5) for full details, or the working summary (HTML vs. XHTML).
Secondly, in contrast to these minor syntactical differences, there are some
behavioral differences, mostly arising from the underlying differences in
serialization. For example:
- Most prominently, behavior on parse errors differ. A fatal parse error in XML (such as an incorrect tag structure) causes document processing to be aborted.
- Most
content requiring namespaces will not work in HTML, except the built-in
support for SVG and MathML in the HTML5 parser along with certain magic
prefixes such as
xlink
. - JavaScript
processing is a little different in XHTML, with minor changes in case
sensitivity to some functions, and further precautions to restrict
processing to well-formed content. Scripts must not use the
document.write()
method; it is not available for XHTML. TheinnerHTML
property is available, but will not insert non-well-formed content. On the other hand, it can be used to insert well-formed namespaced content into XHTML. - CSS is
also applied slightly differently. Due to XHTML's case-sensitivity, all
CSS selectors become case sensitive for XHTML documents. Some CSS
properties, such as backgrounds, set on the
<body>
element in HTML are 'inherited upwards' into the<html>
element; this appears not to be the case for XHTML.
Adoption
The similarities between HTML 4.01 and XHTML 1.0 led many web sites and content
management systems to adopt the initial W3C XHTML 1.0 Recommendation. To aid
authors in the transition, the W3C provided guidance on how to publish XHTML
1.0 documents in an HTML-compatible manner, and serve them to browsers that
were not designed for XHTML.
Such "HTML-compatible" content is sent using the HTML media type (
text/html
) rather than the official
Internet media type for XHTML (application/xhtml+xml
).
When measuring the adoption of XHTML to that of regular HTML, therefore, it is
important to distinguish whether it is media type usage or actual document
contents that is being compared.
As long as support is not widespread, most web developers
avoid using XHTML that is not HTML-compatible, so advantages of XML such as
namespaces, faster parsing and smaller-footprint browsers do not benefit the
user.
Versions of XHTML
XHTML 1.0
December 1998 saw the publication of a W3C Working Draft entitled Reformulating
HTML in XML. This introduced Voyager, the codename for a new markup
language based on HTML 4, but adhering to the stricter syntax rules of XML. By
February 1999 the name of the specification had changed to XHTML 1.0: The
Extensible HyperText Markup Language, and in January 2000 it was officially
adopted as a W3C Recommendation. There are three formal DTDs for XHTML 1.0,
corresponding to the three different versions of HTML 4.01:
- XHTML 1.0 Strict is the XML equivalent to strict HTML 4.01, and includes elements and attributes that have not been marked deprecated in the HTML 4.01 specification. As of May 25 2011, XHTML 1.0 Strict is the document type used for the homepage of the website of the World Wide Web Consortium.
- XHTML
1.0 Transitional is the XML equivalent of HTML 4.01 Transitional, and
includes the presentational elements (such as
center
,font
andstrike
) excluded from the strict version. - XHTML 1.0 Frameset is the XML equivalent of HTML 4.01 Frameset, and allows for the definition of frameset documents—a common Web feature in the late 1990s.
The second edition of XHTML 1.0 became a W3C Recommendation in August 2002.
Modularization of XHTML
Modularization provides an abstract collection of components through which
XHTML can be subsetted and extended. The feature is intended to help XHTML
extend its reach onto emerging platforms, such as mobile devices and
Web-enabled televisions. The initial draft of Modularization of XHTML
became available in April 1999, and reached Recommendation status in April
2001.
The first modular XHTML variants were XHTML 1.1 and XHTML Basic 1.0.
In October 2008 Modularization of XHTML was superseded by XHTML
Modularization 1.1, which adds an XML Schema implementation. It was itself
superseded by a second edition in July 2010.
XHTML 1.1: Module-based XHTML
XHTML 1.1 evolved out of the work surrounding the initial Modularization
of XHTML specification. The W3C released a first draft in September 1999;
Recommendation status was reached in May 2001. The modules combined within
XHTML 1.1 effectively recreate XHTML 1.0 Strict, with the addition of ruby
annotation elements (
ruby
, rbc
, rtc
,
rb
, rt
and rp
) to better support East-Asian languages. Other changes
include removal of the name
attribute from the a
and map
elements, and (in the first edition
of the language) removal of the lang
attribute in favour of xml:lang
.
Although XHTML 1.1 is largely compatible with XHTML 1.0 and HTML 4, in
August 2002 the Working Group issued a formal Note advising that it should not
be transmitted with the HTML media type. With limited browser support for the
alternate
application/xhtml+xml
media type, XHTML 1.1 proved unable to gain widespread use. In January 2009 a
second edition of the document (XHTML Media Types - Second Edition) was
issued, relaxing this restriction and allowing XHTML 1.1 to be served as text/html
.
A second edition of XHTML 1.1 was issued on 23 November 2010, which
addresses various errata and adds an XML Schema implementation not included in
the original specification. (It was first released briefly on 7 May 2009 as a
"Proposed Edited Recommendation" before being rescinded on 19 May due
to unresolved issues).
Of all the versions of XHTML, XHTML Basic 1.0 provides the fewest features.
With XHTML 1.1, it is one of the two first implementations of modular XHTML. In
addition to the Core Modules (Structure, Text, Hypertext, and List), it
implements the following abstract modules: Base, Basic Forms, Basic Tables,
Image, Link, Metainformation, Object, Style Sheet, and Target.
XHTML Basic 1.1 replaces the Basic Forms Module with the Forms Module, and
adds the Intrinsic Events, Presentation, and Scripting modules. It also
supports additional tags and attributes from other modules. This version became
a W3C recommendation on 29 July 2008.
The current version of XHTML Basic is 1.1 Second Edition (23 November 2010),
in which the language is re-implemented in the W3C's XML Schema language. This
version also supports the
lang
attribute. XHTML-Print
XHTML-Print, which became a W3C Recommendation in September 2006, is a
specialized version of XHTML Basic designed for documents printed from
information appliances to low-end printers.
XHTML Mobile Profile
XHTML Mobile Profile (abbreviated XHTML MP or XHTML-MP) is a third-party
variant of the W3C's XHTML Basic specification. Like XHTML Basic, XHTML was
developed for information appliances with limited system resources.
In October 2001, a limited company called the Wireless Application Protocol
Forum began adapting XHTML Basic for WAP 2.0, the second major version of the Wireless
Application Protocol. WAP Forum based their DTD on the W3C's Modularization of
XHTML, incorporating the same modules the W3C used in XHTML Basic 1.0—except
for the Target Module. Starting with this foundation, the WAP Forum replaced
the Basic Forms Module with a partial implementation of the Forms Module, added
partial support for the Legacy and Presentation modules, and added full support
for the Style Attribute Module.
In 2002, the WAP Forum was subsumed into the Open Mobile Alliance (OMA),
which continued to develop XHTML Mobile Profile as a component of their OMA
Browsing Specification.
XHTML Mobile Profile 1.1
To this version, finalized in 2004, the OMA added partial support for the
Scripting Module, and partial support for Intrinsic Events. XHTML MP 1.1 is
part of v2.1 of the OMA Browsing Specification (1 November 2002).
XHTML Mobile Profile 1.2
This version, finalized 27 February 2007, expands the capabilities of XHTML
MP 1.1 with full support for the Forms Module and OMA Text Input Modes. XHTML
MP 1.2 is part of v2.3 of the OMA Browsing Specification (13 March 2007).
XHTML Mobile Profile 1.3
XHTML MP 1.3 (finalized on 23 September 2008) uses the XHTML Basic 1.1 document
type definition, which includes the Target Module. Events in this version of
the specification are updated to DOM Level 3 specifications (i.e., they are
platform- and language-neutral).
XHTML 1.2
The XHTML 2 Working Group considered the creation of a new language based on
XHTML 1.1. If XHTML 1.2 was created, it would include WAI-ARIA and
role
attributes to better support accessible web
applications, and improved Semantic Web support through RDFa. The inputmode
attribute from XHTML Basic 1.1, along
with the target
attribute (for
specifying frame targets) might also be present. The XHTML2 WG had not been
chartered to carry out the development of XHTML1.2. Since the W3C announced that
it does not intend to recharter the XHTML2 WG, and closed the WG in December
2010, this means that XHTML 1.2 proposal would not eventuate.XHTML 2.0
Between August 2002 and July 2006, the W3C released eight Working Drafts of
XHTML 2.0, a new version of XHTML able to make a clean break from the past by
discarding the requirement of backward compatibility. This lack of
compatibility with XHTML 1.x and HTML 4 caused some early controversy in the
web developer community. Some parts of the language (such as the
role
and RDFa attributes) were subsequently split
out of the specification and worked on as separate modules, partially to help
make the transition from XHTML 1.x to XHTML 2.0 smoother. A ninth draft of
XHTML 2.0 was expected to appear in 2009, but on July 2, 2009, the W3C decided
to let the XHTML2 Working Group charter expire by that year's end, effectively
halting any further development of the draft into a standard. Instead, XHTML
2.0 and its related documents were released as W3C Notes.
New features to have been introduced by XHTML 2.0 included:
- HTML forms were to be replaced by XForms, an XML-based user input specification allowing forms to be displayed appropriately for different rendering devices.
- HTML frames were to be replaced by XFrames.
- The DOM Events were to be replaced by XML Events, which uses the XML Document Object Model.
- A new
list element type, the
nl
element type, were to be included to specifically designate a list as a navigation list. This would have been useful in creating nested menus, which are currently created by a wide variety of means like nested unordered lists or nested definition lists. - Any
element was to be able to act as a hyperlink, e. g.,
<li href="articles.html">Articles</li>
, similar to XLink. However, XLink itself is not compatible with XHTML due to design differences. - Any
element was to be able to reference alternative media with the
src
attribute, e. g.,<p src="lbridge.jpg" type="image/jpeg">London Bridge</p>
is the same as<object src="lbridge.jpg" type="image/jpeg"><p>London Bridge</p></object>
. - The
alt
attribute of theimg
element was removed: alternative text was to be given in the content of theimg
element, much like theobject
element, e. g.,<img src="hms_audacious.jpg">HMS <span class="italic">Audacious</span></img>
. - A single
heading element (
h
) was added. The level of these headings was determined by the depth of the nesting. This would have allowed the use of headings to be infinite, rather than limiting use to six levels deep. - The
remaining presentational elements
i
,b
andtt
, still allowed in XHTML 1.x (even Strict), were to be absent from XHTML 2.0. The only somewhat presentational elements remaining were to besup
andsub
for superscript and subscript respectively, because they have significant non-presentational uses and are required by certain languages. All other tags were meant to be semantic instead (e. g.<strong>
for strong or bolded text) while allowing the user agent to control the presentation of elements via CSS. - The
addition of RDF triple with the
property
andabout
attributes to facilitate the conversion from XHTML to RDF/XML.
XHTML5
HTML5 initially grew independently of the W3C, through a loose group of
browser manufacturers and other interested parties calling themselves the WHATWG,
or Web Hypertext Application Technology Working Group. The WHATWG announced the
existence of an open mailing list in June 2004, along with a website bearing
the strapline “Maintaining and evolving HTML since 2004”. The key motive of the
group was to create a platform for dynamic web applications; they considered
XHTML 2.0 to be too document-centric, and not suitable for the creation of internet
forum sites or online shops.
HTML5 has both a regular
text/html
serialization and an XML serialization, which is known as XHTML5. In addition
to the markup language, the specification includes a number of application
programming interfaces. The Document Object Model is extended with APIs for
editing, drag-and-drop, data storage and network communication.
The language is more compatible with HTML 4 and XHTML 1.x than XHTML 2.0,
due to the decision to keep the existing HTML form elements and events model.
It adds many new elements not found in XHTML 1.x, however, such as
section
and aside
.
The most recent draft includes WAI-ARIA support.
Semantic content in XHTML
XHTML+RDFa is an extended version of the XHTML markup language for
supporting RDF through a collection of attributes and processing rules in the
form of well-formed XML documents. This host language is one of the techniques
used to develop Semantic Web content by embedding rich semantic markup.
Valid XHTML documents
An XHTML document that conforms to an XHTML specification is said to be valid.
Validity assures consistency in document code, which in turn eases processing,
but does not necessarily ensure consistent rendering by browsers. A document
can be checked for validity with the W3C Markup Validation Service. In
practice, many web development programs provide code validation based on the W3C
standards.
Root element
The root element of an XHTML document must be
html
,
and must contain an xmlns
attribute to associate it with the XHTML namespace. The namespace URI for XHTML
is http://www.w3.org/1999/xhtml
.
The example tag below additionally features an xml:lang
attribute to identify the document with a natural language:<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
DOCTYPEs
In order to validate an XHTML document, a Document Type Declaration, or DOCTYPE,
may be used. A DOCTYPE declares to the browser the Document Type Definition
(DTD) to which the document conforms. A Document Type Declaration should be
placed before the root element.
The system identifier part of the DOCTYPE, which in these examples is the URL
that begins with http://, need only point to a copy of the DTD to use,
if the validator cannot locate one based on the public identifier (the other
quoted string). It does not need to be the specific URL that is in these
examples; in fact, authors are encouraged to use local copies of the DTD files
when possible. The public identifier, however, must be character-for-character
the same as in the examples.
XML declaration
A character encoding may be specified at the beginning of an XHTML document
in the XML declaration when the document is served using the
application/xhtml+xml
MIME type. (If an
XML document lacks encoding specification, an XML parser assumes that the
encoding is UTF-8 or UTF-16, unless the encoding has already been determined by
a higher protocol.)
For example:
<?xml version="1.0"
encoding="UTF-8" ?>
The declaration may be optionally omitted because it declares as its
encoding the default encoding. However, if the document instead makes use of
XML 1.1 or another character encoding, a declaration is necessary. Internet
Explorer prior to version 7 enters quirks mode, if it encounters an XML
declaration in a document served as
text/html
.Common errors
Some of the most common errors in the usage of XHTML are:
- Not closing empty elements (elements without closing tags in HTML4)
- Incorrect:
<br>
- Correct:
<br />
Note that any of these is acceptable in XHTML:<br></br>
,<br/>
, and<br />
. Older HTML-only browsers interpreting it as HTML will generally accept<br>
and<br />
. - Not closing non-empty elements
- Incorrect:
<p>This is a paragraph.<p>This is another paragraph.
- Correct:
<p>This is a paragraph.</p><p>This is another paragraph.</p>
- Improperly nesting elements (Note that this would also be invalid in HTML)
- Incorrect:
<em><strong>This is some text.</em></strong>
- Correct:
<em><strong>This is some text.</strong></em>
- Not putting quotation marks around attribute values
- Incorrect:
<td rowspan=3>
- Incorrect:
<td rowspan='3">
- Correct:
<td rowspan="3">
- Correct:
<td rowspan='3'>
- Using the ampersand character outside of entities (Note that this would also be invalid in HTML)
- Incorrect:
<title>Cars & Trucks</title>
- Correct:
<title>Cars & Trucks</title>
- Incorrect:
<a href="index.php?page=news&id=5">News</a>
- Correct:
<a href="index.php?page=news&id=5">News</a>
- Failing to recognize that XHTML elements and attributes are case sensitive
- Incorrect:
<BODY><P ID="ONE">The Best Page Ever</P></BODY>
- Correct:
<body><p id="ONE">The Best Page Ever</p></body>
- Using attribute minimization
- Incorrect:
<textarea readonly>READ-ONLY</textarea>
- Correct:
<textarea readonly="readonly">READ-ONLY</textarea>
- Misusing CDATA, script-comments and xml-comments when embedding scripts and stylesheets.
- This
problem can be avoided altogether by putting all script and stylesheet
information into separate files and referring to them as follows in the
XHTML
head
element.
<link rel="stylesheet" href="/style/screen.css" type="text/css" />
<script type="text/javascript" src="/script/site.js"></script>
Note: The format
<script …></script>
,
rather than the more concise <script
… />
, is required for HTML compatibility when served as MIME
type text/html
.
·
If an author chooses to include script or style
data inline within an XHTML document, different approaches are recommended as
shown in the examples below, depending whether the author intends to serve the
page as
application/xhtml+xml
and
target only fully conformant browsers, or serve the page as text/html
and try to obtain usability in
non-conformant browsers.Backward compatibility
XHTML 1.x documents are mostly backward compatible with HTML 4 user agents
when the appropriate guidelines are followed. XHTML 1.1 is essentially
compatible, although the elements for ruby annotation are not part of the HTML
4 specification and thus generally ignored by HTML 4 browsers. Later XHTML 1.x
modules such as those for the
role
attribute, RDFa and WAI-ARIA degrade gracefully in a similar manner.
XHTML 2.0 is significantly less compatible, although this can be mitigated
to some degree through the use of scripting. (This can be simple one-liners,
such as the use of “
document.createElement()
”
to register a new HTML element within Internet Explorer, or complete JavaScript
frameworks, such as the FormFaces implementation of XForms)Examples
The following are examples of XHTML 1.0 Strict, with both having the same
visual output. The former one follows the HTML Compatibility Guidelines of the
XHTML Media Types Note while the latter one breaks backward compatibility, but
provides cleaner markup.
Media type recommendation for the examples:
|
||
Media type
|
Example 1
|
Example 2
|
application/xhtml+xml
|
SHOULD
|
SHOULD
|
application/xml
|
MAY
|
MAY
|
text/xml
|
MAY
|
MAY
|
text/html
|
MAY
|
SHOULD NOT
|
Example 1.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en">
<head>
<meta
http-equiv="Content-Type" content="text/html;
charset=UTF-8" />
<title>XHTML 1.0 Strict
Example</title>
<script
type="text/javascript">
//<![CDATA[
function
loadpdf() {
document.getElementById("pdf-object").src="http://www.w3.org/TR/xhtml1/xhtml1.pdf";
}
//]]>
</script>
</head>
<body
onload="loadpdf()">
<p>This
is an example of an
<abbr
title="Extensible HyperText Markup Language">XHTML</abbr>
1.0 Strict document.<br />
<img
id="validation-icon"
src="http://www.w3.org/Icons/valid-xhtml10"
alt="Valid XHTML 1.0 Strict" /><br />
<object
id="pdf-object"
name="pdf-object"
type="application/pdf"
data="http://www.w3.org/TR/xhtml1/xhtml1.pdf"
width="100%"
height="500">
</object>
</p>
</body>
</html>
Example 2.
<?xml version="1.0"
encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>XHTML 1.0 Strict
Example</title>
<script
type="application/javascript">
<![CDATA[
function
loadpdf() {
document.getElementById("pdf-object").src="http://www.w3.org/TR/xhtml1/xhtml1.pdf";
}
]]>
</script>
</head>
<body
onload="loadpdf()">
<p>This
is an example of an
<abbr
title="Extensible HyperText Markup Language">XHTML</abbr>
1.0 Strict document.<br/>
<img
id="validation-icon"
src="http://www.w3.org/Icons/valid-xhtml10"
alt="Valid XHTML 1.0 Strict"/><br />
<object
id="pdf-object"
type="application/pdf"
data="http://www.w3.org/TR/xhtml1/xhtml1.pdf"
width="100%"
height="500"/>
</p>
</body>
</html>
Notes:
- The "loadpdf" function is actually a workaround for Internet Explorer. It can be replaced by adding <param name="src" value="http://www.w3.org/TR/xhtml1/xhtml1.pdf" /> within <object>.
- The img element does not get a name attribute in the XHTML 1.0 Strict DTD. Use id instead.
Cross-compatibility of XHTML and HTML
HTML5 and XHTML5 serializations are largely inter-compatible if adhering to
the stricter XHTML5 syntax, but there are some cases in which XHTML will not
work as valid HTML5 (e.g., processing instructions are deprecated in HTML, are
treated as comments, and close on the first "?", whereas they are
fully allowed in XML, are treated as their own type, and close on "?>").
0 comments:
Post a Comment