XBRLInstance and XBRLTaxonomy: Difference between pages

From XBRLWiki
(Difference between pages)
Jump to navigationJump to search
 
 
Line 1: Line 1:
[[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/instance/XBRLInstance.html XBRLInstance javadoc page]]
[[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html XBRLTaxonomy javadoc page]]
===Description===
===Description===
An XBRLInstance object represents the content of an XBRL Report. This is:
An XBRLTaxonomy object represents the content of an XBRL Taxonomy and the surrounding XML Schema. This is:


* all XBRL facts , and
* the Namespace, and
* all XBRL contexts, and
* all XBRL concept definitions (items and tuples) , and
* all XBRL units, and
* all XBRL role types locally defined, and
* all Footnote Linkbases, and
* all XBRL arcrole types locally defined, and
* all references to XBRLTaxonomies, XBRLLinkbases, XBRLRoleRef and XBRLArcroleRef required for obtaining the DTS.
* all references to imported XBRL Taxonomies, and
* all references to external XBRL Linkbases, and
* all embedded XBRL Linkbases, and
* all other XML Schema related constructions like global groups, global type declarations, global attribute groups, global attribute declarations and global element declarations that are not XBRL concepts.


===How to create an instance of an XBRLInstance object===
===How to create an instance of an XBRLTaxonomy object===


There are several ways depending on what you are doing:
There are several ways depending on what the user needs are:


* If the user have just created a new empty [[DTSContainer]] object and the purpose is to read the content of an XBRL report (and the whole referenced DTS) then the simplest way is to use one of the load methods in the [[DTSContainer]] object passing the document URI of the XBRL report. The returned object is an XBRLDocument that can be casted to an XBRLInstance.
* If the user have just created a new empty [[DTSContainer]] object and the purpose is to read the content of an XBRL taxonomy (and the whole referenced DTS) then the simplest way is to use one of the load methods in the [[DTSContainer]] object passing the document URI of the XBRL taxonomy. The returned object is an XBRLTaxonomy that can be casted to an XBRLTaxonomy.


