Associating stylesheets with XML documents

W3C Proposed Recommendation 28 April 1999

This version:
Latest version:
Previous version:
James Clark ()

Copyright  ©  1999 W3C (MIT, INRIA, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.


This specification allows a stylesheet to be associated with an XML document by including one or more processing instructions with a target of xml-stylesheet in the document's prolog.

Status of this document

This document is a Proposed Recommendation of the World Wide Web Consortium and is currently undergoing review by the Members of the World Wide Web Consortium.

Review comments on this specification should be sent by 26 May, 1999 to <www-xml-stylesheet-comments@w3.org>. An archive of public comments is available. W3C Members may send their formal comments, visible only to the W3C Team, to <w3c-xml-stylesheet-review@w3.org>.

The technology explained in this Proposed Recommendation is not the only one for its task. There are others available or under development that allow the link to be outside the XML document (the HTTP Link header, explained in the specification below), that are extensible (based on XML namespaces), self-documenting (like RDF), that can be validated (because they use only attributes and elements), and that allow the style rules to be embedded directly in the document (like HTML's style element and attribute). However, while development of powerful and general metadata technology continues, the current specification is simple and opportune, and has been proven to work.

This specification should not be taken as a precedent, as XML Processing Instructions are unlikely to be used in any future W3C Recommendations.

This specification is a revision of the public working draft dated 1999-04-07. The Working Group anticipates no further substantial changes to this specification and encourages active implementation to test this specification during the Proposed Recommendation review period. The Working Group expects additional mechanisms for linking style sheets to XML document to be defined in a future specification.

Publication as a Proposed Recommendation does not imply endorsement by the W3C membership. This is still a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite W3C Drafts as other than "work in progress." Refer to the technical reports page for the status of drafts.

This work is part of the W3C XML Activity.

Table of Contents

1. The xml-stylesheet processing instruction


A. References
B. Rationale (Non-Normative)

1. The xml-stylesheet processing instruction

Stylesheets can be associated with an XML[XML10] document by using a processing instruction whose target is xml-stylesheet. This processing instruction follows the behaviour of the HTML 4.0 <LINK REL="stylesheet">[HTML40].

The xml-stylesheet processing instruction is parsed in the same way as a start-tag, with the exception that entities other than predefined entities must not be referenced.

The following grammar is given using the same notation as the grammar in the XML Recommendation[XML10]. Symbols in the grammar that are not defined here are defined in the XML Recommendation.

xml-stylesheet processing instruction

[1] StylesheetPI ::= '<?xml-stylesheet' (S PseudoAtt)* S? '?>'
[2] PseudoAtt ::= Name S? '=' S? PseudoAttValue
[3] PseudoAttValue ::= '"' ([^"<&] | CharRef | PredefEntityRef)* '"'
      | "'" ([^'<&] | CharRef | PredefEntityRef)* "'"
[4] PredefEntityRef ::= '&amp;' | '&lt;' | '&gt;' | '&quot;' | '&apos;'

In PseudoAttValue, a CharRef or a PredefEntityRef is interpreted in the same manner as in a normal XML attribute value. The actual value of the pseudo-attribute is the value after each reference is replaced by the character it references. This replacement is not performed automatically by an XML processor.

The xml-stylesheet processing instruction is allowed anywhere in the prolog of an XML document. The syntax of XML constrains where processing instructions are allowed in the prolog; the xml-stylesheet processing instruction is subject to these constraints in the same way as any other processing instruction.

The following pseudo attributes are defined

alternate (yes|no) "no"

The semantics of the pseudo-attributes are exactly as with <LINK REL="stylesheet"> in HTML 4.0, with the exception of the alternate pseudo-attribute. If alternate="yes" is specified, then the processing instruction has the semantics of <LINK REL="alternate stylesheet"> instead of <LINK REL="stylesheet">.

In some cases, a stylesheet might be associated with an XML document by means of some external context. For example, earlier versions of HTTP [RFC2068] (section allowed stylesheets to be associated with XML documents by means of the Link header. Any links specified by HTTP Link headers are considered to occur before the links specified by the xml-stylesheet processing instructions. This is the same as in HTML 4.0 (see section 14.6).

Here are some examples from HTML 4.0 with the corresponding processing instruction:

<LINK href="mystyle.css" rel="stylesheet" type="text/css">
<?xml-stylesheet href="mystyle.css" type="text/css"?>

<LINK href="mystyle.css" title="Compact" rel="stylesheet"
<?xml-stylesheet href="mystyle.css" title="Compact" type="text/css"?>

<LINK href="mystyle.css" title="Medium" rel="alternate stylesheet"
<?xml-stylesheet alternate="yes" href="mystyle.css" title="Medium"

Multiple xml-stylesheet processing instructions are also allowed with exactly the same semantics as with LINK REL="stylesheet". For example,

<LINK rel="alternate stylesheet" title="compact" href="small-base.css"
<LINK rel="alternate stylesheet" title="compact" href="small-extras.css"
<LINK rel="alternate stylesheet" title="big print" href="bigprint.css"
<LINK rel="stylesheet" href="common.css" type="text/css">

would be equivalent to:

<?xml-stylesheet alternate="yes" title="compact" href="small-base.css"
<?xml-stylesheet alternate="yes" title="compact" href="small-extras.css"
<?xml-stylesheet alternate="yes" title="big print" href="bigprint.css"
<?xml-stylesheet href="common.css" type="text/css"?>

A. References

World Wide Web Consortium. HTML 4.0 Specification. W3C Recommendation. See http://www.w3.org/TR/REC-html40
R. Fielding, J. Gettys, J. Mogul, H. Frystyk Nielsen, and T. Berners-Lee. Hypertext Transfer Protocol -- HTTP/1.1.. IETF RFC 2068. See http://info.internet.isi.edu/in-notes/rfc/files/rfc2068.txt.
World Wide Web Consortium. Extensible Markup Language (XML) 1.0. W3C Recommendation. See http://www.w3.org/TR/1998/REC-xml-19980210

B. Rationale (Non-Normative)

Use of a processing instruction avoids polluting the main document structure with application specific processing information. This is what processing instructions are designed for.

There was an urgent requirement for a specification for stylesheet linking that could be completed in time for the next release from major browser vendors. Only by choosing a simple mechanism closely based on a proven existing mechanism could the specification be completed in time to meet this requirement.

The mechanism chosen for this version of the specification is not a constraint on the additional mechanisms planned for future versions; there is no constraint that these use processing instructions, nor even that they include the linking information in the source document.