<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1533220940284878969</id><updated>2024-03-07T22:48:38.293-06:00</updated><title type='text'>Gepsio</title><subtitle type='html'>The official blog for the Gepsio open source project. Gepsio is a .NET-based document object model for XBRL documents. Visit the Gepsio project site at http://gepsio.codeplex.com.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-7128601938201688249</id><published>2013-08-24T11:37:00.002-05:00</published><updated>2013-08-24T11:37:16.027-05:00</updated><title type='text'>New Home for the Blog</title><content type='html'>The Gepsio blog has moved to &lt;a href=&quot;http://gepsio.wordpress.com&quot;&gt;http://gepsio.wordpress.com&lt;/a&gt;. See you there!</content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/7128601938201688249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2013/08/new-home-for-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/7128601938201688249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/7128601938201688249'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2013/08/new-home-for-blog.html' title='New Home for the Blog'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-4406904260483049274</id><published>2013-06-06T21:11:00.001-05:00</published><updated>2013-06-06T21:11:10.695-05:00</updated><title type='text'>New Document Validation Design Shipping In Next CTP</title><content type='html'>&lt;p&gt;I have, after a long break, checked in a pretty significant &lt;a href=&quot;http://gepsio.codeplex.com/SourceControl/changeset/73124&quot;&gt;changeset&lt;/a&gt; for &lt;a href=&quot;http://gepsio.blogspot.com/&quot;&gt;Gepsio&lt;/a&gt; that will change how consumers check the validity of a loaded &lt;a href=&quot;http://www.xbrl.org&quot;&gt;XBRL&lt;/a&gt; document. The idea was originally discussed in &lt;a href=&quot;http://gepsio.blogspot.com/2012/09/gepsio-xbrl-validation-strategies.html&quot;&gt;this post&lt;/a&gt;, and, after some work, this scheme has been put into place.&lt;/p&gt; &lt;p&gt;The XbrlException class will no longer be supported with this change, and code currently making use of this exception class will have to change to remove it. Instead of catching an XbrlException instance when a document is loaded, do the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Load an XBRL document as usual.&lt;/li&gt; &lt;li&gt;Check the state of the XbrlDocument’s IsValid property. The IsValid property will be true if the document is valid according to XBRL conformance rules and false if the document is not valid.&lt;/li&gt; &lt;li&gt;If the document is not valid, the XbrlDocument’s ValidationErrors collection will contain more information on the validation errors. This collection is a .NET collection of ValidationError objects, each of which contains a property called Message which describes the error.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Using C#, XBRL document loading and validation code will look something like this:&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Courier New&quot;&gt;newXbrlDocument.Load(instanceXmlSourceFullPath);&lt;br&gt;if(newXbrlDocument.IsValid == false)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (var currentValidationError in xbrlDoc.ValidationErrors)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var validationMessage = currentValidationError.Message;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // display message&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt;&lt;/p&gt; &lt;p&gt;The ValidationError class is a base class, and, depending on the error, certain derived classes may contain more context to describe the error. For example, validation errors in calculation linkbases might reference the contributing facts and the summation fact involved in the failed calculation.&lt;/p&gt; &lt;p&gt;The original XbrlException scheme caused Gepsio to stop validating an XBRL document as soon as the first error was found. This new scheme allows Gepsio to completely validate an XBRL document and report on all of the errors in one pass.&lt;/p&gt; &lt;p&gt;This change will ship with the next CTP, which I hope to release soon. It’s been a while.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/4406904260483049274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2013/06/new-document-validation-design-shipping.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/4406904260483049274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/4406904260483049274'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2013/06/new-document-validation-design-shipping.html' title='New Document Validation Design Shipping In Next CTP'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-2723012290622869749</id><published>2012-09-09T21:29:00.001-05:00</published><updated>2012-09-09T21:29:37.793-05:00</updated><title type='text'>Sep 2012 CTP Released</title><content type='html'>&lt;p&gt;The Sep 2012 CTP release of &lt;a href=&quot;http://gepsio.blogspot.com/&quot;&gt;Gepsio&lt;/a&gt; is now available! Download the latest binary from the project’s Download page.&lt;/p&gt; &lt;p&gt;Here’s a peek at the newest enhancements to the latest build of Gepsio:&lt;/p&gt; &lt;h2&gt;Role Types&lt;/h2&gt; &lt;p&gt;Role types found in schemas are now available from within Gepsio. The XbrlSchema class now contains a property called RoleTypes. This property is a collection of objects of a new class called RoleType. Objects of the RoleType class expose any role types defined in the schema.  &lt;h2&gt;HTTP-Based Schema Linkbase References&lt;/h2&gt; &lt;p&gt;Gepsio now supports HTTP-based schema linkbase references. Previous releases assumed that all schema linkbase references were based on local filesystem paths.  &lt;h2&gt;CalculationLink.Linkbase Property&lt;/h2&gt; &lt;p&gt;The CalculationLink class contains a new property called Linkbase, which references the LinkbaseDocument object containing the calculation link.  &lt;h2&gt;LinkbaseDocument.Schema Property&lt;/h2&gt; &lt;p&gt;The LinkbaseDocument class contains a new property called Schema, which references the XbrlSchema class referencing the linkbase document.  &lt;h2&gt;SummationConcept.Link Property&lt;/h2&gt; &lt;p&gt;The SummationConcept class contains a new property called Link, which references the CalculationLink object containing the summation concept.  &lt;h2&gt;Resolved Issues&lt;/h2&gt; &lt;h3&gt;Work Item 9401: Valid XBRL Doc Failing To Be Loaded&lt;/h3&gt; &lt;p&gt;&lt;em&gt;The latest Amazon quarterly XBRL filing passes other validation tests I used, however attempting to Load the doc in Gepsio throws an error. Since it is an Object Ref Not Set to Instance error, it is not entirely clear what caused it although the final line in the stack trace is JeffFerguson.Gepsio.QualifiedName.Equals(Object obj). I attach the filing for your ref. Any ideas on how to get around this?&lt;/em&gt;  &lt;p&gt;A bug in the QualifiedName equality testing code failed to detect various null conditions. This has been fixed.  &lt;h3&gt;Work Item 7843: The given path&#39;s format is not supported&lt;/h3&gt; &lt;p&gt;Fixed bug that allowed paths of the form &quot;file:///C:/blah/blah/http://blah/blah.org&quot; to be created in GetFullLinkbasePath when filings that reference remote documents are stored locally. This caused a NotSupportedException to be thrown. Supplied as a patch from Codeplex user matthewschrager.  &lt;p&gt;&amp;nbsp; &lt;h3&gt;Work Item 9465: WebException Objects Thrown During XbrlSchema Creation Are Not Wrapped in XbrlException Objects&lt;/h3&gt; &lt;p&gt;The XbrlSchema constructor uses an XmlTextReader to read an XBRL schema. If the URI for the XBRL schema to be read is an HTTP-based URI, then the XmlTextReader will use the .NET Web stack to read the schema using HTTP. If something fails during that process, the .NET Web stack will throw a WebException. Thrown WebException objects were not wrapped in an XbrlException object and were consequently thrown back to the client as a WebException object.&lt;/p&gt; &lt;p&gt;To be clear that the issue is an XBRL issue caused by an HTTP failure, the XBRL schema creation code now creates an XbrlException object, stores the caught WebException as an inner exception to the XbrlException, and throws the XbrlException object back up to the client. &lt;/p&gt; &lt;h3&gt;Work Item 9571: No Support for Taxonomy Role Types&lt;/h3&gt; &lt;p&gt;Role types found in schemas are now available from within the object model. The XbrlSchema class now contains a property called RoleTypes. This property is a collection of objects of a new class called RoleType. Objects of the RoleType class expose any role types defined in the schema.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/2723012290622869749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/09/sep-2012-ctp-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/2723012290622869749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/2723012290622869749'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/09/sep-2012-ctp-released.html' title='Sep 2012 CTP Released'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-5933947926575797917</id><published>2012-09-06T17:19:00.001-05:00</published><updated>2012-09-06T18:09:26.510-05:00</updated><title type='text'>Gepsio on Twitter</title><content type='html'>I’ve just opened a Twitter account for &lt;a href=&quot;http://gepsio.blogspot.com/&quot;&gt;Gepsio&lt;/a&gt; announcements, so I can keep them separate from my main (unfocused) Twitter account. I’m planning on using Gepsio’s Twitter account in much the same way as I use Gepsio’s Facebook page (&lt;a href=&quot;http://www.facebook.com/gepsio&quot;&gt;www.facebook.com/gepsio&lt;/a&gt;) in that I will be announcing blog postings, release notes, bug fixes, and answering your questions.&lt;br /&gt;
Follow Gepsio on Twitter at &lt;a href=&quot;http://www.twitter.com/GepsioXbrl&quot;&gt;@GepsioXbrl&lt;/a&gt; … see you there!</content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/5933947926575797917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/09/gepsio-on-twitter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/5933947926575797917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/5933947926575797917'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/09/gepsio-on-twitter.html' title='Gepsio on Twitter'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-4744086272382811385</id><published>2012-09-03T10:34:00.001-05:00</published><updated>2012-09-03T10:34:46.284-05:00</updated><title type='text'>Gepsio XBRL Validation Strategies: The Present and the Future</title><content type='html'>&lt;p&gt;I’ve just received the following email:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;I’ve had a chance by now to examine a fair number&amp;nbsp; of SEC Xbrl documents using Gepsio with my &lt;/em&gt;[code]&lt;em&gt;.&amp;nbsp; I’m consistently seeing around 9-10 % of the documents in a given processing session that fail to load … &lt;u&gt;&lt;/u&gt;&lt;u&gt;&lt;/u&gt;&lt;/em&gt; &lt;p&gt;&lt;em&gt;In my project … I am processing a fixed number specific data points.&lt;u&gt;&lt;/u&gt;&lt;u&gt;&lt;/u&gt;&lt;/em&gt;  &lt;p&gt;&lt;em&gt;I only need a few data points with their durations, start and end dates, along with basic entity information and fiscal period focus info.&amp;nbsp;&amp;nbsp; But I need this for a large number of documents.&lt;u&gt;&lt;/u&gt;&lt;u&gt;&lt;/u&gt;&lt;/em&gt;  &lt;p&gt;&lt;em&gt;I am wondering if the careful and thorough validation done on document.Load, which is really necessary for many users of Gepsio, might be overkill for what I am doing.&amp;nbsp;&amp;nbsp; &lt;u&gt;&lt;/u&gt;&lt;u&gt;&lt;/u&gt;&lt;/em&gt; &lt;p&gt;&lt;em&gt;Could some of this validation be preventing the load of documents that might be flawed in ways that would leave them still usable for my project?&lt;u&gt;&lt;/u&gt;&lt;u&gt;&lt;/u&gt;&lt;/em&gt;  &lt;p&gt;&lt;em&gt;I don’t know much about xml or xbrl but I get the sense that some of the validation occurring is relevant mainly to the re- presentation of the data, not so much putting the data into a db.&lt;u&gt;&lt;/u&gt;&lt;u&gt;&lt;/u&gt;&lt;/em&gt;  &lt;p&gt;&lt;em&gt;&lt;u&gt;&lt;/u&gt;&lt;u&gt;&lt;/u&gt;&lt;/em&gt; &lt;p&gt;&lt;em&gt;Does it make any sense to think about an optional overloaded version of the document.load method with parameters that could cause it to skip some validation of things that might be peripheral to processes like mine?&lt;/em&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This is a very thought provoking approach, as it echoes a thought that I have had for some time. Let me begin by explaining &lt;a href=&quot;http://gepsio.blogspot.com/&quot;&gt;Gepsio&lt;/a&gt;’s current approach to reporting on &lt;a href=&quot;http://www.xbrl.org&quot;&gt;XBRL&lt;/a&gt; validation issues and follow that up with a possible design change.&lt;/p&gt; &lt;h2&gt;Gepsio’s Current XBRL Validation Strategy&lt;/h2&gt; &lt;p&gt;Today, Gepsio validates a loaded document against the XBRL specification after the document is loaded. An exception is thrown when the first XBRL specification violation is discovered. At a high level, the algorithm is as follows:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;load document as XML document  &lt;li&gt;if XML is invalid throw XML exception  &lt;li&gt;read taxonomy schema references  &lt;li&gt;read contexts  &lt;li&gt;read units  &lt;li&gt;read facts  &lt;li&gt;read footnote links  &lt;li&gt;validate context references  &lt;li&gt;if validation violation found throw XBRL exception  &lt;li&gt;validate unit references  &lt;li&gt;if validation violation found throw XBRL exception  &lt;li&gt;validate context time spans against period types  &lt;li&gt;if validation violation found throw XBRL exception  &lt;li&gt;validate footnote locations  &lt;li&gt;if validation violation found throw XBRL exception  &lt;li&gt;validate footnote arcs  &lt;li&gt;if validation violation found throw XBRL exception  &lt;li&gt;validate items  &lt;li&gt;if validation violation found throw XBRL exception&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Today’s pattern asks callers to write code like this:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;var myDoc = &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; XbrlDocument();&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;try&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    myDoc.Load(&lt;span class=&quot;str&quot;&gt;&quot;MyXbrlDocument.xml&quot;&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;catch&lt;/span&gt;(XbrlException e)&lt;br /&gt;{&lt;br /&gt;    Console.WriteLine(&lt;span class=&quot;str&quot;&gt;&quot;Validation Failed!&quot;&lt;/span&gt;);&lt;br /&gt;    Console.WriteLine(e.Message);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;With today’s pattern, any exception thrown by the validation code forfeits the rest of the validation process. If a validation violation is found during the validation of unit references, for example, the context time spans, footnotes and items won’t even run through validation. Once an XBRL document is deemed invalid, then no more validation is even attempted. The analogy would be a source code compiler that stops the compilation process after the first error.&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Gepsio’s Possible XBRL Validation Future&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;As an alternative, Gepsio could stop throwing exceptions on validation errors and simply build a list of validation errors that could be examined later. In the alternative design that I have considered (a design which is shamelessly “lifted” from the &lt;a href=&quot;http://www.lhotka.net/cslanet/&quot;&gt;CSLA.NET business objects framework&lt;/a&gt;) an XBRL document loaded by Gepsio would maintain a Boolean property indicating its validity as well as a collection of validation errors. These could all be examined by the caller after Gepsio loads a document and could use this information to decide whether or not the caller can proceed with the planned operation against the loaded document. This design could make document loading look something like this:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;var myDoc = &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; XbrlDocument();&lt;br /&gt;myDoc.Load(&lt;span class=&quot;str&quot;&gt;&quot;MyXbrlDocument.xml&quot;&lt;/span&gt;);&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;(myDoc.IsValid == &lt;span class=&quot;kwrd&quot;&gt;false&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;    Console.WriteLine(&lt;span class=&quot;str&quot;&gt;&quot;Validation Failed!&quot;&lt;/span&gt;);&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt;(var validationError &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; myDoc.ValidationErrors)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(validationError);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This design takes advantage of two hypothetical additions to Gepsio’s XbrlDocument class:&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;A read-only Boolean property called IsValid. Gepsio would set this value to true if all validation rules passed and false if at least one validation rule failed. &lt;br /&gt;&lt;li&gt;A collection of validation error objects, with each object describing information about the error. In the simple design above, these are simple strings; however, in an actual design these may be full Gepsio-namespaced objects that describe a validation error with as much fidelity as possible to identify the root of the problem as well as the error category. Callers may want to distinguish between a unit reference error and a calculation summation error, and a simple string would not give that kind of fidelity.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;In this design, no exceptions are thrown, allowing Gepsio to perform as much validation as possible.&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Feedback Welcome&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Your feedback is welcome. Do you like the current exception-based validation scheme? Do you favor the validity design shown above? Or do you have another idea? Add your feedback to a comment on this post or post a message to the Gepsio Facebook page at &lt;a href=&quot;http://www.facebook.com/gepsio&quot;&gt;http://www.facebook.com/gepsio&lt;/a&gt;.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/4744086272382811385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/09/gepsio-xbrl-validation-strategies.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/4744086272382811385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/4744086272382811385'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/09/gepsio-xbrl-validation-strategies.html' title='Gepsio XBRL Validation Strategies: The Present and the Future'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-8362165662996207681</id><published>2012-08-27T22:06:00.001-05:00</published><updated>2012-08-27T22:06:59.434-05:00</updated><title type='text'>Importing XBRL Fact Values Into SQL Server Using PowerShell and Gepsio</title><content type='html'>&lt;p&gt;A &lt;a href=&quot;http://gepsio.blogspot.com/&quot;&gt;Gepsio&lt;/a&gt; user has just written in with a success story on importing &lt;a href=&quot;http://www.xbrl.org&quot;&gt;XBRL&lt;/a&gt; data into a &lt;a href=&quot;http://www.microsoft.com/sqlserver/&quot;&gt;SQL Server&lt;/a&gt; database using SQL Server Integration Services (SSIS), &lt;a href=&quot;http://technet.microsoft.com/scriptcenter/&quot;&gt;PowerShell&lt;/a&gt; and Gepsio. The solution was too good not to share, and, with the user&#39;s permission, this blog post will describe that solution.&lt;/p&gt; &lt;p&gt;The user was tasked with importing some XBRL data into a SQL Server database instance. The overall architectural idea was to use an SSIS package to run a PowerShell script which would create a comma separated values (CSV) file from a raw XBRL document, and the values in the CSV would be used to import data into the database.&lt;/p&gt; &lt;p&gt;The first trick, which isn&#39;t really XBRL-specific but still worth mentioning, is to get SSIS to run a PowerShell script. Basically, PowerShell scripts are run from within an SSIS package by adding an &quot;Execute Process Task&quot; and using a command line in the following form:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;C:\[PATHTOPOWERSHELL]\PowerShell.exe -ExecutionPolicy ByPass -command &lt;span class=&quot;str&quot;&gt;&quot;. &#39;C:\SCRIPTPATH\MyScript.ps1&#39; &#39;param1&#39; &#39;param2&#39;&quot;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Read the forum discussion at &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/en-NZ/sqlintegrationservices/thread/216d2ee6-0f04-480f-808d-8241bc4a8d18&quot;&gt;http://social.msdn.microsoft.com/Forums/en-NZ/sqlintegrationservices/thread/216d2ee6-0f04-480f-808d-8241bc4a8d18&lt;/a&gt; for more information about this process.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The next trick, of course, is creating the CSV file from the raw XBRL document. The user turned to PowerShell and Gepsio for this work, and life became a lot easier. Here is the example PowerShell script that can do this work:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;param&lt;/span&gt;([string]$instFile = &lt;span class=&quot;str&quot;&gt;&quot;C:\XBRLDOCPATH\XbrlDocument.xml&quot;&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;rem&quot;&gt;#load Gepsio&lt;/span&gt;&lt;br /&gt;Add-Type -Path &lt;span class=&quot;str&quot;&gt;&quot;C:\GEPSIOPATH\JeffFerguson.Gepsio.dll&quot;&lt;/span&gt;&lt;br /&gt;$XbrlDoc = New-Object -TypeName JeffFerguson.Gepsio.XbrlDocument&lt;br /&gt;$XbrlDoc.Load($instFile)&lt;br /&gt;$instCSV = &lt;span class=&quot;str&quot;&gt;&quot;C:\OUTPUTPATH\Allinfo.csv&quot;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;New-Item $instCSV -type &lt;span class=&quot;str&quot;&gt;&quot;file&quot;&lt;/span&gt; -force -value &lt;span class=&quot;str&quot;&gt;&quot;EntityRegName,EntityFilerCat,FactName,Value`r`n&quot;&lt;/span&gt;    &lt;br /&gt;$stream = new-object system.IO.StreamWriter($instCSV,$true)&lt;br /&gt;&lt;br /&gt;[string] $&lt;span class=&quot;kwrd&quot;&gt;script&lt;/span&gt;:Entity =&lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt;($CurrentFragment &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; $XbrlDoc.XbrlFragments)&lt;br /&gt;    {&lt;br /&gt;        GetEntityInfo $Currentfragment&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            WriteItemCSV $CurrentFragment &lt;span class=&quot;str&quot;&gt;&quot;EarningsPerShareBasic&quot;&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;        catch&lt;br /&gt;        {&lt;br /&gt;            Write-Error(&lt;span class=&quot;str&quot;&gt;&quot;us-gaap_EarningsPerShareBasic: &quot;&lt;/span&gt; +$_ )&lt;br /&gt;        }&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            WriteItemCSV $CurrentFragment &lt;span class=&quot;str&quot;&gt;&quot;NetIncomeLoss&quot;&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;        catch&lt;br /&gt;        {&lt;br /&gt;            Write-Error(&lt;span class=&quot;str&quot;&gt;&quot;:us-gaap_NetIncomeLoss &quot;&lt;/span&gt; +$_ )&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;catch&lt;br /&gt;{&lt;br /&gt;    Write-Error(&lt;span class=&quot;str&quot;&gt;&quot;main foreach writeloop: &quot;&lt;/span&gt; +$_ )&lt;br /&gt;}&lt;br /&gt;finally&lt;br /&gt;{&lt;br /&gt;    $stream.close()&lt;br /&gt;    $stream.Dispose()&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Function GetEntityInfo&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;param&lt;/span&gt;($fragment)&lt;br /&gt;    $&lt;span class=&quot;kwrd&quot;&gt;script&lt;/span&gt;:Entity = &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;    $entr = $fragment.Facts | Where-Object {$_.Name &lt;span class=&quot;preproc&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;str&quot;&gt;&quot;EntityRegistrantName&quot;&lt;/span&gt;}&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;(!$entr)&lt;br /&gt;    {&lt;br /&gt;        $entr = &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;    $efc = $fragment.Facts | Where-Object {$_.Name &lt;span class=&quot;preproc&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;str&quot;&gt;&quot;EntityFilerCategory&quot;&lt;/span&gt;}&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;(!$efc)&lt;br /&gt;    {&lt;br /&gt;        $efc = &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;    $&lt;span class=&quot;kwrd&quot;&gt;script&lt;/span&gt;:Entity = &lt;span class=&quot;str&quot;&gt;&quot;`&quot;&lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&quot; + $entr.Value + &quot;&lt;/span&gt;`&lt;span class=&quot;str&quot;&gt;&quot;,`&quot;&lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&quot;  + $efc.Value +  &quot;&lt;/span&gt;`&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Function WriteItemCSV&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;param&lt;/span&gt;($fragment, $ElId)&lt;br /&gt;    $Ff = $fragment.Facts | Where-Object {$_.Name &lt;span class=&quot;preproc&quot;&gt;-eq&lt;/span&gt; $ElId}&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;($Ff)&lt;br /&gt;    {&lt;br /&gt;        [string]$S = $&lt;span class=&quot;kwrd&quot;&gt;script&lt;/span&gt;:Entity&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; ($Ff.GetType().fullname &lt;span class=&quot;preproc&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;str&quot;&gt;&quot;JeffFerguson.Gepsio.Item&quot;&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            [string]$S = $&lt;span class=&quot;kwrd&quot;&gt;script&lt;/span&gt;:Entity&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;( $Ff.Name)&lt;br /&gt;            {&lt;br /&gt;                $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;`&quot;&lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&quot; + $Ff.Name + &quot;&lt;/span&gt;`&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;   +&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;( $Ff.Value)&lt;br /&gt;            {&lt;br /&gt;                $S = $S +  $Ff.Value + &lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;   +&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;            $stream.WriteLine($S)&lt;br /&gt;        }&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; ($Ff.GetType().fullname &lt;span class=&quot;preproc&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;str&quot;&gt;&quot;System.Object[]&quot;&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt;($i &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; $Ff)&lt;br /&gt;            {&lt;br /&gt;                [string]$S = $&lt;span class=&quot;kwrd&quot;&gt;script&lt;/span&gt;:Entity&lt;br /&gt;                &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;( $i.Name)&lt;br /&gt;                {&lt;br /&gt;                    $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;`&quot;&lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&quot; + $i.Name + &quot;&lt;/span&gt;`&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;   +&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;( $i.Value)&lt;br /&gt;                {&lt;br /&gt;                    $S = $S +  $i.Value&lt;br /&gt;                }&lt;br /&gt;                &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;                }&lt;br /&gt;                $stream.WriteLine($S)&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Let&#39;s take a look at this PowerShell script in more detail.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The opening statements adds the Gepsio types to the PowerShell script and loads the XBRL document named in a PowerShell script command line parameter into a new Gepsio XbrlDocument instance:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;param&lt;/span&gt;([string]$instFile = &lt;span class=&quot;str&quot;&gt;&quot;C:\XBRLDOCPATH\XbrlDocument.xml&quot;&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;rem&quot;&gt;#load Gepsio&lt;/span&gt;&lt;br /&gt;Add-Type -Path &lt;span class=&quot;str&quot;&gt;&quot;C:\GEPSIOPATH\JeffFerguson.Gepsio.dll&quot;&lt;/span&gt;&lt;br /&gt;$XbrlDoc = New-Object -TypeName JeffFerguson.Gepsio.XbrlDocument&lt;br /&gt;$XbrlDoc.Load($instFile)&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;At this point, the PowerShell script maintains a variable called $XbrlDoc which contains all of Gepsio&#39;s knowledge about the loaded XBRL document. Loading and validating an XBRL document can&#39;t get much easier.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Once the XBRL document is loaded, then the output CSV file is created:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;New-Item $instCSV -type &lt;span class=&quot;str&quot;&gt;&quot;file&quot;&lt;/span&gt; -force -value &lt;span class=&quot;str&quot;&gt;&quot;EntityRegName,EntityFilerCat,FactName,Value`r`n&quot;&lt;/span&gt;    &lt;br /&gt;$stream = new-object system.IO.StreamWriter($instCSV,$true)&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here, a new file is created and the CSV column header row is written to the new file. The CSV is set up to capture the following values found in the XBRL document:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Entity Registrant Name &lt;br /&gt;&lt;li&gt;Entity Filer Category&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;A .NET &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.io.streamwriter.aspx&quot;&gt;StreamWriter&lt;/a&gt; object is created to reference the newly created CSV file and is available from within a PowerShell script variable called $stream.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Once the CSV is available, the PowerShell script iterates through each of the XBRL fragments found in the XBRL document loaded by Gepsio:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;try&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt;($CurrentFragment &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; $XbrlDoc.XbrlFragments)&lt;br /&gt;    {&lt;br /&gt;        GetEntityInfo $Currentfragment&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            WriteItemCSV $CurrentFragment &lt;span class=&quot;str&quot;&gt;&quot;EarningsPerShareBasic&quot;&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;        catch&lt;br /&gt;        {&lt;br /&gt;            Write-Error(&lt;span class=&quot;str&quot;&gt;&quot;us-gaap_EarningsPerShareBasic: &quot;&lt;/span&gt; +$_ )&lt;br /&gt;        }&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            WriteItemCSV $CurrentFragment &lt;span class=&quot;str&quot;&gt;&quot;NetIncomeLoss&quot;&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;        catch&lt;br /&gt;        {&lt;br /&gt;            Write-Error(&lt;span class=&quot;str&quot;&gt;&quot;:us-gaap_NetIncomeLoss &quot;&lt;/span&gt; +$_ )&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;catch&lt;br /&gt;{&lt;br /&gt;    Write-Error(&lt;span class=&quot;str&quot;&gt;&quot;main foreach writeloop: &quot;&lt;/span&gt; +$_ )&lt;br /&gt;}&lt;br /&gt;finally&lt;br /&gt;{&lt;br /&gt;    $stream.close()&lt;br /&gt;    $stream.Dispose()&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For each XBRL fragment found in the Gepsio document instance, entity information is read and written into the CSV file. Entity information is read from the fragment, and then values are written to the CSV. These operations are performed by functions in the PowerShell script called GetEntityInfo and WriteItemCSV, respectively.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Let&#39;s take a look at the GetEntityInfo function. It is defined as follows:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;Function GetEntityInfo&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;param&lt;/span&gt;($fragment)&lt;br /&gt;    $&lt;span class=&quot;kwrd&quot;&gt;script&lt;/span&gt;:Entity = &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;    $entr = $fragment.Facts | Where-Object {$_.Name &lt;span class=&quot;preproc&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;str&quot;&gt;&quot;EntityRegistrantName&quot;&lt;/span&gt;}&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;(!$entr)&lt;br /&gt;    {&lt;br /&gt;        $entr = &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;    $efc = $fragment.Facts | Where-Object {$_.Name &lt;span class=&quot;preproc&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;str&quot;&gt;&quot;EntityFilerCategory&quot;&lt;/span&gt;}&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;(!$efc)&lt;br /&gt;    {&lt;br /&gt;        $efc = &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;    $&lt;span class=&quot;kwrd&quot;&gt;script&lt;/span&gt;:Entity = &lt;span class=&quot;str&quot;&gt;&quot;`&quot;&lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&quot; + $entr.Value + &quot;&lt;/span&gt;`&lt;span class=&quot;str&quot;&gt;&quot;,`&quot;&lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&quot;  + $efc.Value +  &quot;&lt;/span&gt;`&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This function, which accepts a Gepsio XbrlFragment object as a parameter, searches through each of the fragment&#39;s facts, looking for a fact whose name is &quot;EntityRegistrantName&quot; or &quot;EntityFilerCategory&quot;. If they are found, the Gepsio Fact objects are stored in local script variables -- $entr and $efc, respectively. Once the search is complete, the Fact object&#39;s values are stored as a string in a global-level script variable called $script:Entity.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The other interesting function in the PowerShell script is the WriteItemCSV function:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;Function WriteItemCSV&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;param&lt;/span&gt;($fragment, $ElId)&lt;br /&gt;    $Ff = $fragment.Facts | Where-Object {$_.Name &lt;span class=&quot;preproc&quot;&gt;-eq&lt;/span&gt; $ElId}&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;($Ff)&lt;br /&gt;    {&lt;br /&gt;        [string]$S = $&lt;span class=&quot;kwrd&quot;&gt;script&lt;/span&gt;:Entity&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; ($Ff.GetType().fullname &lt;span class=&quot;preproc&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;str&quot;&gt;&quot;JeffFerguson.Gepsio.Item&quot;&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            [string]$S = $&lt;span class=&quot;kwrd&quot;&gt;script&lt;/span&gt;:Entity&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;( $Ff.Name)&lt;br /&gt;            {&lt;br /&gt;                $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;`&quot;&lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&quot; + $Ff.Name + &quot;&lt;/span&gt;`&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;   +&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;( $Ff.Value)&lt;br /&gt;            {&lt;br /&gt;                $S = $S +  $Ff.Value + &lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;   +&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;            $stream.WriteLine($S)&lt;br /&gt;        }&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; ($Ff.GetType().fullname &lt;span class=&quot;preproc&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;str&quot;&gt;&quot;System.Object[]&quot;&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt;($i &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; $Ff)&lt;br /&gt;            {&lt;br /&gt;                [string]$S = $&lt;span class=&quot;kwrd&quot;&gt;script&lt;/span&gt;:Entity&lt;br /&gt;                &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;( $i.Name)&lt;br /&gt;                {&lt;br /&gt;                    $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;`&quot;&lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&quot; + $i.Name + &quot;&lt;/span&gt;`&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;   +&lt;span class=&quot;str&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;( $i.Value)&lt;br /&gt;                {&lt;br /&gt;                    $S = $S +  $i.Value&lt;br /&gt;                }&lt;br /&gt;                &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    $S = $S +  &lt;span class=&quot;str&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;                }&lt;br /&gt;                $stream.WriteLine($S)&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This function accepts both an Gepsio XBRL Fragment object and a fact name as parameters. It begins by searching through each of the supplied fragment&#39;s facts, looking for a fact whose name matches the supplied name. If it is found, the Gepsio Fact objects are stored in a local script variable called $Ff. If the fact is found, its name and values are appended to the global script variable $script:Entity, after which the entire line built up in the $script:Entity variable is written out to the CSV stream.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;[&lt;em&gt;&lt;strong&gt;One quick note about the placement of the functions in the PowerShell script&lt;/strong&gt;: When the script is executed from the PowerShell command line, the functions can be found anywhere in the script. SSIS, however, may need to have the functions defined before they are used in the script. If SSIS does not execute the script as written, the functions may need to be moved forward in the script so that they are defined before they are used.&lt;/em&gt;]&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;In the end, the PowerShell script will produce a CSV file that looks something like this:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;EntityRegName,EntityFilerCat,FactName,Value&lt;br /&gt;&lt;span class=&quot;str&quot;&gt;&quot;COCA COLA CO&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;Large Accelerated Filer&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;EarningsPerShareBasic&quot;&lt;/span&gt;,1.22&lt;br /&gt;&lt;span class=&quot;str&quot;&gt;&quot;COCA COLA CO&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;Large Accelerated Filer&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;EarningsPerShareBasic&quot;&lt;/span&gt;,2.05&lt;br /&gt;&lt;span class=&quot;str&quot;&gt;&quot;COCA COLA CO&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;Large Accelerated Filer&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;EarningsPerShareBasic&quot;&lt;/span&gt;,2.14&lt;br /&gt;&lt;span class=&quot;str&quot;&gt;&quot;COCA COLA CO&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;Large Accelerated Filer&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;EarningsPerShareBasic&quot;&lt;/span&gt;,1.24&lt;br /&gt;&lt;span class=&quot;str&quot;&gt;&quot;COCA COLA CO&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;Large Accelerated Filer&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;NetIncomeLoss&quot;&lt;/span&gt;,4703000000&lt;br /&gt;&lt;span class=&quot;str&quot;&gt;&quot;COCA COLA CO&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;Large Accelerated Filer&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;NetIncomeLoss&quot;&lt;/span&gt;,2788000000&lt;br /&gt;&lt;span class=&quot;str&quot;&gt;&quot;COCA COLA CO&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;Large Accelerated Filer&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;NetIncomeLoss&quot;&lt;/span&gt;,4842000000&lt;br /&gt;&lt;span class=&quot;str&quot;&gt;&quot;COCA COLA CO&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;Large Accelerated Filer&quot;&lt;/span&gt;,&lt;span class=&quot;str&quot;&gt;&quot;NetIncomeLoss&quot;&lt;/span&gt;,2800000000&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Once this script is in place, the SSIS package to actually import the data becomes an easy set of two simple tasks:&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;execute PowerShell script to create CSV from XBRL &lt;br /&gt;&lt;li&gt;import CSV data into a database table&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;For the sake of brevity, the PowerShell sample shown here loads only a few XBRL values into the CSV file. In practice, however, there is no limit to the amount of data that could be loaded into the CSV.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Once all of this was working, the user sent in a testimonial that read:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&quot;Thank you for making Gepsio available.&amp;nbsp; It saved me an awful lot of work (xpath, YIKES)!&quot;.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;This is gratifying, as this is what Gepsio is all about: making access to XBRL data easier without resorting to complicated XPath queries or understanding a lot about the rules of XBRL validation or technical syntax. Gepsio provides access to XBRL data without needing to worry about XBRL itself, which frees developers to work on the more important problem of building added value on top of the data.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Many thanks go out to the Gepsio user who provided this solution.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/8362165662996207681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/08/importing-xbrl-fact-values-into-sql.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/8362165662996207681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/8362165662996207681'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/08/importing-xbrl-fact-values-into-sql.html' title='Importing XBRL Fact Values Into SQL Server Using PowerShell and Gepsio'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-756334999795931568</id><published>2012-06-22T23:08:00.001-05:00</published><updated>2012-06-22T23:08:32.475-05:00</updated><title type='text'>WebException Objects and XBRL Schema Object Creation</title><content type='html'>&lt;p&gt;The other day, I was doing some performance testing in &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt; and noticed that HTTP errors found during the &lt;a href=&quot;http://www.xbrl.org&quot; target=&quot;_blank&quot;&gt;XBRL&lt;/a&gt; schema object creation process were not reported in the same way as other exceptions thrown by Gepsio.&lt;/p&gt; &lt;p&gt;The constructor of Gepsio’s XbrlSchema class uses an XmlTextReader to read an XBRL schema. If the URI for the XBRL schema to be read is an HTTP-based URI, then the XmlTextReader will use the .NET Web stack to read the schema using HTTP. If something fails during that process, the .NET Web stack will throw a WebException.&lt;/p&gt; &lt;p&gt;In the Nov 2011 CTP (and, in fact, all Gepsio CTPs to this point), thrown WebException objects were not wrapped in an XbrlException object and were consequently thrown back to the client as a WebException object.&lt;/p&gt; &lt;p&gt;To be clear that the issue is an XBRL issue caused by an HTTP failure, the XBRL schema creation code now creates an XbrlException object, stores the caught WebException as an inner exception to the XbrlException, and throws the XbrlException object back up to the client.&lt;/p&gt; &lt;p&gt;I have just checked in a fix for the issue. The fix will be available in the next release (currently planned for Jul 2012). If you want to grab the code ahead of time, feel free to grab the latest source code &lt;a href=&quot;http://gepsio.codeplex.com/SourceControl/list/changesets&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/756334999795931568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/06/webexception-objects-and-xbrl-schema.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/756334999795931568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/756334999795931568'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/06/webexception-objects-and-xbrl-schema.html' title='WebException Objects and XBRL Schema Object Creation'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-2825336751486533534</id><published>2012-06-19T17:33:00.001-05:00</published><updated>2012-06-19T17:36:09.491-05:00</updated><title type='text'>Unsupported Path Bug Fixed in Linkbase Document Class</title><content type='html'>&lt;p&gt;Codeplex (and &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt;) user &lt;a href=&quot;http://www.codeplex.com/site/users/view/matthewschrager&quot;&gt;matthewschrager&lt;/a&gt; recently submitted a patch for a rather old issue that caused paths of the form &quot;file:///C:/blah/blah/http://blah/blah.org&quot; to be created in the LinkbaseDocument class’ GetFullLinkbasePath() method when filings that reference remote documents are stored locally. This caused a NotSupportedException to be thrown.&lt;/p&gt; &lt;p&gt;I have just applied this patch and have checked in a fix for the issue. The fix will be available in the next release (currently planned for Jul 2012). If you want to grab the code ahead of time, feel free to grab the latest source code &lt;a href=&quot;http://gepsio.codeplex.com/SourceControl/list/changesets&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Many thanks to &lt;a href=&quot;http://www.codeplex.com/site/users/view/matthewschrager&quot;&gt;matthewschrager&lt;/a&gt; for sending in a patch!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/2825336751486533534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/06/unsupported-path-bug-fixed-in-linkbase.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/2825336751486533534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/2825336751486533534'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/06/unsupported-path-bug-fixed-in-linkbase.html' title='Unsupported Path Bug Fixed in Linkbase Document Class'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-8108879405725327829</id><published>2012-06-18T21:41:00.001-05:00</published><updated>2012-06-18T21:41:05.992-05:00</updated><title type='text'>Null Reference Bug Fixed in QualifiedName Class</title><content type='html'>&lt;p&gt;Codeplex (and &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt;) user &lt;a href=&quot;http://www.codeplex.com/site/users/view/jwokelly&quot;&gt;jwokelly&lt;/a&gt; recently filed a bug noting that the Gepsio Nov 2011 CTP was failing to parse the &lt;a href=&quot;http://www.xbrl.org&quot; target=&quot;_blank&quot;&gt;XBRL&lt;/a&gt; documents created by Amazon to report their financial information for Q1 2012. More specifically, Gepsio was throwing a NullReferenceException while attempting to perform equality comparisons in the qualified name code.&lt;/p&gt; &lt;p&gt;I have just fixed this bug and have checked in a fix. The fix will be available in the next release (currently planned for Jul 2012). If you want to grab the code ahead of time, feel free to grab the latest source code &lt;a href=&quot;http://gepsio.codeplex.com/SourceControl/list/changesets&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Many thanks to jwokelly for reporting a bug and for sending along the offending documents in a ZIP file. Gepsio now includes a unit test that parses these documents and ensures that no exceptions are thrown.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/8108879405725327829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/06/null-reference-bug-fixed-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/8108879405725327829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/8108879405725327829'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/06/null-reference-bug-fixed-in.html' title='Null Reference Bug Fixed in QualifiedName Class'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-8087971162337142508</id><published>2012-06-17T09:58:00.001-05:00</published><updated>2012-06-17T09:58:57.416-05:00</updated><title type='text'>Full Documentation Available for the Nov 2011 CTP</title><content type='html'>&lt;p&gt;The first release of help file-style documentation for &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt; is now available for the Nov 2011 CTP! To grab your copy, go to the Nov 2011 CTP Release page &lt;a href=&quot;http://gepsio.codeplex.com/releases/view/76107&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; and download the &lt;a href=&quot;http://gepsio.codeplex.com/downloads/get/390754&quot; target=&quot;_blank&quot;&gt;JeffFerguson.Gepsio.chm&lt;/a&gt; file.&lt;/p&gt; &lt;p&gt;If you download the file directly, and save it to a location such as your Desktop, you may get an “Navigation to the webpage was canceled” message when you open it:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-h8ySU9adKms/T93wpWl01zI/AAAAAAAACA8/xHGPOoFHFVA/s1600-h/image%25255B4%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-8PXKd36UuKI/T93wp2daAmI/AAAAAAAACBE/lt7t9_Doeys/image_thumb%25255B2%25255D.png?imgmax=800&quot; width=&quot;507&quot; height=&quot;386&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;To fix this, close the CHM file.Then find the downloaded CHM file, right click it, and select “Properties” from the context menu. You will see the file’s Properties dialog:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-Zgk8PajR3GY/T93wqcqmsXI/AAAAAAAACBM/ays4NsUwhnY/s1600-h/image%25255B8%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-pdNLdaNtGJg/T93wqvrrdmI/AAAAAAAACBU/mR_v5bs5QQA/image_thumb%25255B4%25255D.png?imgmax=800&quot; width=&quot;381&quot; height=&quot;519&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;If you see the message at the bottom that reads “This file came from another computer and might be blocked to help protect this computer”, click the “Unblock” button. Click the “OK” button to close the Properties dialog, and reopen the CHM file.&lt;/p&gt; &lt;p&gt;Voila!&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-5Kk1Qe97o1A/T93wrPE_YXI/AAAAAAAACBc/jjIRucNkFKA/s1600-h/image%25255B13%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-AszgbOifX0U/T93wrmnpdYI/AAAAAAAACBk/w2QnZnXeokw/image_thumb%25255B7%25255D.png?imgmax=800&quot; width=&quot;495&quot; height=&quot;377&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This online documentation is generated automatically from comments I embed in the source code. The nice part about that is that, as I update the source code comments and produce new builds, the online documentation will be updated and synchronized with the latest information available in the Gepsio object model.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/8087971162337142508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/06/full-documentation-available-for-nov.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/8087971162337142508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/8087971162337142508'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/06/full-documentation-available-for-nov.html' title='Full Documentation Available for the Nov 2011 CTP'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-8PXKd36UuKI/T93wp2daAmI/AAAAAAAACBE/lt7t9_Doeys/s72-c/image_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-4511376529036179934</id><published>2012-06-14T20:20:00.001-05:00</published><updated>2012-06-14T20:20:52.656-05:00</updated><title type='text'>Gepsio Reviewed by HereBeDragon</title><content type='html'>&lt;p&gt;I found a very nice review of &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt; today on a blog at herebedragon.blogspot.com. Here’s what the author had to say:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;My first stop was Codeplex, where I searched for the term &#39;XBRL&#39; and found 3 projects. That&#39;s too few. Of these, one particularly caught my eye (in fact I have followed this project for a few months) and that is &#39;Gepsio&#39;.&lt;/p&gt; &lt;p&gt;Gepsio is a .NET based document object model for XBRL that can load and validate XBRL documents. It&#39;s a &#39;strict&#39; processor for XBRL that throws exceptions when the loaded document is not valid. Perhaps it&#39;s possible to make changes to and save XBRL files using Gepsio as well, but frankly I could not look into it in depth because of the exceptions and because I was short of time.&lt;/p&gt; &lt;p&gt;I did give the source code of the XBRL Reader part of Gepsio a good look though. I was impressed to see sustained work, focus on meeting XBRL conformance requirements and a clean, well organized codebase. Gepsio is a good option to evaluate if you are looking for open source XBRL software.&lt;/p&gt; &lt;p&gt;The Gepsio XBRL code is licensed under Microsoft Public License (Ms-PL), which allows you to use the code in a commercial application. &lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Find the author’s review of Gepsio, and many other open source &lt;a href=&quot;http://www.xbrl.org&quot; target=&quot;_blank&quot;&gt;XBRL&lt;/a&gt; tools, through &lt;a href=&quot;http://herebedragon.blogspot.com/2012/01/open-source-xbrl-software-or-why-arelle.html&quot; target=&quot;_blank&quot;&gt;this link&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Thanks to &lt;a href=&quot;http://herebedragon.blogspot.com&quot; target=&quot;_blank&quot;&gt;HereBeDragon&lt;/a&gt; for the review!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/4511376529036179934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/06/gepsio-reviewed-by-herebedragon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/4511376529036179934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/4511376529036179934'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/06/gepsio-reviewed-by-herebedragon.html' title='Gepsio Reviewed by HereBeDragon'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-4250404984557478819</id><published>2012-06-11T19:30:00.001-05:00</published><updated>2012-06-11T19:30:34.265-05:00</updated><title type='text'>Gepsio on Facebook</title><content type='html'>&lt;p&gt;I have just created a page for &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt; on Facebook. “Like” Gepsio at &lt;a href=&quot;http://www.facebook.com/gepsio&quot;&gt;http://www.facebook.com/gepsio&lt;/a&gt; to get information on releases, blog posts, documentation, samples and questions and answers. Looking forward to seeing you there!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/4250404984557478819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/06/gepsio-on-facebook.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/4250404984557478819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/4250404984557478819'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/06/gepsio-on-facebook.html' title='Gepsio on Facebook'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-8194095106304850038</id><published>2012-06-09T12:45:00.001-05:00</published><updated>2012-06-09T12:45:10.902-05:00</updated><title type='text'>Documentation Work in Progress</title><content type='html'>&lt;p&gt;I am currently working on providing some online help for &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/-jIw7EBLZl1o/T9OLpXendXI/AAAAAAAAB_4/L1jmLQSowVc/image%25255B5%25255D.png?imgmax=800&quot; width=&quot;512&quot; height=&quot;484&quot;&gt;&lt;/p&gt; &lt;p&gt;I am currently adding XML comments to all of the public classes, properties and methods so that I can use &lt;a href=&quot;http://www.microsoft.com/en-us/download/details.aspx?id=10526&quot; target=&quot;_blank&quot;&gt;Sandcastle&lt;/a&gt; to generate CHM-style documentation. The XML comments should also aid in providing documentation to Visual Studio’s Intellisense infrastructure.&lt;/p&gt; &lt;p&gt;I realize that Gepsio’s growing array of public classes and properties can be daunting and I hope that this documentation will go a long away towards making its public interface understandable.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/8194095106304850038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/06/documentation-work-in-progress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/8194095106304850038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/8194095106304850038'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/06/documentation-work-in-progress.html' title='Documentation Work in Progress'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-jIw7EBLZl1o/T9OLpXendXI/AAAAAAAAB_4/L1jmLQSowVc/s72-c/image%25255B5%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-2982424900436415975</id><published>2012-03-24T10:41:00.001-05:00</published><updated>2012-03-24T10:41:17.533-05:00</updated><title type='text'>Using Gepsio From C#</title><content type='html'>&lt;p&gt;A developer new to &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt; asked for a C#-based sample of using Gepsio. I have built a simple C# console app using Visual Studio 2010 and the Gepsio Nov 2011 CTP. I’ll show the code first, and then I will discuss some key points after the code is shown:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;using&lt;/span&gt; JeffFerguson.Gepsio;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;namespace&lt;/span&gt; GepsioConsole&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; Program&lt;br /&gt;    {&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// The magic begins here.&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;param name=&quot;args&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// A collection of program arguments. One argument should be supplied: the address of the XBRL document&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// to load.&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; Main(&lt;span class=&quot;kwrd&quot;&gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (args.Length != 1)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine(&lt;span class=&quot;str&quot;&gt;&quot;usage: GepsioConsole [XBRL document]&quot;&lt;/span&gt;);&lt;br /&gt;                &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            ProcessXbrlWithGepsio(args[0]);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// Process a named XBRL document.&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;param name=&quot;xbrlFile&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// The address of the XBRL document to process.&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; ProcessXbrlWithGepsio(&lt;span class=&quot;kwrd&quot;&gt;string&lt;/span&gt; xbrlFile)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                var xbrlDoc = &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; XbrlDocument();&lt;br /&gt;                xbrlDoc.Load(xbrlFile);&lt;br /&gt;                &lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt; (var currentFragment &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; xbrlDoc.XbrlFragments)&lt;br /&gt;                {&lt;br /&gt;                    DisplayFragmentStatistics(currentFragment);&lt;br /&gt;                    WriteFactValue(currentFragment, &lt;span class=&quot;str&quot;&gt;&quot;EntityRegistrantName&quot;&lt;/span&gt;);&lt;br /&gt;                    WriteFactValue(currentFragment, &lt;span class=&quot;str&quot;&gt;&quot;DocumentPeriodEndDate&quot;&lt;/span&gt;);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;catch&lt;/span&gt; (XbrlException xbrle)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine(&lt;span class=&quot;str&quot;&gt;&quot;ERROR: {0}&quot;&lt;/span&gt;, xbrle.Message);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// Display statistics relating to the loaded document fragment.&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;param name=&quot;currentFragment&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// The XBRL fragment whose statistics should be published.&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; DisplayFragmentStatistics(XbrlFragment currentFragment)&lt;br /&gt;        {&lt;br /&gt;            var factsCollection = currentFragment.Facts;&lt;br /&gt;            Console.WriteLine(&lt;span class=&quot;str&quot;&gt;&quot;Number of facts...: {0}&quot;&lt;/span&gt;, factsCollection.Count);&lt;br /&gt;            var unitsCollection = currentFragment.Units;&lt;br /&gt;            Console.WriteLine(&lt;span class=&quot;str&quot;&gt;&quot;Number of units...: {0}&quot;&lt;/span&gt;, unitsCollection.Count);&lt;br /&gt;            var contextsCollection = currentFragment.Contexts;&lt;br /&gt;            Console.WriteLine(&lt;span class=&quot;str&quot;&gt;&quot;Number of contexts: {0}&quot;&lt;/span&gt;, contextsCollection.Count);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// Display the value of a fact pulled from an XBRL fragment.&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;param name=&quot;currentFragment&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// The fragment containing the fact to be found.&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;param name=&quot;factName&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// The name of the fact to be found.&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;/// &amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; WriteFactValue(XbrlFragment currentFragment, &lt;span class=&quot;kwrd&quot;&gt;string&lt;/span&gt; factName)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt; (var currentFact &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; currentFragment.Facts)&lt;br /&gt;            {&lt;br /&gt;                &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (currentFact.Name.Equals(factName) == &lt;span class=&quot;kwrd&quot;&gt;true&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    var currentFactAsItem = currentFact &lt;span class=&quot;kwrd&quot;&gt;as&lt;/span&gt; Item;&lt;br /&gt;                    Console.WriteLine(&lt;span class=&quot;str&quot;&gt;&quot;{0}: {1}&quot;&lt;/span&gt;, factName, currentFactAsItem.Value);&lt;br /&gt;                    &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt;;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I wanted to offer a few notes regarding this code:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;This is a console application, and is intended to be run with a command line argument specifying the address of the &lt;a href=&quot;http://www.xbrl.org&quot; target=&quot;_blank&quot;&gt;XBRL&lt;/a&gt; document to be loaded, as in &lt;strong&gt;GepsioConsole http://www.sec.gov/Archives/edgar/data/21344/000104746911006790/ko-20110701.xml&lt;/strong&gt;. Gepsio can work with documents stored on the Web, so HTTP-based document addresses are valid.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;From Gepsio’s point of view, an XBRL document is a collection of fragments. The fragments idea was originally designed to support the notion of Inline XBRL, where a document may consist of multiple XBRL fragments. For standard XBRL documents, however, the entire document is an XBRL document, which makes up one “fragment”. This explains the “for each fragment in document” code in the ProcessCodeWithGepsio() method.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The WriteFactValue() method looks for a fact in the fragment’s collection of facts. Remember that, from an XBRL point of view, a fact is a type of item. In XBRL parlance, items can be facts, which have a single value, or tuples, which can have more than one value. Gepsio models this fact by defining a base class called Item and then deriving both Fact and Tuple from Item. This explains the cast back to Item in the code for WriteFactValue(). The cast may look a bit strange … perhaps I’ll revisit this in a later CTP.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;As I developed this sample, I noticed that Gepsio performs as intended but, for larger documents, its performance can be improved. I’ll be addressing this shortly. Look for a future blog post where I discuss performance, where it could be improved, and how the improvements will be implemented. I will be using the code in this blog post as the showcase for the performance improvements, so you will be seeing this code again.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/2982424900436415975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/03/using-gepsio-from-c.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/2982424900436415975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/2982424900436415975'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/03/using-gepsio-from-c.html' title='Using Gepsio From C#'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-1119361682355166462</id><published>2012-02-23T08:00:00.004-06:00</published><updated>2012-02-23T08:00:45.650-06:00</updated><title type='text'>Gepsio Entered Into XBRL US Challenge</title><content type='html'>The folks over at &lt;a href=&quot;http://www.xbrl.us/Pages/default.aspx&quot;&gt;XBRL US&lt;/a&gt; have launched a contest called the &lt;a href=&quot;http://www.xbrl.us/research/pages/challenge.aspx&quot;&gt;XBRL Challenge&lt;/a&gt;, which they have billed as &quot;&lt;em&gt;a contest that invites participants to contribute open source analytical applications for investors that leverage corporate XBRL data&lt;/em&gt;&quot;. I have entered Gepsio into the contest. I really don&#39;t think it has a chance to win, since it&#39;s more of an &quot;engine&quot; or &quot;framework&quot; than a full ready-to-use application, but I figured that the exposure might be a good thing.&lt;br /&gt;
&lt;br /&gt;
The judges have asked all of us entrants to answer a couple of questions about our perception of our entries to the contest, and I thought that I would share my answers here:&lt;br /&gt;
&lt;em&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;em&gt;&lt;strong&gt;What deficiency or opportunity did you see - with respect to published financial data analysis - that drove your idea for an application using XBRL?&lt;/strong&gt;The relatively high barrier to entry. Building an XBRL-aware application today means that XML parsing code must be written, after which the XBRL validation rules must be encoded and tested. The opportunity I see with Gepsio is one in which the parsing and validation logic is packaged in a ready-to-use assembly that can be picked up and used by others to build application and value-added logic, thereby dramatically lowering the barrier to entry for XBRL developers. It also opens the door for PowerShell users to write “XBRL scripts” without ever encoding low-level XML and XBRL details.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;&lt;em&gt;&lt;strong&gt;What was the moment you enjoyed most during this competition?&lt;/strong&gt;I have enjoyed seeing Gepsio used and embraced by others. I put Gepsio up on Codeplex to little fanfare, unsure of what might become of it. To see it used by others – to see the project followed by other users on Codeplex; to see Gepsio mentioned in XBRL answers on the Stack Overflow Web site; to get emails from people using it – all of it makes the effort worthwhile. It’s validation that what Gepsio offers fills a need as yet untapped by the current developer tool space, and that is very gratifying.&lt;/em&gt;&lt;/blockquote&gt;
&lt;/em&gt;The winner of the contest is judged by a panel of judges, although a People&#39;s Choice vote is also being held for another week or so. If you feel compelled to vote for Gepsio in this People&#39;s Choice competition, head on over to the &lt;a href=&quot;http://www.xbrl.us/research/pages/challenge.aspx&quot;&gt;XBRL US Challenge&lt;/a&gt; page and click on the &quot;Vote for the Best XBRL App&quot; link in the upper right-hand section titled &quot;XBRL Challenge Judges&quot;.&lt;br /&gt;
&lt;br /&gt;
Good luck to all Challenge participats!</content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/1119361682355166462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/02/gepsio-entered-into-xbrl-us-challenge.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/1119361682355166462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/1119361682355166462'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/02/gepsio-entered-into-xbrl-us-challenge.html' title='Gepsio Entered Into XBRL US Challenge'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-8668763690874229978</id><published>2012-01-06T08:51:00.001-06:00</published><updated>2012-01-06T09:36:25.199-06:00</updated><title type='text'>Gepsio Nov 2011 CTP and iXBRL</title><content type='html'>In the discussion located &lt;a href=&quot;http://gepsio.codeplex.com/discussions/284709&quot;&gt;here&lt;/a&gt;, a gentleman asked about &lt;a href=&quot;http://gepsio.codeplex.com/&quot;&gt;Gepsio&lt;/a&gt;&#39;s support for iXBRL after noting that iXBRL is coming up to speed in the UK. I mentioned that I would look into it, noting that I had structured Gepsio in such a way that a document was a collection of XBRL fragments, and that the design was put in place specifically to handle multiple XBRL fragments in a document, thereby supporting the iXBRL model of XBRL embedded within a larger XML document whose root was not necessarily an XBRL root.&lt;br /&gt;
&lt;br /&gt;
The gentleman with whom I had the conversation was very generous in supplying some iXBRL documents with which I could test Gepsio, and I used the following PowerShell script to load the sample and see what I could find out at a high level:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;Add-Type -Path &quot;C:\MyPathToGepsio\JeffFerguson.Gepsio.dll&quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;$XbrlDoc = New-Object -TypeName JeffFerguson.Gepsio.XbrlDocument&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;$DocumentLocation = &quot;sample-ixbrl.xml&quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;Write-Host &quot;Loading and validating&quot; $DocumentLocation&quot;...&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;$XbrlDoc.Load($DocumentLocation)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;Write-Host &quot;Loaded.&quot; $XbrlDoc.XbrlFragments.Count &quot;fragments in document.&quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;foreach($XbrlFragment in $XbrlDoc.XbrlFragments)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host $XbrlFragment.Facts.Count &quot;facts in fragment.&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host $XbrlFragment.Units.Count &quot;units in fragment.&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host $XbrlFragment.Contexts.Count &quot;contexts in fragment.&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteItemAndValue $XbrlFragment &quot;EntityRegistrantName&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteItemAndValue $XbrlFragment &quot;TradingSymbol&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteItemAndValue $XbrlFragment &quot;DocumentPeriodEndDate&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;Function WriteItemAndValue&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; param($fragment, $name)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $FoundItem = $fragment.Facts | Where-Object { $_.Name -eq $name }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host $name &quot;: &quot; $FoundItem.Value&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
As it turns out, I have good news and bad news:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;The good news is that Gepsio parses the ful document at the XML level without errors, even when the root of the XML document is not an &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&amp;lt;xbrl&amp;gt;&lt;/span&gt; root.&lt;/li&gt;
&lt;li&gt;The bad news is that Gepsio didn&#39;t find any XBRL fragments in the supplied document, despite the document&#39;s valid iXBRL tagging.&lt;/li&gt;
&lt;/ul&gt;
Gepsio makes an assumption that iXBRL fragments are marked up using the same schema as a full XBRL document, which is not the case. The iXBRL tagging structure, documented &lt;a href=&quot;http://www.xbrl.org/Specification/inlineXBRL-part1/CR-2009-11-16/inlineXBRL-part1-CR-2009-11-16.html&quot;&gt;here&lt;/a&gt;, is not supported by Gepsio in the Nov 2011 CTP, and it will be my job to correct that flaw.&lt;br /&gt;
&lt;br /&gt;
My plan is to work on Gepsio&#39;s iXBRL support this month to see how far I get. I hope to report back on my progress soon. In my ideal world, I would like to release a new CTP of Gepsio this month that includes iXBRL support.&lt;br /&gt;
&lt;br /&gt;
Wish me luck!</content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/8668763690874229978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2012/01/gepsio-nov-2011-ctp-and-ixbrl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/8668763690874229978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/8668763690874229978'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2012/01/gepsio-nov-2011-ctp-and-ixbrl.html' title='Gepsio Nov 2011 CTP and iXBRL'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-781580981712404314</id><published>2011-11-17T21:54:00.001-06:00</published><updated>2011-11-17T21:54:23.350-06:00</updated><title type='text'>Easy XBRL Scripting with Gepsio and PowerShell</title><content type='html'>&lt;p&gt;Microsoft’s &lt;a href=&quot;http://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx&quot; target=&quot;_blank&quot;&gt;PowerShell&lt;/a&gt; scripting environment provides full support for using .NET objects, which makes it an ideal scripting language for use with &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt;. PowerShell and Gepsio can work together to make working with &lt;a href=&quot;http://www.xbrl.org&quot; target=&quot;_blank&quot;&gt;XBRL&lt;/a&gt; data very easy.&lt;/p&gt; &lt;p&gt;Here is a simple PowerShell script that pulls an XBRL document from the SEC site and displays some simple information about the document:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;Add-Type -Path &lt;span class=&quot;str&quot;&gt;&quot;C:\GepsioPath\JeffFerguson.Gepsio.dll&quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;$XbrlDoc = New-Object -TypeName JeffFerguson.Gepsio.XbrlDocument&lt;br /&gt;&lt;br /&gt;$DocumentLocation = &lt;span class=&quot;str&quot;&gt;&quot;http://www.sec.gov/Archives/edgar/data/21344/000104746911006790/ko-20110701.xml&quot;&lt;/span&gt;&lt;br /&gt;Write-Host &lt;span class=&quot;str&quot;&gt;&quot;Loading and validating&quot;&lt;/span&gt; $DocumentLocation&lt;span class=&quot;str&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;br /&gt;$XbrlDoc.Load($DocumentLocation)&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt;($CurrentFragment &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; $XbrlDoc.XbrlFragments)&lt;br /&gt;{&lt;br /&gt;    Write-Host $CurrentFragment.Facts.Count &lt;span class=&quot;str&quot;&gt;&quot;facts in fragment.&quot;&lt;/span&gt;&lt;br /&gt;    Write-Host $CurrentFragment.Units.Count &lt;span class=&quot;str&quot;&gt;&quot;units in fragment.&quot;&lt;/span&gt;&lt;br /&gt;    Write-Host $CurrentFragment.Contexts.Count &lt;span class=&quot;str&quot;&gt;&quot;contexts in fragment.&quot;&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This script gives the following output:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;Loading and validating http://www.sec.gov/Archives/edgar/data/21344/000104746911006790/ko-20110701.xml...&lt;br /&gt;1081 facts in fragment.&lt;br /&gt;4 units in fragment.&lt;br /&gt;281 contexts in fragment.&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Let’s take a look at the script in more detail. It begins by adding the Gepsio runtime into the PowerShell environment with a call to the Add-Type command:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;Add-Type -Path &lt;span class=&quot;str&quot;&gt;&quot;C:\GepsioPath\JeffFerguson.Gepsio.dll&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Every PowerShell script that uses Gepsio will need to use this command so that the Gepsio runtime can be used by the PowerShell script.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Once Gepsio is loaded, a new Gepsio XbrlDocument object is created and saved in a variable:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;$XbrlDoc = New-Object -TypeName JeffFerguson.Gepsio.XbrlDocument&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This statement states that a new .NET object of type JeffFerguson.Gepsio.XbrlDocument, which is the Gepsio type that represents an XBRL document, should be created and be made available in a PowerShell script variable called $XbrlDoc.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;One the new XbrlDocument object is created, another PowerShell variable is created to describe the address of the document to be loaded:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;$DocumentLocation = &lt;span class=&quot;str&quot;&gt;&quot;http://www.sec.gov/Archives/edgar/data/21344/000104746911006790/ko-20110701.xml&quot;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This statement creates a new PowerShell script variable called $DocumentLocation and assigns it a string of “http://www.sec.gov/Archives/edgar/data/21344/000104746911006790/ko-20110701.xml”. This is the address of the XBRL document that the script should load.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Once the address of the XBRL document is made available, it is loaded into the Gepsio XbrlDocument object through a call to the XbrlDocument.Load() method:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;$XbrlDoc.Load($DocumentLocation)&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Gepsio treats an XbrlDocument as a collection of XbrlFragment objects. Each XBRL fragment is XML data having the &amp;lt;xbrl&amp;gt; tag as its root. Generally, an XBRL document will have only one XbrlFragment, although Gepsio supports documents that may have more than one fragment. The script iterates through each fragment in the document and examines the Xbrlfragment object’s three main collections: Facts, Units and Contexts. Each collection has a property called Count, and each of these counts are displayed as script output:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt;($CurrentFragment &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; $XbrlDoc.XbrlFragments)&lt;br /&gt;{&lt;br /&gt;    Write-Host $CurrentFragment.Facts.Count &lt;span class=&quot;str&quot;&gt;&quot;facts in fragment.&quot;&lt;/span&gt;&lt;br /&gt;    Write-Host $CurrentFragment.Units.Count &lt;span class=&quot;str&quot;&gt;&quot;units in fragment.&quot;&lt;/span&gt;&lt;br /&gt;    Write-Host $CurrentFragment.Contexts.Count &lt;span class=&quot;str&quot;&gt;&quot;contexts in fragment.&quot;&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Future blog posts will explore PowerShell’s access to the Gepsio runtime in more detail.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/781580981712404314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2011/11/microsofts-powershell-scripting.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/781580981712404314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/781580981712404314'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2011/11/microsofts-powershell-scripting.html' title='Easy XBRL Scripting with Gepsio and PowerShell'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-5317931471891516136</id><published>2011-11-07T17:39:00.001-06:00</published><updated>2011-11-07T17:39:42.160-06:00</updated><title type='text'>Gepsio Available as a NuGet Package</title><content type='html'>&lt;p&gt;Beginning with the recently-released Nov 2011 CTP, &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt; is now available via &lt;a href=&quot;http://www.nuget.org/&quot; target=&quot;_blank&quot;&gt;NuGet&lt;/a&gt; as well as from the project Web site. The name of the NuGet package is JeffFerguson.Gepsio, so, from within the Package Manager Console in Visual Studio 2010, you can execute the following command:&lt;/p&gt; &lt;p&gt;PM&amp;gt; &lt;strong&gt;Install-Package JeffFerguson.Gepsio&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;You will also find it from the “Manage NuGet Packages” submenu item from the “Library Package Manager” menu item on the Visual Studio 2010 “Tools” menu. Just search for &lt;em&gt;Gepsio&lt;/em&gt;:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-RiXOUorF3MI/TrhsPE0fbmI/AAAAAAAABcE/bGTkjIrpe8U/s1600-h/image%25255B7%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-npMjKJS94j8/TrhsPQ6kHtI/AAAAAAAABcM/VtCNU_ONmWg/image_thumb%25255B5%25255D.png?imgmax=800&quot; width=&quot;507&quot; height=&quot;339&quot;&gt;&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/5317931471891516136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2011/11/gepsio-available-as-nuget-package.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/5317931471891516136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/5317931471891516136'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2011/11/gepsio-available-as-nuget-package.html' title='Gepsio Available as a NuGet Package'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-npMjKJS94j8/TrhsPQ6kHtI/AAAAAAAABcM/VtCNU_ONmWg/s72-c/image_thumb%25255B5%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-3671538896907502633</id><published>2011-11-01T19:35:00.001-05:00</published><updated>2011-11-01T19:35:24.850-05:00</updated><title type='text'>Nov 2011 CTP Released</title><content type='html'>&lt;p&gt;I am pleased to announce the Nov 2011 CTP release of &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt;. This release passes 191 of the tests in the XBRL-CONF-CR3-2007-03-05 conformance suite (which is 32 more than the 159 tests that passed in the last CTP release). This release builds on the previous CTP release in the following ways:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;First Class Support For Items and Tuples.&lt;/strong&gt; Previous releases of Gepsio used a single class called Fact to represent a fact in an &lt;a href=&quot;http://www.xbrl.org&quot; target=&quot;_blank&quot;&gt;XBRL&lt;/a&gt; fragment. Starting with this release, the Fact class is a base class for two derived classes: one called Item and the other called Tuple. The Facts collection available from an XbrlFragment object is a collection of Fact objects, and each Fact in the collection could, in fact, be either an Item object or a Tuple object. This work brings the XBRL concept of tuples in as a first-class citizen of the Gepsio object model.  &lt;li&gt;&lt;strong&gt;Complete Support For Essence Aliases.&lt;/strong&gt; This release of Gepsio passes all of the conformance suite tests relating to the concept of essence aliases.  &lt;li&gt;&lt;strong&gt;Better Support For Calculation Arc Validation.&lt;/strong&gt; Gepsio now has a better validation engine for calculation arcs. This release now includes better handling of context-equals and unit-equals items, items with a nil value, and better support for contributing concept items found in tuples.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Download this latest version (numbered 2.1.0.5) at &lt;a href=&quot;http://gepsio.codeplex.com&quot;&gt;http://gepsio.codeplex.com&lt;/a&gt; and click the “Downloads” tab to grab the latest release.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/3671538896907502633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2011/11/nov-2011-ctp-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/3671538896907502633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/3671538896907502633'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2011/11/nov-2011-ctp-released.html' title='Nov 2011 CTP Released'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-6106675189652944274</id><published>2011-10-20T09:37:00.001-05:00</published><updated>2011-10-20T09:37:13.155-05:00</updated><title type='text'>Support Added for Calculation Arcs with Destination Labels Referencing Multiple Locators</title><content type='html'>&lt;p&gt;I have just checked in a change to &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt; that correctly validates calculation arcs that use destination labels that reference more than one locator.&lt;/p&gt; &lt;p&gt;Take a look at the following calculation link:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;calculationLink&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;extended&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:role&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.xbrl.org/2003/role/link&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;loc&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;locator&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:href&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;397-ABC.xsd#A&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:label&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;summationItem&quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;loc&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;locator&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:href&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;397-ABC.xsd#B&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:label&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;contributingItem&quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;loc&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;locator&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:href&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;397-ABC.xsd#C&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:label&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;contributingItem&quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;calculationArc&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;arc&quot;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;attr&quot;&gt;xlink:arcrole&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.xbrl.org/2003/arcrole/summation-item&quot;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;attr&quot;&gt;xlink:from&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;summationItem&quot;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;attr&quot;&gt;xlink:to&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;contributingItem&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;weight&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;1&quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;calculationLink&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This example, taken from the 397.00 conformance test in the XBRL-CONF-CR3-2007-03-05 conformance suite, defines a calculation arc that arcs from “summationItem” to “contributingItem”. The issue here is that there are two locators that use the “contributingItem” label:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;397-ABC.xsd#B&lt;/li&gt;&lt;br /&gt;&lt;li&gt;397-ABC.xsd#C&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Both of these locators must participate in the calculation arc. In the current CTP of Gepsio, only the fact referenced by the first locator is used to validate the calculation arc. With the new code, both facts referenced by both locators are used to validate the calculation arc.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This improved functionality will be available in the next CTP to released (which I am currently targeting for release in the next week or so).&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/6106675189652944274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2011/10/support-added-for-calculation-arcs-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/6106675189652944274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/6106675189652944274'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2011/10/support-added-for-calculation-arcs-with.html' title='Support Added for Calculation Arcs with Destination Labels Referencing Multiple Locators'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-458129725983817531</id><published>2011-10-11T14:28:00.001-05:00</published><updated>2011-10-11T14:28:10.721-05:00</updated><title type='text'>Calculation Validation Location Bug Fixed</title><content type='html'>&lt;p&gt;I have checked in code that fixes a bug in the validation of calculation arc values in &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In the current CTP, the value of a xlink:href attribute of a locator element for a calculation arc is used to find the appropriate contributing concept. This is in error; in fact, the xlink:label attribute must be used instead. This bug hasn’t been caught until now because many of the &lt;a href=&quot;http://www.xbrl.org&quot; target=&quot;_blank&quot;&gt;XBRL&lt;/a&gt; documents in XBRL-CONF-CR3-2007-03-05 conformance suite use the same value for the xlink:href and label attributes. The 305.07 test, for example, references a calculation linkbase document that includes markup as follows:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;loc&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;locator&quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;attr&quot;&gt;xlink:href&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;305_07_decimals_test.xsd#decimals_Land&quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;attr&quot;&gt;xlink:label&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;decimals_Land&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;As you can see, the resource ID of the value of the xlink:href attribute (decimals_Land) matches the value of the xlink:label attribute (decimals_Land), so it didn’t matter which value Gepsio used to find the correct element.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The 395.01 test, however, uses different location markup:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;loc&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;locator&quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;attr&quot;&gt;xlink:href&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;SummationItem.xsd#CurrentAsset&quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;attr&quot;&gt;xlink:label&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;labelCurrentAsset&quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;attr&quot;&gt;xlink:title&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;CurrentAsset&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In this markup, the resource ID of the value of the xlink:href attribute (CurrentAsset) does not match the value of the xlink:label attribute (labelCurrentAsset) and Gepsio’s use of the resource ID is in error. Gepsio must use the value of the xlink:label attribute to find the correct element.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This bug has been fixed and will be available in the next CTP of Gepsio (which I am currently planning on releasing on Nov 01 2011).&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/458129725983817531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2011/10/calculation-validation-location-bug.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/458129725983817531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/458129725983817531'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2011/10/calculation-validation-location-bug.html' title='Calculation Validation Location Bug Fixed'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-3026285712821790531</id><published>2011-10-07T10:29:00.001-05:00</published><updated>2011-10-07T10:29:29.941-05:00</updated><title type='text'>Essence Alias Support Complete</title><content type='html'>&lt;p&gt;I have just checked in code that completes &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt;’s support of the &lt;a href=&quot;http://www.xbrl.org&quot; target=&quot;_blank&quot;&gt;XBRL&lt;/a&gt; essence alias concept. All of the essence alias conformance tests found in the XBRL-CONF-CR3-2007-03-05 conformance test suite (numbered with the 392 prefix) now behave as expected when parsed by Gepsio.&lt;/p&gt; &lt;p&gt;The next CTP of Gepsio will include all of this work and will correctly validate essence aliases found in XBRL documents.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/3026285712821790531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2011/10/essence-alias-support-complete.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/3026285712821790531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/3026285712821790531'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2011/10/essence-alias-support-complete.html' title='Essence Alias Support Complete'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-6248315241344750247</id><published>2011-10-06T14:04:00.001-05:00</published><updated>2011-10-06T14:04:29.999-05:00</updated><title type='text'>Dates Available For Instant Period Contexts</title><content type='html'>&lt;p&gt;I have just checked in a change to the Context class that will appear in the next CTP. The Context class now includes a public property called InstantDate, which exposes a DateTime value. The value of the InstantDate property for a Context reflects the date given for an instant period. This value is valid only when the Context reflects an Instant period. You will be able to write code like the following:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt;(CurrentContext.InstantPeriod == &lt;span class=&quot;kwrd&quot;&gt;true&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;    var ContextDate = CurrentContext.InstantDate;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/6248315241344750247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2011/10/dates-available-for-instant-period.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/6248315241344750247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/6248315241344750247'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2011/10/dates-available-for-instant-period.html' title='Dates Available For Instant Period Contexts'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-4037270701411444662</id><published>2011-09-30T15:12:00.001-05:00</published><updated>2011-09-30T15:12:38.164-05:00</updated><title type='text'>Facts, Items and Tuples</title><content type='html'>&lt;p&gt;The current CTP of &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt; (which, as of this writing, is the Feb 2011 CTP) exposes a collection of Fact objects as a property in an XbrlFragment. With this arrangement, you can write code like this:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;var MyXbrlDocument = &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; XbrlDocument();&lt;br /&gt;MyXbrlDocument.Load(&lt;span class=&quot;str&quot;&gt;&quot;xbrldata.xml&quot;&lt;/span&gt;);&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt;(var CurrentFragment &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; MyXbrlDocument.XbrlFragments)&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt;(var CurrentFact &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; CurrentFragment.Facts)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class=&quot;rem&quot;&gt;// Ooh! An XBRL fact!&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I have been working on adding support for tuples in the next CTP, and, in doing so, have come to realize that this scenario is incomplete.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The Fact class in the current CTP is a standalone class. It doesn’t inherit from any other class, nor is it a base class for a derived class. The issue with the current CTP is that the only facts that it reads and exposes are single-value facts. Any tuples in the &lt;a href=&quot;http://www.xbrl.org&quot; target=&quot;_blank&quot;&gt;XBRL&lt;/a&gt; document are ignored and not included as a Fact instance.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In actuality, the XBRL specification supports two types of facts:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;single-value facts, called &lt;em&gt;items&lt;/em&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;multiple-value facts, called &lt;em&gt;tuples&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;The next CTP will provide support for tuples, and, as such, Gepsio’s understanding of a fact will be more complete. In the next CTP, the Fact class will remain, but it will serve as a base class for a new class called Item and another new class called Tuple:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; Fact&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;rem&quot;&gt;// magic happens here&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; Item : Fact&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;rem&quot;&gt;// more magic happens here&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; Tuple : Fact&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;rem&quot;&gt;// even more magic happens here&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Fact collections will remain in place, but Fact items can be examined to determine whether they are, in fact, items or tuples. This updated design will allow Gepsio to detect tuples in loaded XBRL documents and perform the appropriate work needed to expose tuples to Gepsio clients.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/4037270701411444662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2011/09/facts-items-and-tuples.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/4037270701411444662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/4037270701411444662'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2011/09/facts-items-and-tuples.html' title='Facts, Items and Tuples'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1533220940284878969.post-139196812886631909</id><published>2011-09-29T10:31:00.001-05:00</published><updated>2011-09-29T10:31:20.078-05:00</updated><title type='text'>Rounded Values of Essence Aliased Facts Now Checked</title><content type='html'>&lt;p&gt;I have just checked in code that will be released with the next CTP of &lt;a href=&quot;http://gepsio.codeplex.com&quot; target=&quot;_blank&quot;&gt;Gepsio&lt;/a&gt;. The code validates the rounded values (that is, fact values with any applicable rounding and truncation applied) of essence aliased facts and throws an exception if those values do not match.&lt;/p&gt; &lt;p&gt;For example, consider the following XBRL document:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;xbrl&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.xbrl.org/2003/instance&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns:link&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.xbrl.org/2003/linkbase&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns:xlink&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.w3.org/1999/xlink&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns:example&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://example.com/xbrl/taxonomy/EssenceAlias&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns:iso4217&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.xbrl.org/2003/iso4217&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns:xsi&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xsi:schemaLocation&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://example.com/xbrl/taxonomy/EssenceAlias EssenceAlias.xsd&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;link:schemaRef&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:href&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;EssenceAlias.xsd&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;simple&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;unit&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;u1&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;measure&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;iso4217:USD&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;measure&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;unit&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;context&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;c1&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;entity&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;identifier&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;scheme&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;www.example.com&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;example&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;identifier&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;entity&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;period&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;instant&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;2003-03-31&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;instant&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;period&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;example:CurrentDeferredIncomeTaxExpense&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;contextRef&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;c1&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;unitRef&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;u1&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;precision&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;4&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;100.0&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;example:CurrentDeferredIncomeTaxExpense&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;example:ForeignDomesticIncomeTaxExpense&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;contextRef&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;c1&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;unitRef&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;u1&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;precision&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;3&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;100&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;example:ForeignDomesticIncomeTaxExpense&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;example:TaxExpense&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;contextRef&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;c1&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;unitRef&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;u1&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;precision&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;3&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;200&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;example:TaxExpense&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;xbrl&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now suppose that the CurrentDeferredIncomeTaxExpense and TaxExpense facts are paired in an essence alias relationship, as shown in the following linkbase document:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;xml&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;1.0&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;UTF-8&quot;&lt;/span&gt;?&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;linkbase&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.xbrl.org/2003/linkbase&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns:xbrll&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.xbrl.org/2003/linkbase&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns:xlink&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.w3.org/1999/xlink&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns:xsi&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xsi:schemaLocation&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.xbrl.org/2003/linkbase ../lib/xbrl-linkbase-2003-12-31.xsd&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;definitionLink&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;extended&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:role&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.xbrl.org/2003/role/link&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;loc&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;locator&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:href&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;EssenceAlias.xsd#TaxExpense&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:label&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;labelTaxExpense&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:title&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;TaxExpense&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;loc&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;locator&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:href&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;EssenceAlias.xsd#ForeignDomesticIncomeTaxExpense&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:label&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;labelForeignDomesticIncomeTaxExpense&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:title&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;ForeignDomesticIncomeTaxExpense&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;loc&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;locator&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:href&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;EssenceAlias.xsd#CurrentDeferredIncomeTaxExpense&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:label&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;labelCurrentDeferredIncomeTaxExpense&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:title&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;CurrentDeferredIncomeTaxExpense&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;definitionArc&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;arc&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:arcrole&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.xbrl.org/2003/arcrole/essence-alias&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:from&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;labelTaxExpense&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:to&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;labelCurrentDeferredIncomeTaxExpense&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;priority&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;0&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;definitionArc&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;arc&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:arcrole&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.xbrl.org/2003/arcrole/essence-alias&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:from&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;labelTaxExpense&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xlink:to&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;labelForeignDomesticIncomeTaxExpense&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;priority&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;0&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;definitionLink&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;linkbase&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The XBRL document is invalid, because the two facts are in an invalid essence alias relationship. The relationship is invalid because the rounded values of the facts differ. In the current CTP, this issue is not reported by Gepsio. Starting with the next CTP, this issue will be reported during validation through an XbrlException thrown back to the caller. The exception will contain a message describing the mismatched values. For the document above, Gepsio will provide a message that reads as follows:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Facts named TaxExpense are defined as being in an essence alias relationship with facts named CurrentDeferredIncomeTaxExpense. However, the fact with ID&amp;nbsp; has a rounded value of 200, which differs from the fact with ID , which has a rounded value of 100. These two facts are therefore not in a valid essence alias relationship.&lt;/em&gt;&lt;br&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;(Gepsio will include the fact IDs in the message. The document shown above has no IDs for the facts, so that part of the message is empty.)&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://gepsio.blogspot.com/feeds/139196812886631909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gepsio.blogspot.com/2011/09/rounded-values-of-essence-aliased-facts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/139196812886631909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1533220940284878969/posts/default/139196812886631909'/><link rel='alternate' type='text/html' href='http://gepsio.blogspot.com/2011/09/rounded-values-of-essence-aliased-facts.html' title='Rounded Values of Essence Aliased Facts Now Checked'/><author><name>Jeff Ferguson</name><uri>http://www.blogger.com/profile/01101882565088939463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMCxa1J4HauU6Djn5_C2SzukvO1AxWOKlD3y1KwOlTswo52ssoJlIQ7sNDsDUu8XVMvuGEzHyaGpj5briU_kyN01IFJbq8f4EXfQhmIFgYH73vpAhszAb3_aOSSiCXNw/s220/Apr+12+2019+Original.jpg'/></author><thr:total>0</thr:total></entry></feed>