* If the user has already loaded a DTS (from a taxonomy file) and the purpose is to create a new XBRLInstance (in order to populate it with facts) then the user can use any of the available [http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/instance/XBRLInstance.html#constructor_summary constructors]. The most commonly used constructor is [http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/instance/XBRLInstance.html#XBRLInstance(com.ihr.xbrl.om.DTSContainer) XBRLInstance(com.ihr.xbrl.om.DTSContainer)] that accepts the current DTSContainer as a parameter and allows the user to start adding facts programatically.
* If the user has already loaded a DTS (from another taxonomy file or an XBRL report) and the purpose is to create a new XBRLTaxonomy (in order to create a taxonomy extension) then, the user can use any of the available [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#constructor_summary constructors]]. The most commonly used constructor is [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#XBRLTaxonomy(com.ihr.xbrl.om.DTSContainer) XBRLTaxonomy(com.ihr.xbrl.om.DTSContainer)]] that accepts the current DTSContainer as a parameter and allows the user to start adding concepts programatically.


====Examples====
Creation of a XBRLTaxonomy object from a local file name:
 
<syntaxhighlight lang="java">
Creation of a XBRLInstance object from a URL
 
<pre>
/**
/**
  * Sample, a new instance document is read form the file received as a parameter
  * Sample, a new XBRLTaxonomy document is read form the file received as a parameter
  * After the instance object is obtained, the user can start working with it
  * After the instance object is obtained, the user can start working with it
  */
  */
public class SampleReadInstance {
public class SampleReadTaxonomy {


public static void main(String[] args) throws Exception {
  public static void main(String[] args) throws Exception {
DTSContainer dts = DTSContainer.newEmptyContainer();
    DTSContainer dts = DTSContainer.newEmptyContainer();
XBRLInstance instance = (XBRLInstance)dts.load(new File(args[0]).toURI());
    XBRLTaxonomy taxonomy = (XBRLTaxonomy)dts.load(new File(args[0]).toURI());
// ... rest of the application code goes here
    // ... rest of the application code goes here
}
  }
}
}
</pre>
</syntaxhighlight>


Creation of a new instance docyment for a DTS after the DTS has been loaded
Creation of a new taxonomy document for a DTS after the DTS has been loaded:
 
<syntaxhighlight lang="java">
<pre>
/**
/**
  * Sample, a new instance document is created after the DTS has been loaded
  * Sample, a new instance document is created after the DTS has been loaded
  */
  */
public class SampleCreateInstanceForDTS {
public class SampleCreateTaxonomyExtension {
 
  public static void main(String[] args) throws Exception {
    DTSContainer dts = DTSContainer.newEmptyContainer();
    dts.load(new File("sampleTaxonomy.xsd").toURI());
 
    XBRLTaxonomy taxonomy = new XBRLTaxonomy(dts);
 
    // adds taxonomy default minimum information
    String targetNamespace = "http://www.reportingstandard.com/samples/2009/newTaxonomy";
    tx.setURI(new URI("taxonomyExtension.xsd"));
    tx.setTargetNamespace(targetNamespace);
    tx.addNamespace("tx", targetNamespace);
    dts.addDocumentToDTS(tx);


public static void main(String[] args) throws Exception {
    // ... rest of the application code goes here
DTSContainer dts = DTSContainer.newEmptyContainer();
 
dts.load(new File("sampleTaxonomy.xsd").toURI());
    // Save the Taxonomy extension to disk
XBRLInstance instance = new XBRLInstance(dts);
    dts.save(true);
// ... rest of the application code goes here
  }
}
}
}
</pre>
</syntaxhighlight>


===Working with facts in an XBRLInstance===
===The Namespace===


This section describes two abstract operations that the user can execute on XBRLInstance objects regardless the way they have been created.
XBRL Taxonomies are the containers of concept definitions. Concept definitions must be unique worldwide (assets in the US-GAAP and assets in the IFRS). The mechanism provided by the W3C consortium in order to allow easy distinction between concepts defined in different taxonomies is called namespaces.


The XBRLInstance object is able to automatically change in order to keep consistency during operations. For example, the action of adding a new XBRLFact item to the XBRLInstance may automatically add a new context or may reuse an existing context instead. The same happens with the unit and with the reference to the required taxonomy schema. Removing facts from the XBRLInstance is also an operation that keeps the instance document content consistent while silently removes content that is no longer used (like unused units or contexts etc).
Each taxonomy is an XML Schema. An XML Schema may define a Namespace. The namespace is a unique name that may be of a form of a URI (Unique Resource Identifier).
 
For example:
* IFRS 2009 concepts namespace is: <nowiki>http://xbrl.iasb.org/taxonomy/2009-04-01/ifrs</nowiki>
* US-GAAP 2009 concepts namespace is: <nowiki>http://xbrl.us/us-gaap/2009-01-31</nowiki>
 
Here is the [[http://www.w3.org/TR/xml-names/ link for the Namespaces specification]] at the W3C consortium.


====Read access====
====Read access====
 
The API call [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getTargetNamespace() getTargetNamespace()]] gives direct access to the taxonomy namespace.
Read access is an abstract operation implemented in several methods that allows the user to access to the content of the XBRLInstance. The content of an XBRLInstance can be accessed in two modes: sequential mode and indexed mode. Both modes are described in the [[XBRLFactsList]] interface.


====Write access====
====Write access====
The API call [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#setTargetNamespace(java.lang.String) setTargetNamespace(String namespace)]] sets or changes the taxonomy namespace.


Modifying the content of the XBRLInstance is normally implemented automatically inside the API at the time the user do operations that requires the API to keep the XBRLInstance consistent; for example, the action of creating a new fact automatically performs the operation of adding the new fact to the instance document. The user does not need to worry about how to keep consistency in the content of the XBRLInstance object.
===Working with concept definitions===
We can classify XBRL Taxonomies in two categories:
# '''Taxonomies that defines new concepts''': They are XBRL Taxonomies that contains new concept definitions. A concept definition is an element in the ''item'' or ''tuple'' substitution group. Normally, Taxonomies that defines new concepts also include references to the labels and reference linkbases.
# '''Taxonomies that does not define new concepts''': They are XBRL Taxonomies that serves organize the content of the DTS, for example, including a common set of presentation and calculation linkbases together.


Facts that the user can create with the API are:
====Read access====
* [[XBRLFactNonNumeric]]
While working with an XBRL Taxonomy, the user may be interested in accessing concepts defined. The XBRLTaxonomy API provides methods for exploring all concept definitions [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getConcepts() getConcepts()]], [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getItems() getItems()]] and [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getTuples() getTuples()]] or access to individual concepts if the concept name is known [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getElementDefinitionByName(java.lang.String) getElementDefinitionByName(String name)]] or the id [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getElementDefinitionById(java.lang.String) getElementDefinitionById(String id)]].
* [[XBRLFactNumeric]]
* [[XBRLFactTuple]]


