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.
This document is a Working Draft of W3C. While it is a Working Draft or a Proposed Recommendation it is subject to change. It may be updated, replaced or rendered obsolete by other W3C documents at any time. It is inappropriate to use W3C Working Drafts as reference material or to cite them as other than "work in progress."
This specification has been proposed as a Recommendation before, but the amount of review it received in the time set apart for the review was considered too small, and it was consequently returned to Working Draft status. A new review period will be started towards the end of April 1999.
This work is part of the W3C XML Activity.
xml-stylesheet
processing
instructionxml-stylesheet
processing
instructionStylesheets 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 | ::= | '&' | '<' | '>' | '"' | ''' |
---|
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
href CDATA #REQUIRED type CDATA #REQUIRED title CDATA #IMPLIED media CDATA #IMPLIED charset CDATA #IMPLIED 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">
.
HTTP [RFC2068], section 19.6.2.4, allows
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" type="text/css"> <?xml-stylesheet href="mystyle.css" title="Compact" type="text/css"?> <LINK href="mystyle.css" title="Medium" rel="alternate stylesheet" type="text/css"> <?xml-stylesheet alternate="yes" href="mystyle.css" title="Medium" type="text/css"?>
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" type="text/css"> <LINK rel="alternate stylesheet" title="compact" href="small-extras.css" type="text/css"> <LINK rel="alternate stylesheet" title="big print" href="bigprint.css" type="text/css"> <LINK rel="stylesheet" href="common.css" type="text/css">
would be equivalent to:
<?xml-stylesheet alternate="yes" title="compact" href="small-base.css" type="text/css"?> <?xml-stylesheet alternate="yes" title="compact" href="small-extras.css" type="text/css"?> <?xml-stylesheet alternate="yes" title="big print" href="bigprint.css" type="text/css"?> <?xml-stylesheet href="common.css" type="text/css"?>
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.