Copyright ©2010 XBRL International Inc., All Rights Reserved.
Circulation of this supporting document for a Proposed Recommendation is unrestricted. Other documents may supersede this document. Recipients are invited to submit comments to rendering-feedback@xbrl.org, and to submit notification of any relevant patent rights of which they are aware and provide supporting documentation.
Inline XBRL Part 0: Primer is a non-normative document intended to provide an easily readable description of Inline XBRL. [Inline XBRL Specification] and [Inline XBRL Schema] provide the complete normative description of the Inline XBRL specification.
1 Introduction
2 Structure
2.1 The Inline XBRL Document
2.2 Multiple documents
2.3 Use of ID types
3 Processing and validation
3.1 Inline XBRL documents
3.2 Processors
3.2.1 The Conformant Processor
3.2.2 The Validating Conformant Processor
3.3 Validation
3.4 Conformance suite
3.4.1 Use of valid test pairs in the conformance suite
3.4.2 Use of invalid IXDSs in the conformance suite
3.5 Identification of Inline XBRL documents
3.5.1 Doctype
3.5.2 Version
3.5.3 Processing Inline XBRL
3.5.4 Non-XHTML
4 Transformation rules
5 Mapping values to the Target Document
5.1 Contexts
5.2 Duplicates
5.3 Equal values
5.4 Totalling
5.5 Nested tags
5.6 Nested tuples
5.7 Signs
5.8 Other attributes
6 Formatting
6.1 Markup elements in text data
6.2 XML-escaping
7 Syntax
7.1 MIME types
7.2 Namespace declarations
7.3 Page breaks
7.4 QNames in attributes
7.5 URIs in Markup elements
7.6 URIs in Inline XBRL Elements
8 Discussion of consuming applications
8.1 Hidden elements
8.2 DOM
A References
B Intellectual property status (non-normative)
C Acknowledgements (non-normative)
D Document history (non-normative)
Inline XBRL was created to avoid the need to create visual renderings of XBRL instance documents.
Conventional XML data documents (like XBRL instance documents) maintain a separation of data and rendering instructions. The data is kept in the XML data document, and the rendering instructions are kept in a stylesheet or separate application. Where the structure of the data is known in advance, this is efficient and simple. XBRL, however, is based on taxonomies and not schemas: the precise data content of a document is often not known in advance. This makes it difficult to devise satisfactory rendering instructions.
Inline XBRL is a mechanism for allowing the author of the XBRL instance document to specify the visual rendering of the data. It does this by providing a method for incorporating XBRL instance data and metadata into an HTML or XHTML document. The [Inline XBRL Specification] defines how this data and metadata can then be used to construct an XBRL instance document.
The Inline XBRL Document is typically a single XHTML document which, when displayed in a browser, provides a full visual rendering of given XBRL data. An Inline XBRL processor (a "Processor"), given that Inline XBRL Document, will generate an XBRL instance document.
In the Inline XBRL Document, data values are nested wtihin Inline XBRL Elements which are themselves nested within HTML or XHTML elements ("Markup Elements"). This technique relies upon the ability of browsers to ignore XML elements that it does not recognise. The browser, in effect, ignores the Inline XBRL Elements and displays the data values as though they were textual content of the Markup Elements. A Processor will ignore the Markup Elements and combine the Inline XBRL Elements and the data values to generate an XBRL instance document (the "Target Document").
Current browsers impose an effective maximum size limit on the files that they can handle. The financial statements for a large company, which might be in the order of five megabytes in size, are too large for most browsers to handle today.
To get round this limitation, a complete set of Inline XBRL information can be split across multiple documents. The [Inline XBRL Specification] allows a set of documents, which together may form part of a web-site, to be treated as a single Inline XBRL Document Set ("IXDS"). There are few restrictions relating to the division of metadata between the different documents in the document set, so it is open to the author to repeat metadata across documents or to abstract common metadata (such as context information) into a header document.
The [Inline XBRL Specification] allows (although it does NOT recommend) the IXDS to consist of both HTML and XHTML documents. The [Inline XBRL Specification] requires that a Validating Conformant Processor validate any XHTML documents against the Schema, but it will not validate or process a mixed-type IXDS.
Because Inline XBRL can use multiple documents, use of IDs and IDREFs is scoped across the IXDS rather than the individual Inline XBRL Document. Thus, an item of type IDREF must have a matching ID somewhere within the IXDS, not necessarily within the same Inline XBRL Document. However, the conventional method of IDREF typing (as defined in [XML Schema Datatypes]) can only be applied, for validation purposes, to a single document.
We considered requiring that schema validation be applied to an IXDS that had
been merged to create a single document. However, while the Inline XBRL Elements in
the IXDS can be merged without danger to the semantics, the Markup Elements
cannot. There are issues relating to merging common elements - like
HTML
, HEAD
and BODY
- which would make
it difficult to validate the document with confidence after the merge.
The problem is that schema validation using the XHTML Modular Schema covers both the Inline XBRL elements and the Markup Elements. Given that the merge can have unpredictable results on the validity of the XHTML, it is sensible to restrict schema-level validation to each individual Inline XBRL Document rather than the IXDS.
We have accordingly avoided IDREF and IDREFS types in the [Inline XBRL Schema], making use of xs:NCName
types instead,
replacing the implicit schema constraints with appropriate
MUSTs within the [Inline XBRL Specification]. These
MUSTs are then tested by proprietary code within the
Validating Conformant Processor, which can do so without concern about the
impact of merging on XHTML validation.
We have taken the same approach with the optional id
attribute,
which uses the xs:NCName
type, and is required by the [Inline XBRL Specification] to be unique across the IXDS. By requiring id attributes
to be unique across the IXDS it becomes simpler for the Processor to identify
elements, should that be necessary.
contextRef
,
footnoteID
, footnoteRefs
, id
,
tupleID
, tupleRef
and unitRef
attributes are validated with reference to the IXDS and not the
individual Inline XBRL Document.
The [Inline XBRL Specification] provides for different levels of conforming Inline XBRL documents. Inline XBRL documents will generally be HTML or XHTML. They can also, in theory, be any other well-formed XML dialect. All must, of course, be compliant with the specification but only XHTML documents can be validated using the normative [Inline XBRL Schema].
The following table summarises the validation framework for Inline XBRL documents. It is described in fuller detail in the following paragraphs.
Non-HTML | HTML | XHTML | |
Well-formed XML and compliant Inline XBRL | MUST | MUST | MUST |
Validatable against [Inline XBRL Schema] | no | no | yes |
Validatable by a Validating Conformant Processor against the rules set out in the [Inline XBRL Specification] | MUST NOT | MUST NOT | MUST |
The specification, however, does not outlaw non-XHTML dialects because we wanted to encourage as-yet unforeseen uses of Inline XBRL to develop in the future with the full benefit of the specification. There is, in fact, no technical reason short of validation why non-XHTML dialects should not be as acceptable a host for Inline XBRL as XHTML.
The purpose of the Processor is to generate XBRL from an IXDS without reference to any taxonomy. Even so, there are different types of Processors:
Validation is the process which must be carried out in full by a Validating Conformant Processor on any XHTML document. Validation involves:
For the purposes of the conformance suite, a set of Schematron rules have been created, which test many of the rules set out in the [Inline XBRL Specification]. Together, the Schematron rules and the Schema provide nearly-complete coverage of all the requirements of the [Inline XBRL Specification].
Note that while the rules in the [Inline XBRL Specification] and the [Inline XBRL Schema] are both normative (the latter only for XHTML-based documents), the Schematron rules are non-normative. This is because the Schematron rules are encapsulations of the (normative) MUSTs in the [Inline XBRL Specification], while the [Inline XBRL Schema] covers concepts which are not in all cases made explicit in the [Inline XBRL Specification].
The implication of this is that application of the Schematron rules will NOT necessarily meet the requirement for a Validating Conformant Processor to test that the IXDS meets the rules set out in the [Inline XBRL Specification].
The [Inline XBRL Schema] uses a modular technique which involves extending the XHTML Schema to accept Inline XBRL Elements within the XHTML document. The Schema also makes use of parts of the schemas for XBRL, but to accomplish this some changes have had to be made to the structure of the XBRL Schemas that are referenced by the modular [Inline XBRL Specification]. The re-structured schemas logically define identical instance document content models as the normative XBRL Schemas.
The conformance suite is used to test a Processor and has no role in determining the validity of a given Inline XBRL Document.
The conformance suite consists largely of pairs of IXDSs and Target Documents. Each pair is illustrative of a conforming transformation. Both a Conformant Processor and a Validating Conformant Processor will, when processing a given IXDS, generate the associated Target Documents; if it does not, it will not be deemed conformant.
Setting a DOCTYPE
in the Inline XBRL Document will, in many
processing situations, trigger an attempt to validate against a DTD. We did
not plan for the use of DTDs in Inline XBRL because of lack of support for
namespaces in DTDs. There is therefore no normative DTD for Inline XBRL.
DOCTYPE
in Inline XBRL
Documents, because it is liable to lead to a validation failure.
The version
attribute can, optionally, be used
to identify a document as Inline XBRL. If used, the value
MUST be the Formal Public Identifier defined in [Inline XBRL Schema] (currently "-//XBRL International//DTD XHTML Inline XBRL
1.0//EN").
It is worth noting that the Public Text Class "DTD", when used as part of the Formal Public Identifier, means "document type declaration subset" and not "Document Type Definition"; so the use of the Formal Public Identifier should not be taken to imply the existence of a Document Type Definition.
Because the version attribute is optional, it cannot be relied upon by
Processors seeking to identify a document as Inline XBRL. Instead, a Processor
will look for (a) the namespace of the root HTML
element, which
should have the namespace name "http://www.w3.org/1999/xhtml"; and (b) the
existence of one or more elements which have the
"http://www.xbrl.org/2008/inlineXBRL" namespace name.
It will often be the case that the namespace name of the root element will have a schema location hint leading the Processor to "http://www.xbrl.org/2008/inlineXBRL/xhtml-inlinexbrl-1_0.xsd": but this location is not mandatory (and so cannot be relied upon) and will in any case (for security or performance considerations) often be ignored by the Processor.
A document which does not have a root HTML
element (or which has a
root HTML
element which does not have the namespace name
"http://www.w3.org/1999/xhtml") but which does include one or more elements
which have the "http://www.xbrl.org/2008/inlineXBRL" namespace name can still
be in full compliance with the Inline XBRL specification and therefore can be
considered prima facie an Inline XBRL Document. A Conformant Processor is
expected to process such a document successfully, if it is in compliance with
the specification. However, a Validating Conformant Processor will not
successfully validate such a document and is not allowed to process it further.
If the document complies with the specification the Processor will be able to generate the Target Document successfully. However, in the absence of validation there is no obvious way of determining compliance and the behaviour of the Processor in the presence of a non-compliant document is not defined by the specification. The purpose of this treatment is to allow well-formed XML (other than XHTML) to host Inline XBRL Elements. As mentioned above, had we forbidden any host markup other than XHTML it would have outlawed potential future uses of the Specification.
The [Inline XBRL Specification] provides examples of transformation rules, but the normative list will be maintained separately. The transformations will require different implementations for different execution environments.
Transformation rules may be thought of as parsing rules; they convert textual
displays into XML Schema data types having canonical lexical representations
along with XBRL specific attributes. Transformation rules producing types
derived from xs:decimal
, in particular, must interpret the
decimals
and precision
attributes
and produce not only a canonical lexical representation but also corresponding
decimals
and precision
attributes.
There is a long tail of potentially useful transformations to parse currency symbols, dates (in a variety of formats), Boolean values, texts written right-to-left, Chinese, and other display formats. The registry is a practical means for covering a large set of critical numeric and date types for browser execution, XSL and other key environments, while allowing for growth in the set of transformations and implementations.
Every XBRL fact and xlink relationship in the Target Document must be justified by reference to an appropriate Inline XBRL Element in the input data. This means that the Target Document is not allowed to contain other facts or relationships. (It does not, incidentally, prohibit duplication, if duplicates are present in the input data.) Nor does it restrict contexts and units, which may be included in the Target Document whether or not they appeared in the input document.
Inline XBRL does not specify any way for the text content of Markup Elements
displayed in a browser to be transformed into the content of contexts in the
target documents. Dates appearing in column headings, for example, normally
appear in the IXDS as Markup Elements without any Inline XBRL Element
ancestors. Management of the contexts referenced by
xbrli:contextRef
attributes in the IXDS is done
as in any other XBRL creation process.
Financial statements normally have at least a handful of facts that appear in more than one location in an IXDS. Net Income, for example, may appear both on an Income Statement and a Statement of Cash Flows. If both occurrences in the IXDS are tagged with the same element and context, and have the same actual or default {target} property, the output may contain both occurrences.
In some cases it will be desired that such occurrences ("duplicates") are removed from the output. However, the rules for de-duplication will vary from occasion to occasion. Duplicates as defined by the XBRL v2.1 Specification can only be determined by reference to the DTS. Because Processors are not required to access the DTS, it cannot be assumed that a Processor will be able to carry out XBRL-level de-duplication. In addition, because it is possible to add user-defined (non-Inline XBRL) attributes to Inline XBRL Elements, output elements which are XBRL-s-equal may actually contain different attribute-level information.
The [Inline XBRL Specification] therefore allows de-duplication to be carried out at the discretion of the Processor.
In some cases, either because of different rounding conventions or by mistake, a pair of facts may match as to element name, context and {target} property, but may have different values. The [Inline XBRL Specification]requires that both facts appear in the Target Document. This is not illegal XBRL but it is very much to be deplored.
In the case of tuple children, however, the creation of duplicates in the target document will often be schema-invalid. For this reason, duplicate tuple children are removed prior to mapping. To keep the Processor as light-weight as possible, duplicates for these purposes are defined as those with the same tuple order value. To validate that these two elements do indeed have the same value, a string-comparison mechanism is used. This is more restrictive than the XBRL v2.1 Specification, which allows (say) for two elements with the same value to use different schemaRef attributes. Such elements would fail Inline XBRL validation. We consider that the benefits of this restriction, by making it easier to process Inline XBRL, outweigh any drawbacks.
An author might wish for a fragment of text in an IXDS to correspond to more than one fact in a Target Document. For example, a formatted date such as "25 June 2008" may need to appear in the target document both as a tuple with day, month and year, and separately as an item of type dateTime. Inline XBRL does not support a one-to-many mapping of source text to facts.
ix:hidden
element.
A special case of "Equal values" would be a numeric value displayed in the
Inline XBRL Document that is meant to map to more than one output fact, the sum
of which is the displayed total. (Note that in some regulatory environments,
this would clearly not be acceptable.) The displayed figure would have no
Inline XBRL tags at all; the output facts would simply appear as Inline XBRL
Elements inside the ix:hidden
element.
There is, however, a special case where "dual tagging" of a single piece of
displayed text is permissible. Individual pieces of data which fall within an
ix:nonNumeric
tag may also themselves be tagged. So a textual
note can be tagged as ix:nonNumeric
and parts of the text (say, a
fraction) can also be tagged (in this case, as ix:fraction
). That
fraction will appear twice in the target document, once as part of the textual
note and once as a numeric fact.
A single date within ix:nonNumeric
tags could, for instance, be
nested inside a further set of ix:nonNumeric
tags. The date would
appear twice in the target document, once for each ix:nonNumeric
element. If the date was in the form, say, "July 14, 1789" then both
ix:nonNumeric
elements would include the attribute
format="ixt:datelongus"
, and both dates in the Target Document
would appear in the canonical form "1789-07-14".
By using the ix:exclude
element it is possible to remove part of
the content of the ix:nonNumeric
element from the output in the
Target Document. But any ix:
tags which are nested within that
ix:exclude
element will continue to be processed in their own
right (although no longer as part of the host ix:nonNumeric
element).
Tuples can be nested, either physically or by reference (the latter by using
tupleRef
and tupleID
). There is no limit to the
recursion, except that it is not permitted for tuple content to include, in its
own tuple content, the parent tuple.
Inline XBRL requires that numerics (ix:denominator
,
ix:numerator
and ix:nonFraction
) must use the
sign
attribute to indicate negative values. Any
negative indicator (dash, brackets, or colour-coding) must be positioned in the
Inline XBRL Document outside the relevant Inline XBRL Element. The content of
the relevant Inline XBRL Element will therefore always be a non-negative
number, unless the format attribute is present and a transformation is thus
indicated.
Data values which are to be transformed must either represent non-numerics
(e.g. dates) or they must also represent (allowing for commas and other
formatting) non-negative numerics. No transformation may be used to change the
sign of the content. This enforces the general requirement that all numeric
values in Inline XBRL are always positive, and values which are required to be
negative in the Target Document may only be represented by use of the sign
attribute.
[XBRL 2.1] allows the addition of attributes, other
than those defined in the [Inline XBRL Specification], to an XBRL instance
document. For instance, it may be desired to give
xml:id
attributes to elements in
the XBRL instance document. Inline XBRL allows the matching addition of "other
attributes", in a number of places, to provide for this.
Note that for some elements (ix:footnote
,
ix:denominator
and ix:numerator
) the definition of
"other attributes" is explicitly more permissive than is the
attribute model for that element. This is because
definitions which explicitly matched the attribute model would
not, in fact, encompass attributes such as those with the
http://www.w3.org/2001/XMLSchema-instance
namespace
name which are not referenced in the schema but which are legal in both
Inline XBRL and XBRL v2.1. In the case of ix:denominator
and
ix:numerator
, attributes with the
http://www.w3.org/2001/XMLSchema-instance
namespace
name are actually the only legal members of "other attributes".
The Inline XBRL equivalents to XBRL text-based facts are
ix:footnote
and ix:nonNumeric
. There are some
important differences in the treatment of the content of these
elements. Neither has any restriction on element
content; in practice this means the content may be ix: elements
or
Markup Elements. Both can therefore accommodate the nesting of
ix:
elements and both use the
ix:exclude
element to remove content from the mapped data.
However, they are very different in their treatment of Markup Elements. In
Inline XBRL, most Markup Elements are discarded upon processing, but this is
not the case for ix:footnote
and ix:nonNumeric
. The
ix:footnote
element includes full Markup
Elements in its mappable value, in conformance with the content model for
link:footnote
in [XBRL 2.1]. However, [XBRL 2.1] does not allow Markup Elements in non-numeric facts. Inline XBRL
provides that Markup Elements are only mapped to the Target Document if the
escape
attribute has been set to true, in which
case the Markup Elements are XML-escaped in the Target Document. If the
escape
attribute is false, the HTML or XHTML
tags are discarded prior to mapping.
XML-escaped Markup Elements, where they are found in non-numeric XBRL facts, is used most commonly in US SEC reporting, to provide some local formatting for large blocks of text.
XML-escaping may be achieved by escaping individual characters or by enclosing the text in a CDATA block. It is up to the Processor to determine whether to use CDATA blocks or character escaping, because both options are treated as equivalent in [XML].
The full definition of XML-escaping can be found in [XML]. In
Inline XBRL, XML-escaping applies both to Markup Elements and Markup Elements
that have already been escaped in the original ix:nonNumeric
element. In the latter case, the mapped output will be "double-escaped".
Note, however, that the XML specification forbids the nesting of CDATA blocks.
By way of example, the XML <b> Hello World </b> will be output as <b> Hello World </b> . The XML > , which is escaped as > , would be double-escaped as &gt; .
The MIME type selected for the Inline XBRL Document will often have an impact on whether browsers display the document correctly. The MIME type can be set within the Inline XBRL Document with code such as: <meta content='text/html; charset=utf-8' http-equiv='Content-Type' /> .
It should also be noted that browsers may also depend upon the filename suffix in order to determine display behaviour.
The display of Inline XBRL documents in different browsers is, regrettably,
sometimes dependent upon the location of the namespace declarations in the
document. In particular, placing the XHTML namespace declaration
(xmlns:html="http://www.w3.org/1999/xhtml"
) anywhere in the body
of the Inline XBRL document is likely to lead to undefined treatment in many
browsers.
HTML
element and nowhere else.
Inline XBRL supports page breaks in printed output.
<p style="page-break-before: always" />
to
force a page break when the document is printed from most common browsers.
In Inline XBRL, the name of the XBRL element type in the Target Document is
determined by the value of the relevant
name
attribute in the Inline XBRL Document. The
name
attribute is a QName, that is,
it is in the form namespace prefix:local name.
So that the namespace prefix can be expanded to the underlying
namespace name, it is essential to make sure that all
name
attributes fall within the scope of the
appropriate namespace declaration.
There is a general rule (Section 3.3.2 of the [Inline XBRL Specification]) which requires that namespaces are handled in accordance with the namespaces specification, which is interpreted by Processors as requiring these declarations to be made available within the Target Document.
Note that it should not be necessary to provide a namespace declaration for
every name
attribute. As long as there is an
appropriate namespace declaration in scope for the attribute, the
QName
will be treated correctly in the Target Document.
Canonicalisation [C14N] of the Inline XBRL document, which will remove similar namespace declarations with an overlapping scope, will not have any impact on the validity of the Target Document.
QNames
which are used in the Inline XBRL Document.
Markup which is mapped to the target document (as is the case with Markup
Elements included in ix:footnote
elements and some
ix:nonNumeric
elements) may contain URIs.
In HTML and XHTML, URIs may be absolute or relative. In the absence of any alternative, relative URIs will be converted to absolute URIs by Processors using contextual information (such as current document location). This is unattractive for Inline XBRL, where the Inline XBRL document may be part of an electronic filing with no pre-determined location, and can lead to unpredictable results.
BASE
element in the HEAD
element of the Inline XBRL
document.
This topic is covered more fully in section 12.4.1 of the [HTML] specification.
Inline XBRL Element URIs, like URIs in Markup Elements, need to be capable
of resolution to absolute URIs as part of the mapping process. A common
example of this is the xlink:href
attribute.
The resolution of relative URIs in Inline XBRL Elements is controlled by the
xml:base
attribute.
xml:base
attribute.
In general, it has been assumed that Inline XBRL will be consumed by standalone Processors that will convert the Inline XBRL into an XBRL instance document which will then be passed on to another application for further analysis or storage. However, some use cases suggest that embedded applications (for instance, JavaScript executed by a browser) might also be used to process the Inline XBRL.
Some elements which are required in the XBRL are not expected to be
displayed. For instance, a value may be repeated several times in an XBRL
instance document, each time as a different concept. Where the convention is
only to display this value once, the other occurrences are not displayed in the
Markup. Inline XBRL uses the convention that such values will be placed in the
ix:hidden
element.
However, use of the hidden area opens the possibility that data which will in due course be processed and validated may be deliberately hidden from view. We expect that applications consuming Inline XBRL for further processing will search for tagged data which has not been displayed, to check that it is properly placed in the hidden area. Likewise, the consuming application would check data in the hidden area to determine whether it appears to have been hidden for good reason.
There is a general caution with respect to Inline XBRL for in-browser processing. Inline XBRL uses several XML namespaces to provide for more reliable data processing. Within the browser, however, different browsers may expose Inline XBRL Elements to the [HTML DOM] in different ways. Web designers looking to access Inline XBRL metadata should be careful to take this into account.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to XBRL International or XBRL organizations, except as required to translate it into languages other than English. Members of XBRL International agree to grant certain licenses under the XBRL International Intellectual Property Policy (www.xbrl.org/legal).
This document and the information contained herein is provided on an "AS IS" basis and XBRL INTERNATIONAL DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
The attention of users of this document is directed to the possibility that compliance with or adoption of XBRL International specifications may require use of an invention covered by patent rights. XBRL International shall not be responsible for identifying patents for which a license may be required by any XBRL International specification, or for conducting legal inquiries into the legal validity or scope of those patents that are brought to its attention. XBRL International specifications are prospective and advisory only. Prospective users are responsible for protecting themselves against liability for infringement of patents. XBRL International takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Members of XBRL International agree to grant certain licenses under the XBRL International Intellectual Property Policy (www.xbrl.org/legal).