====Examples====
Note: the [[DTSContainer]] object contains a method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/DTSContainer.html#getConcept(javax.xml.namespace.QName) getConcept(QName qname)]] to access to a concept defined in the DTS regardless in which taxonomy the concept is defined. The parameter to that function is the concept QName. Sometimes it is more convenient using that function than having to obtain the XBRLTaxonomy first and ask for the concept later.


In this example, the content of the XBRLInstance document is sequentially read in document order
====Write access====
<pre>
The XBRLTaxonomy API has two methods [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#addElement(com.ihr.xbrl.om.taxonomy.XMLElementDefinition) addElement(XMLElementDefinition)]] and [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#delElement(com.ihr.xbrl.om.taxonomy.XMLElementDefinition) delElement(XMLElementDefinition)]] that allows the user to add or delete concept definitions from an XBRLTaxonomy. The [[XBRLItem]], [[XBRLTuple]] and [[XMLElementDefinition]] already takes care of calling this methods if the parent argument is properly set. So there should be no need to worry about consistency about what concepts belongs to what taxonomy.
Iterator<XBRLFact> iterF = instance.iterator();
while (iterF.hasNext()) {
XBRLFact f = iterF.next();
// ... do dome work with the fact
}
</pre>


In this example, a new XBRLNumericFact is added to the XBRLInstance
Note: if you change a concept from one taxonomy to another, the concept local name will not be changed, but the concept namespace will no longer be the old namespace.
<pre>
// create the Non Numeric (Text) fact item
XBRLFactNonNumeric fA = new XBRLFactNonNumeric(instance,ctx,itemA);
// fA is nil until a value is assigned
fA.setValue(new StringValue("test"));
</pre>
====Other operations====
=====Creating a footnote for a fact=====
Creating a footnote requires some initial work on the XBRLInstance:
======Create the footnotes container======


A footnotes container is an XLink extended link container for XBRL footnotes. In order to create the container the user should get the desired role type from the DTS and then call the FootnoteLinkbase constructor with the required parameters.
===Working with Role Types===
The use of role types in XBRL comes originally from the XLink specification. The idea of the authors of the XLink specification was to allow document authors to put additional information on XLink related elements about the role of the elements (locators, arcs and resources) so the consuming applications can do something with them. In XBRL we did three things:
# we standardize the definition of some role types in the XBRL 2.1 specification
# we allow a standard mechanism in the XBRL 2.1 specification so new role types can be defined in taxonomies
# we provide semantic meaning to the use of role types on different elements like resources and extended links.


Here is an example about how to get the standard role URI and then create an extended link for footnotes
In this section about taxonomies we are not going to explore all possibilities about role types, our goal is to let you know that the XBRL API allows you to:
<pre>
* find role types in the DTS (defined in the XBRL spec or in the loaded taxonomies)
XBRLRoleType role = dts.getStaticRoleTypeByURI(XBRLExtendedLink.standard_role_URI);
* add new role types to the DTS
* delete existing role types (only if they are not defined in the XBRL spec)


// Now create a container for footnotes (Footnote Extended Link)
====Read access====
FootnoteLinkbase fl = new FootnoteLinkbase(instance, role);
The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getRoleTypes() getRoleTypes()]] returns an iterator over all role types [[XBRLRoleType]] defined in this taxonomy. The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getRoleTypeByURI(java.lang.String) getRoleTypeByURI(String URI)]] returns a role type [[XBRLRoleType]] object if there is a role type defined in this taxonomy for the corresponding URI value.
</pre>


