Anyone who follows news of Wall Street and other markets worldwide has heard of companies who announced profits or losses that lead analysts and traders to react, buying or selling more of that company's shares. Some of the most anxious times for any company are the preparation and aftermath periods of these announcements. Executives issue press releases, lead conference calls with analysts and press, and often announce related activities. But at the heart of all this activity is the formal report, the financial statement that goes to the regulator (in the U.S., the Securities and Exchange Commission, or SEC) These reports have their own technical language and marketplace semantics, and must be carefully crafted to match standard requirements and conventions.
You can find a treasure trove of information on commerce activity and trends in formal business reports, and the financial services industry moved rapidly to take advantage of XML to standardize the format for exchanging such financial information in the form of Extensible Business Reporting Language (XBRL). XBRL is an open, royalty-free standard for expressing business reports and related semantics, with a mature current version (2.1, dating from April, 2005). XBRL comes under the constant custodianship of XBRL International, Inc. (XII), an international non-profit consortium of about 450 major companies, government agencies, and non-governmental organizations (NGOs). In their own words (from the XBRL home page):
XBRL is a language for the electronic communication of business and financial data which is revolutionising business reporting around the world. It provides major benefits in the preparation, analysis and communication of business information. It offers cost savings, greater efficiency and improved accuracy and reliability to all those involved in supplying or using financial data.... The idea behind [XBRL] is simple. Instead of treating financial information as a block of text - as in a standard internet page or a printed document - it provides an identifying tag for each individual item of data. This is computer readable. For example, company net profit has its own unique tag.
Certainly XBRL is gaining traction through sheer force of law. As of December, 2008, the SEC requires the largest companies to file financial statements, particularly annual 10-K and quarterly 10-Q financial reports using XBRL. By the end of 2009 this mandate will spread to most Fortune 1500 companies, and by the end of 2010 it will cover all public companies.
I've touched on XBRL earlier in this column, in "A glimpse into XML in the financial services industry" (see Resources for a link to this article). Since then, the specification has gained in importance, especially with all the interest in transparency of corporate reporting, and its connection to financial services. In this article, I take a close look at the XBRL format to give developers a feel for the key constructs.
XBRL in its natural habitat
Typical usage of XBRL has several aspects. XBRL documents rise on a foundation of semantics organized into taxonomies and other metadata, using XLink. These taxonomies are the mechanism for semantic transparency in XBRL, referencing industry and global financial reporting standards, including one maintained by XII itself—Global Ledger Framework. The reports are instance documents incorporating these semantics, conveying financial information (business facts in XBRL parlance) in a carefully controlled context. The context is an unambiguous reference to, for example, the company or individual to whom a business fact pertains, relevant units of measure, dates and times, any related facts, references to definitions in taxonomies, and any other metadata that makes clear the nuances of the facts reported in an XBRL instance.
Rather than a toy example of a report, I decided to go with something meaty. I'll use an excerpt from the IBM® 10-Q report to the SEC for the third fiscal quarter of 2008. An overall SEC filing as uploaded to their EDGAR system is a public-key infrastructure (PKI) signature block containing an SGML document which contains both HTML and XBRL versions of the report, as illustrated in Figure 1.
Figure 1. Structure of an SEC filing
In the report I examined, there are 7 text sections, one of HTML and 6 of XBRL.
Each has a file name, specified in the
element. In effect, this is an archived file format, not unlike UNIX™ TAR, or ZIP without the compression. Table 1 is a summary of these embedded documents.
Table 1. Embedded sections of IBM's Q3 10-Q filing
|a08-28338_18k.htm||HTML||Text of 10-Q report form|
|ibm-20081028.xml||XBRL instance||The main business facts of the report|
|ibm-20081028.xsd||W3C XML schema with embedded XLink||XBRL definition with addition of IBM-specific constructs|
|ibm-20081028_cal.xml||XLink linkbase||Taxonomy of details related to calculation of values|
|ibm-20081028_def.xml||XLink linkbase||Taxonomy links providing basic definitions of business facts|
|ibm-20081028_lab.xml||XLink linkbase||Taxonomy links providing XLink labels for business facts, which support out-of-band linking|
|ibm-20081028_pre.xml||XLink linkbase||Taxonomy links providing additional hints for presenting business facts|
A first look at the XML
Listing 1 is an excerpt from ibm-20081028.xml, one of the embedded XBRL files, and the one representing the main report.
Listing 1. Main business facts XBRL from IBM 10-Q filing
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:dei="http://xbrl.us/dei/2008-03-31" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:us-gaap="http://xbrl.us/us-gaap/2008-03-31" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xbrl.org/2006/xbrldi http://www.xbrl.org/2006/xbrldi-2006.xsd"> <link:schemaRef xlink:href="ibm-20081028.xsd" xlink:type="simple"/> <xbrli:context id="D-20073Q"> <xbrli:entity> <xbrli:identifier scheme="http://www.sec.gov/CIK">0000051143</xbrli:identifier> </xbrli:entity> <xbrli:period> <xbrli:startDate>2007-07-01</xbrli:startDate> <xbrli:endDate>2007-09-30</xbrli:endDate> </xbrli:period> </xbrli:context> <xbrli:context id="D-20083Q"> <xbrli:entity> <xbrli:identifier scheme="http://www.sec.gov/CIK">0000051143</xbrli:identifier> </xbrli:entity> <xbrli:period> <xbrli:startDate>2008-07-01</xbrli:startDate> <xbrli:endDate>2008-09-30</xbrli:endDate> </xbrli:period> </xbrli:context> <xbrli:unit id="Shares"> <xbrli:measure>xbrli:shares</xbrli:measure> </xbrli:unit> <xbrli:unit id="USD-DecimalMinus6"> <xbrli:measure>iso4217:USD</xbrli:measure> </xbrli:unit> <dei:EntityCommonStockSharesOutstanding contextRef="I-2008-09-30" decimals="0" unitRef="Shares">1343457986</dei:EntityCommonStockSharesOutstanding> <dei:EntityRegistrantName contextRef="D-20083Q">International Business Machines Corporation</dei:EntityRegistrantName> <dei:CurrentFiscalYearEndDate contextRef="D-20083Q">--12-31</dei:CurrentFiscalYearEndDate> <dei:DocumentType contextRef="D-20083Q">10-Q</dei:DocumentType> <dei:DocumentReportType contextRef="D-20083Q">Transition Report</dei:DocumentReportType> <us-gaap:SalesRevenueServicesNet contextRef="D-20083Q" decimals="-6" unitRef="USD-DecimalMinus6">14773000000</us-gaap:SalesRevenueServicesNet> <us-gaap:SalesRevenueServicesNet contextRef="D-20073Q" decimals="-6" unitRef="USD-DecimalMinus6">13657000000</us-gaap:SalesRevenueServicesNet> <us-gaap:SalesRevenueGoodsNet contextRef="D-20083Q" decimals="-6" unitRef="USD-DecimalMinus6">9892000000</us-gaap:SalesRevenueGoodsNet> <us-gaap:SalesRevenueGoodsNet contextRef="D-20073Q" decimals="-6" unitRef="USD-DecimalMinus6">9833000000</us-gaap:SalesRevenueGoodsNet> <us-gaap:Revenues contextRef="D-20083Q" decimals="-6" id="f7" unitRef="USD-DecimalMinus6">25302000000</us-gaap:Revenues> <us-gaap:Revenues contextRef="D-20073Q" decimals="-6" unitRef="USD-DecimalMinus6">24119000000</us-gaap:Revenues> <us-gaap:CostOfServices contextRef="D-20083Q" decimals="-6" unitRef="USD-DecimalMinus6">10230000000</us-gaap:CostOfServices> <us-gaap:CostOfServices contextRef="D-20073Q" decimals="-6" unitRef="USD-DecimalMinus6">9855000000</us-gaap:CostOfServices> <us-gaap:CostOfGoodsSold contextRef="D-20083Q" decimals="-6" unitRef="USD-DecimalMinus6">3789000000</us-gaap:CostOfGoodsSold> <us-gaap:CostOfGoodsSold contextRef="D-20073Q" decimals="-6" unitRef="USD-DecimalMinus6">3960000000</us-gaap:CostOfGoodsSold> <us-gaap:GrossProfit contextRef="D-20083Q" decimals="-6" id="f9" unitRef="USD-DecimalMinus6">10959000000</us-gaap:GrossProfit> <us-gaap:GrossProfit contextRef="D-20073Q" decimals="-6" unitRef="USD-DecimalMinus6">9956000000</us-gaap:GrossProfit> </xbrli:xbrl>
The first section includes constructs to set the business context. It's all very
well to express the business fact "net revenue from sales of services is
$14,773,000,000", but it's next to meaningless without basic context. Is that for
an entire year, or for a quarter, or for a week? Is it for a quarter in 1968 or
in 2008 (because of inflation, that makes an enormous difference)? For my small
consulting company such a revenue figure would be astonishing, but of course the
context here is that it's for IBM. XBRL provides the tools to establish all this
context for business facts. The first two
xbrli:context elements establish temporal context used for business
D-20073Q, meaning the third quarter of fiscal 2007 and
D-20083Q, meaning the third quarter of fiscal 2008. These two periods are used to provide year-over-year comparisons, which are very important in financial analysis. A net revenue figure of $15 billion might be good if the figure for the corresponding period in the prior year was $10 billion, and might be bad compared to $20 billion.
The next two
xbrli:context elements define units of
measure. One is bog simple—just a count of shares, but even the simple
things are often contextualized to a very fine degree. You don't want a sharp
operator manipulating the definition of shares in the cause of a deceitful
report, so the standard XBRL taxonomy itself provides a definition of a unit of
shares. The other unit is the US Dollar, as defined in ISO 4217, the
international standard describing three-letter currency codes ("USD" for the US Dollar). The unit in this case is specialized to express that values are rounded to the nearest million. It's called "USD-DecimalMinus6" because it is equivalent to multiplying the value by 10 to the power -6, removing the fractional portion, and then restoring the multiplier. Again, XBRL allows reporters and analysts to take pains to clarify such details.
Then come the business facts themselves, and here you can learn all you like about IBM's financial performance. For example, the company had 1,343,457,986 outstanding shares, and net revenue from sales of services of $14,773,000,000 in the third quarter of fiscal 2008, compared to $13,657,000,000 for the same period in 2007, a year-over-year gain of $116,000,000. Listing 1 is a pretty small excerpt from the report, which lists a huge number of business facts. Notice the use of namespace referring to the XBRL representation of U.S. generally accepted accounting principles (GAAP), which look to place accounting statements on an even footing nationwide, and to provide a basis for international standardization.
Even more details—the taxonomies
You've had a glimpse at the attention given to business context in XBRL, but the bits in Listing 1 are the merest fraction of it all. The real microscopic (and dull) detail that anchors the business facts spills over into the taxonomies, which are 3 of the 7 files in the filing. I'll focus on the taxonomy files focusing on reference and labels. Listing 2 is an excerpt from ibm-20081028_def.xml, which provides links to formal definitions of terms.
Listing 2. Excerpt from taxonomy of definitions for IBM 10-Q filing
<?xml version="1.0" encoding="utf-8"?> <linkbase xmlns="http://www.xbrl.org/2003/linkbase" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xbrldt="http://xbrl.org/2005/xbrldt" xsi:schemaLocation="http://www.xbrl.org/2003/linkbase http://www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd http://xbrl.org/2005/xbrldt http://www.xbrl.org/2005/xbrldt-2005.xsd"> <roleRef xlink:type="simple" xlink:href="ibm-20081028.xsd#IBMConsolidatedStatementOfEarnings" roleURI="http://www.ibm.com/us/fr/ci/ibm/IBMConsolidatedStatementOfEarnings" /> <roleRef xlink:type="simple" xlink:href="ibm-20081028.xsd#DocumentInformation" roleURI="http://www.ibm.com/us/fr/ci/DocumentInformation" /> <roleRef xlink:type="simple" xlink:href="ibm-20081028.xsd#EntityInformation" roleURI="http://www.ibm.com/us/fr/ci/EntityInformation" /> <definitionLink xlink:type="extended" xlink:role="http://www.ibm.com/us/fr/ci/ibm/IBMConsolidatedStatementOfEarnings"> <loc xlink:type="locator" xlink:label="us-gaap_StatementLineItems" xlink:href="http://xbrl.us/USG/elts/us-gaap.xsd#us-gaap_StatementLineItems"/> <loc xlink:type="locator" xlink:label="us-gaap_StatementTable" xlink:href="http://xbrl.us/USG/elts/us-gaap.xsd#us-gaap_StatementTable" /> <definitionArc xlink:type="arc" xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="us-gaap_StatementLineItems" xlink:to="us-gaap_StatementTable" order="1" use="optional" xbrldt:contextElement="segment" /> </definitionLink> <definitionLink xlink:type="extended" xlink:role="http://www.ibm.com/us/fr/ci/EntityInformation"> <loc xlink:type="locator" xlink:label="dei_EntityInformationLineItems" xlink:href="http://xbrl.us/(USG)/non-gaap/(XSD)#dei_EntityInformationLineItems" /> <loc xlink:type="locator" xlink:label="ibm_EntitiesTable" xlink:href="ibm-20081028.xsd#ibm_EntitiesTable" /> <definitionArc xlink:type="arc" xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="dei_EntityInformationLineItems" xlink:to="ibm_EntitiesTable" order="27" use="optional" xbrldt:contextElement="segment" /> <loc xlink:type="locator" xlink:label="dei_EntityCommonStockSharesOutstanding" xlink:href="http://xbrl.us/USG/non-gaap/dei.xsd#dei_EntityCommonStockSharesOutstanding"/> <definitionArc xlink:type="arc" xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="dei_EntityInformationLineItems" xlink:to="dei_EntityCommonStockSharesOutstanding" order="35" use="optional" /> </definitionLink> </linkbase>
I've snipped a lot of the indirection and the more esoteric ways taxonomy links are expressed. To meet formatting restrictions I also had to modify some long attribute values, in some cases by replacing the string "us-gaap/1.0" with "(USG)", and in some cases abbreviating the string "dei-2008-03-31.xsd" to "(XSD)". What's left should give you the basic idea. Within the linkbase the top links (
roleRef elements) provide definitions relevant to the entire report. Definitions referring to specific aspects of the report are expressed in following
Digging into the XLink
XBRL exercises some of the more complex aspects of XLink, the W3C standard for creating hyperlinks in XML. The most important thing you have to remember about XLink when working with XBRL is that a link can occur on any element, unlike, say, HTML where links are expressed through
link elements. XBRL does define standard linking elements such as
definitionArc, but publishers have a lot of flexibility with links. IBM uses a lot of specialized constructs, which is why it includes an XML schema in its filing to define these constructs.
definitionLink xlink:type="extended" indicates that
it is a complex type of XLink, which, among other features, can express a link
with multiple arcs, and can do so "out of band", meaning it can patch on a link
from the linkbase to a completely separate XML element (in this case to elements in the core XBRL report). IBM has assigned a role to this extended link in its entirety,
xlink:role="http://www.ibm.com/us/fr/ci/ibm/IBMConsolidatedStatementOfEarnings", which expresses that this taxonomy serves a statement of earnings, as defined by IBM (traversing this URL you're redirected to the IBM home page, but this fact is incidental). To get the idea of an extended link with many arcs, think of a link from a download site with mirrors. Conceptually it's just one link to the software you want, but in practice there are many possible resources from which you can get it, and each of these is a separate arc. To express these multiple arcs, you give the end-points "marks" or "labels", using an element of XLink type "locator". The actual arcs are defined in elements with
xlink:type="arc", which include
xlink:to elements specifying the end-points as marks. In the following code, I extracted one coherent extended link example further from Listing 2:
<definitionLink xlink:type="extended" xlink:role="http://www.ibm.com/us/fr/ci/EntityInformation"> <loc xlink:type="locator" xlink:label="dei_EntityInformationLineItems" xlink:href="http://xbrl.us/(USG)/non-gaap/(XSD)#dei_EntityInformationLineItems" /> <loc xlink:type="locator" xlink:label="dei_EntityCommonStockSharesOutstanding" xlink:href="http://xbrl.us/USG/non-gaap/dei.xsd#dei_EntityCommonStockSharesOutstanding"/> <definitionArc xlink:type="arc" xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="dei_EntityInformationLineItems" xlink:to="dei_EntityCommonStockSharesOutstanding" order="35" use="optional" /> </definitionLink>
This, in short, expresses that the common shares outstanding fact is in the domain of entity information line items, an expression made formal by links to definitions in XBRL taxonomy Web resources.
No doubt about it—this stuff is complex. The news recently has been full of comments about how complicated financial instruments can be, and things don't get much easier when you deal with huge, multi-national companies, nor even when you deal with smaller firms. The idea of XBRL is not to hide the complexity, but rather to lay it all out on the table, so that it's at least accessible and transparent. The basic mechanism of the XML in XBRL, most of which I've touched on in this article, takes hours to learn, but creating and analyzing the format in regular business requires a lot of financial as well as technical expertise. I mentioned the coming mandates for XBRL usage in U.S. filings. Such mandates are spreading, not just in securities systems across the world, but also in smaller scopes, such as for internal corporate reporting at the departmental level. It will also likely spread with wider, regulated reporting requirements, such as for tax, labor and environmental impact reports. XBRL might soon be one of the most important XML formats in business, and I hope this article gave you the first foothold towards processing it.
- Thinking XML: A glimpse into XML in the financial services industry (Uche Ogbuji, developerWorks, February 2004): Briefly touch on several XML formats in financial services, including XBRL.
- The XBRL home page: Bookmark the source for specifications (including the 2.1 recommendation), news, references to related projects, and much more. The Wikipedia page includes a brief example.
- Filing financial statements in XBRL: How-to, lessons learned, and best practices (David Newman, Dean Ritz, and Murali Vridhachalam; developerWorks November, 2008): Cover a lot of less technical detail on XBRL, including tools to help generate the XML.
- The move to IFRS and XBRL ( Leslie Satenstein, The TEC Blog, December 2008): Read an excellent summary of the rise of XBRL.
- ISO 4217: Learn more about the international standard for currency codes.
- Tip: How to use XLink with XML (Brett McLaughlin developerWorks July, 2001): Take a first look at XLink and how it works for basic links or for embedding external resources.
- The Electronic Data-Gathering, Analysis, and Retrieval (EDGAR) system: Read about the required format and database for filing with the U.S. Securities and Exchange Commission (SEC).
- The EDGAR XBRL listing page: Keep up with SEC filings that include XBRL, and in particular, check out the IBM 10-Q filing used as an example in this article.
- U.S. generally accepted accounting principles (GAAP): Review the standard for accounting statements in the U.S.
- IBM XML certification: Find out how you can become an IBM-Certified Developer in XML and related technologies.
- XML technical library: See the developerWorks XML Zone for a wide range of technical articles and tips, tutorials, standards, and IBM Redbooks.
- "New to XML" page: Check out the XML zone's updated resource central for XML. Readers of this column might be too advanced for this page, but it's a great place to get your colleagues started. All XML developers can benefit from the XML zone's coverage of many XML standards.
- developerWorks XML zone: Find more XML resources, including previous installments of the Thinking XML column. If you have comments on this article, or any others in this column please post them on the Thinking XML forum.
- The developerWorks Web development zone: Expand your site development skills with articles and tutorials that specialize in Web technologies, including previous installments of this column.
- developerWorks technical events and webcasts: Stay current with technology in these sessions.
- The technology bookstore: Browse for books on these and other technical topics.
- developerWorks podcasts: Listen to interesting interviews and discussions for software developers.
Get products and technologies
- IBM trial software for product evaluation: Build your next project with trial software available for download directly from developerWorks, including application development tools and middleware products from DB2®, Lotus®, Rational®, Tivoli®, and WebSphere®.
- Participate in the discussion forum.
- XML zone discussion forums: Participate in any of several XML-related discussions.
- developerWorks blogs: Check out these blogs and get involved in the developerWorks community.
Dig deeper into XML on developerWorks
Get samples, articles, product docs, and community resources to help build, deploy, and manage your cloud apps.
Experiment with new directions in software development.
Software development in the cloud. Register today to create a project.
Evaluate IBM software and solutions, and transform challenges into opportunities.