======Create the fact======
Note, there is a [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/DTSContainer.html#getRoleType(java.lang.String) getRoleType(String URI)]] method in the [[DTSContainer]] object that returns a role type [[XBRLRoleType]] regardless in which taxonomy the role type is defined or if the role type is a static role type defined in the XBRL 2.1 specification.


Creating a fact is a very simple task. The user just need to call the apropriate constructor depending on the type of fact to be created. The final fact types that the user can create are:
====Write access====
The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#addRoleType(com.ihr.xbrl.om.taxonomy.XBRLRoleType) addRoleType(XBRLRoleType newRole)]] adds a new role type to the taxonomy. The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#removeRoleType(com.ihr.xbrl.om.taxonomy.XBRLRoleType) removeRoleType(XBRLRoleType roleType)]] removes an existing role from the taxonomy. Both methods are automatically called by the [[XBRLRoleType]] class when it is necessary so there should be no need to call this methods manually from XBRL applications.


* [[XBRLFactNonNumeric]]
===Working with Arcrole Types===
* [[XBRLFactNumeric]]
The use of arcrole types in XBRL comes originally from the XLink specification. The idea of the authors of the XLink specification was to allow document authors to put additional information on XLink arcs so the consuming applications can do something with them. In XBRL we did two things:
* [[XBRLFactTuple]]
# we standardize the definition of some arcrole types in the XBRL 2.1 specification
# we allow a standard mechanism in the XBRL 2.1 specification so new arcrole types can be defined in taxonomies


All objects representing the fact above are final objects in a hierarchy. The hierarchy contains additional elements in order to make the final object meaningful. See the javadoc documentation of each one of the objects in order to learn more about the hierarchy.
In this section about taxonomies we are not going to explore all possibilities about arcrole types, our goal is to let you know that the XBRL API allows you to:
* find arcrole types in the DTS (defined in the XBRL spec or in the loaded taxonomies)
* add new arcrole types to the DTS
* delete existing arcrole types (only if they are not defined in the XBRL spec)


The following example contains several lines of code but the creation of the fact is just one line.
====Read access====
<pre>
The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getArcroleTypes() getArcroleTypes()]] returns an iterator over all arcrole types [[XBRLArcroleType]] defined in this taxonomy. The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getArcroleTypeByURI(java.lang.String) getArcroleTypeByURI(String URI)]] returns an arcrole type [[XBRLArcroleType]] object if there is an arcrole type defined in this taxonomy for the corresponding URI value.
  // create a context for the instant "Begning of year 2008"
  XBRLEntity ent = new XBRLEntity(dts,"http://www.xbrl.org/scheme","Sample Company",null);
  XBRLPeriod p = new XBRLPeriod(dts,"2008-01-01");
  XBRLContext ctx = new XBRLContext(instance,ent,p,null);
  // Obtain the concept definition of concept "A" from the DTS
  XBRLItem itemA = (XBRLItem)dts.getConcept(new QName(ns,"A"));
  // create the Non Numeric (Text) fact item
  XBRLFactNonNumeric fA = new XBRLFactNonNumeric(instance,ctx,itemA);


  // fA is nil until a value is assigned
Note, there is a [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/DTSContainer.html#getArcroleType(java.lang.String) getArcroleType(String URI)]] method in the [[DTSContainer]] object that returns an arcrole type [[XBRLArcroleType]] regardless in which taxonomy the arcrole type is defined or if the arcrole type is a static arcrole type defined in the XBRL 2.1 specification.
  fA.setValue(new StringValue("sample text value"));
</pre>


======Create the footnote resource======
====Write access====
The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#addArcroleType(com.ihr.xbrl.om.taxonomy.XBRLArcroleType) addArcroleType(XBRLArcroleType newArcrole)]] adds a new arcrole type to the taxonomy. The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#removeArcroleType(com.ihr.xbrl.om.taxonomy.XBRLArcroleType) removeArcroleType(XBRLArcroleType arcroleType)]] removes an existing arcrole from the taxonomy. Both methods are automatically called by the [[XBRLArcroleType]] class when it is necessary so there should be no need to call this methods manually from XBRL applications.


Reporting Standard API does not contains a specific resource type for foot notes. Foot note resources can be created using the based [[XBRLResource]] object from the API.
===Working with Imported Taxonomies===
An XBRL Taxonomy (which is an XML Schema) can reference other XBRL Taxonomies (that, in turn are other XML Schemas) using the XML Schema <xsd:import namespace="..." schemaLocation="..."/> statement. This facilitates that all required pieces to make a taxonomy meaningful are always read together. For example; global type definitions can be all defined in separate smaller XML Schemas so they can be reused from one taxonomy version to the next one if there are no changes in the business model that is behind the type definition.


The following example demonstrates how to do it. Note than the creation of the resource requires other parameters we have just created in this document. According to the parameters indicated in the example, the resource will be added to the parent at the moment it is created. See the [[XBRLResource]] page for more information about the parameters.
The XBRL API allows the user to get access to the imported schemas of a taxonomy schema and to add and remove imported schemas manually. The surrounding class that represents imports is [[XBRLImport]]. That class automatically takes care of consistency.


<pre>
====Read access====
  // Create a Footnote resource and add it to the fl container
The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getImports() getImports()]] returns an iterator over all [[XBRLImport]] objects of this taxonomy schema. The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#getImport(java.net.URI) getImport(String namespaceURI)]] returns the imported schema that corresponds to the namespace indicated in the parameter or null if the taxonomy schema for that namespace is not found.
  XBRLResource footnoteRes = new XBRLResource(fl,FootnoteLinkbase.lbResource,true);
  // As footnotes can have simpleType content and complexType content (xhtml) the default is
  // complexType content. So we can force the resource to have simple type content by changing
  // that bit.
  footnoteRes.setSimpleType();
  footnoteRes.setValue(new StringValue("Footnote content"));
  footnoteRes.setLang("en");
</pre>


======Create the relationship linking the fact with the footnote======
====Write access====
 
The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#addImport(com.ihr.xbrl.om.taxonomy.XBRLImport) addImport(XBRLImport import)]] adds a new import to the current taxonomy schema. The method [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLTaxonomy.html#removeImport(com.ihr.xbrl.om.taxonomy.XBRLImport) removeImport(XBRLImport import)]] removes an import from the list of imported schemas on the current taxonomy. The class XBRLImport already takes care of calling addImport and removeImport in the parent object during calls to the [[http://www.reportingstandard.com/apidoc/com/ihr/xbrl/om/taxonomy/XBRLImport.html#setParent(com.ihr.xbrl.om.taxonomy.XBRLTaxonomy) setParent(XBRLTaxonomy parent)]] method so there should be no need to call this methods directly from client code.
===Navigation===
[[Main Page]] | [[XBRL API related discussions]]

Revision as of 12:53, 11 August 2009

[XBRLTaxonomy javadoc page]

Description

An XBRLTaxonomy object represents the content of an XBRL Taxonomy and the surrounding XML Schema. This is:

  • the Namespace, and
  • all XBRL concept definitions (items and tuples) , and
  • all XBRL role types locally defined, and
  • all XBRL arcrole types locally defined, and
  • all references to imported XBRL Taxonomies, and
  • all references to external XBRL Linkbases, and
  • all embedded XBRL Linkbases, and
  • all other XML Schema related constructions like global groups, global type declarations, global attribute groups, global attribute declarations and global element declarations that are not XBRL concepts.

How to create an instance of an XBRLTaxonomy object

There are several ways depending on what the user needs are:

  • If the user have just created a new empty DTSContainer object and the purpose is to read the content of an XBRL taxonomy (and the whole referenced DTS) then the simplest way is to use one of the load methods in the DTSContainer object passing the document URI of the XBRL taxonomy. The returned object is an XBRLTaxonomy that can be casted to an XBRLTaxonomy.
  • If the user has already loaded a DTS (from another taxonomy file or an XBRL report) and the purpose is to create a new XBRLTaxonomy (in order to create a taxonomy extension) then, the user can use any of the available [constructors]. The most commonly used constructor is [XBRLTaxonomy(com.ihr.xbrl.om.DTSContainer)] that accepts the current DTSContainer as a parameter and allows the user to start adding concepts programatically.

Creation of a XBRLTaxonomy object from a local file name: <syntaxhighlight lang="java"> /**

* Sample, a new XBRLTaxonomy document is read form the file received as a parameter
* After the instance object is obtained, the user can start working with it
*/

public class SampleReadTaxonomy {

 public static void main(String[] args) throws Exception {
   DTSContainer dts = DTSContainer.newEmptyContainer();
   XBRLTaxonomy taxonomy = (XBRLTaxonomy)dts.load(new File(args[0]).toURI());
   // ... rest of the application code goes here
 }

} </syntaxhighlight>

Creation of a new taxonomy document for a DTS after the DTS has been loaded: <syntaxhighlight lang="java"> /**

* Sample, a new instance document is created after the DTS has been loaded
*/

public class SampleCreateTaxonomyExtension {

 public static void main(String[] args) throws Exception {
   DTSContainer dts = DTSContainer.newEmptyContainer();
   dts.load(new File("sampleTaxonomy.xsd").toURI());
   XBRLTaxonomy taxonomy = new XBRLTaxonomy(dts);
   // adds taxonomy default minimum information
   String targetNamespace = "http://www.reportingstandard.com/samples/2009/newTaxonomy";
   tx.setURI(new URI("taxonomyExtension.xsd"));
   tx.setTargetNamespace(targetNamespace);
   tx.addNamespace("tx", targetNamespace);
   dts.addDocumentToDTS(tx);
   // ... rest of the application code goes here
   // Save the Taxonomy extension to disk
   dts.save(true);
 }

} </syntaxhighlight>

The Namespace

XBRL Taxonomies are the containers of concept definitions. Concept definitions must be unique worldwide (assets in the US-GAAP and assets in the IFRS). The mechanism provided by the W3C consortium in order to allow easy distinction between concepts defined in different taxonomies is called namespaces.

Each taxonomy is an XML Schema. An XML Schema may define a Namespace. The namespace is a unique name that may be of a form of a URI (Unique Resource Identifier).

For example:

  • IFRS 2009 concepts namespace is: http://xbrl.iasb.org/taxonomy/2009-04-01/ifrs
  • US-GAAP 2009 concepts namespace is: http://xbrl.us/us-gaap/2009-01-31

Here is the [link for the Namespaces specification] at the W3C consortium.

Read access

The API call [getTargetNamespace()] gives direct access to the taxonomy namespace.

Write access

The API call [setTargetNamespace(String namespace)] sets or changes the taxonomy namespace.

Working with concept definitions

We can classify XBRL Taxonomies in two categories:

  1. Taxonomies that defines new concepts: They are XBRL Taxonomies that contains new concept definitions. A concept definition is an element in the item or tuple substitution group. Normally, Taxonomies that defines new concepts also include references to the labels and reference linkbases.
  2. Taxonomies that does not define new concepts: They are XBRL Taxonomies that serves organize the content of the DTS, for example, including a common set of presentation and calculation linkbases together.

Read access

While working with an XBRL Taxonomy, the user may be interested in accessing concepts defined. The XBRLTaxonomy API provides methods for exploring all concept definitions [getConcepts()], [getItems()] and [getTuples()] or access to individual concepts if the concept name is known [getElementDefinitionByName(String name)] or the id [getElementDefinitionById(String id)].

Note: the DTSContainer object contains a method [getConcept(QName qname)] to access to a concept defined in the DTS regardless in which taxonomy the concept is defined. The parameter to that function is the concept QName. Sometimes it is more convenient using that function than having to obtain the XBRLTaxonomy first and ask for the concept later.

Write access

The XBRLTaxonomy API has two methods [addElement(XMLElementDefinition)] and [delElement(XMLElementDefinition)] that allows the user to add or delete concept definitions from an XBRLTaxonomy. The XBRLItem, XBRLTuple and XMLElementDefinition already takes care of calling this methods if the parent argument is properly set. So there should be no need to worry about consistency about what concepts belongs to what taxonomy.

Note: if you change a concept from one taxonomy to another, the concept local name will not be changed, but the concept namespace will no longer be the old namespace.

Working with Role Types

The use of role types in XBRL comes originally from the XLink specification. The idea of the authors of the XLink specification was to allow document authors to put additional information on XLink related elements about the role of the elements (locators, arcs and resources) so the consuming applications can do something with them. In XBRL we did three things:

  1. we standardize the definition of some role types in the XBRL 2.1 specification
  2. we allow a standard mechanism in the XBRL 2.1 specification so new role types can be defined in taxonomies
  3. we provide semantic meaning to the use of role types on different elements like resources and extended links.

In this section about taxonomies we are not going to explore all possibilities about role types, our goal is to let you know that the XBRL API allows you to:

  • find role types in the DTS (defined in the XBRL spec or in the loaded taxonomies)
  • add new role types to the DTS
  • delete existing role types (only if they are not defined in the XBRL spec)

Read access

The method [getRoleTypes()] returns an iterator over all role types XBRLRoleType defined in this taxonomy. The method [getRoleTypeByURI(String URI)] returns a role type XBRLRoleType object if there is a role type defined in this taxonomy for the corresponding URI value.

Note, there is a [getRoleType(String URI)] method in the DTSContainer object that returns a role type XBRLRoleType regardless in which taxonomy the role type is defined or if the role type is a static role type defined in the XBRL 2.1 specification.

Write access

The method [addRoleType(XBRLRoleType newRole)] adds a new role type to the taxonomy. The method [removeRoleType(XBRLRoleType roleType)] removes an existing role from the taxonomy. Both methods are automatically called by the XBRLRoleType class when it is necessary so there should be no need to call this methods manually from XBRL applications.

Working with Arcrole Types

The use of arcrole types in XBRL comes originally from the XLink specification. The idea of the authors of the XLink specification was to allow document authors to put additional information on XLink arcs so the consuming applications can do something with them. In XBRL we did two things:

  1. we standardize the definition of some arcrole types in the XBRL 2.1 specification
  2. we allow a standard mechanism in the XBRL 2.1 specification so new arcrole types can be defined in taxonomies

In this section about taxonomies we are not going to explore all possibilities about arcrole types, our goal is to let you know that the XBRL API allows you to:

  • find arcrole types in the DTS (defined in the XBRL spec or in the loaded taxonomies)
  • add new arcrole types to the DTS
  • delete existing arcrole types (only if they are not defined in the XBRL spec)

Read access

The method [getArcroleTypes()] returns an iterator over all arcrole types XBRLArcroleType defined in this taxonomy. The method [getArcroleTypeByURI(String URI)] returns an arcrole type XBRLArcroleType object if there is an arcrole type defined in this taxonomy for the corresponding URI value.

Note, there is a [getArcroleType(String URI)] method in the DTSContainer object that returns an arcrole type XBRLArcroleType regardless in which taxonomy the arcrole type is defined or if the arcrole type is a static arcrole type defined in the XBRL 2.1 specification.

Write access

The method [addArcroleType(XBRLArcroleType newArcrole)] adds a new arcrole type to the taxonomy. The method [removeArcroleType(XBRLArcroleType arcroleType)] removes an existing arcrole from the taxonomy. Both methods are automatically called by the XBRLArcroleType class when it is necessary so there should be no need to call this methods manually from XBRL applications.

Working with Imported Taxonomies

An XBRL Taxonomy (which is an XML Schema) can reference other XBRL Taxonomies (that, in turn are other XML Schemas) using the XML Schema <xsd:import namespace="..." schemaLocation="..."/> statement. This facilitates that all required pieces to make a taxonomy meaningful are always read together. For example; global type definitions can be all defined in separate smaller XML Schemas so they can be reused from one taxonomy version to the next one if there are no changes in the business model that is behind the type definition.

The XBRL API allows the user to get access to the imported schemas of a taxonomy schema and to add and remove imported schemas manually. The surrounding class that represents imports is XBRLImport. That class automatically takes care of consistency.

Read access

The method [getImports()] returns an iterator over all XBRLImport objects of this taxonomy schema. The method [getImport(String namespaceURI)] returns the imported schema that corresponds to the namespace indicated in the parameter or null if the taxonomy schema for that namespace is not found.

Write access

The method [addImport(XBRLImport import)] adds a new import to the current taxonomy schema. The method [removeImport(XBRLImport import)] removes an import from the list of imported schemas on the current taxonomy. The class XBRLImport already takes care of calling addImport and removeImport in the parent object during calls to the [setParent(XBRLTaxonomy parent)] method so there should be no need to call this methods directly from client code.