【问题标题】:XML XBRL _ Can we use a freeware XML parser (BaseX) to parse XBRL data since XBRL is XML-based?XML XBRL _ 由于 XBRL 是基于 XML 的,我们能否使用免费软件 XML 解析器 (BaseX) 来解析 XBRL 数据?
【发布时间】:2014-06-11 17:48:10
【问题描述】:

这一切都归结为解析XML数据的一个非常关键的问题!

  • 我们能否解析 XBRL(基于 XML)以从 database 中提取数据?

原因我提交这个理论问题(这需要 XML 的技术能力)是软件公司正在放置一个单独的 price tag(请查看之前的链接) 在XML parsersXBRL parsers 之间!这肯定会引发危险。

  • 我们可以使用像BaseX 这样的免费软件,它旨在查询XML 来解析XBRL Instance document 并提取数据。如果不是,为什么因为 XBRL 是 XML?

【问题讨论】:

    标签: xml database xbrl


    【解决方案1】:

    XBRL 的问题在于,您从 XML 中得到的主要内容是一组附有大量代码的事实。如果不解析包含所有定义的分类法,这些代码将毫无意义。

    不幸的是,分类法还包含公式(是的,真的)、演示文稿(什么去哪里)和其他“有用”的附加内容,这些内容使事情变得无休止地复杂化。除此之外,该标准对所有内容都使用 Linkbases。一个非常标准的分类法可以轻松包含 2000 多个单独的文件。

    是的,您可以为此使用 XML 解析器,但它不会返回任何有意义的东西。为此,您必须解析实例和分类。不幸的是,这不适用于低价。

    您可以查看 www.openfiling.info(欧盟 XBRL 归档项目的开源部分)中的 Arelle 之类的工具 - 这应该让您了解为什么普通的 XML 解析器没有帮助。链接:www.openfiling.info/arelle/

    【讨论】:

      【解决方案2】:

      所有 XBRL 都是 XML,因此,在基础级别,是的,您可以。

      但是,XBRL 在特定于 XBRL 规范的 XML 之上强加了额外的语义和验证。因此,有效的 XML 不一定是有效的 XBRL。由于 XBRL 规范强加的语义和有效性规则,供应商在 XBRL 上贴上单独的价格标签。有效的 XBRL 也是有效的 XML,但有效的 XML 不一定是有效的 XBRL。

      【讨论】:

        【解决方案3】:

        你可以做到。目前我的公司使用 eXist-db 来做这件事,但同样的规则也适用于 BaseX、Sedna 或 Marklogic。

        您必须掌握 XPath 2.0 并了解一点 XQuery,并避免进行特定于命名空间的查询。

        我认为您需要从 XBRL 实例文档中查询数据。这可以分两步完成: 1.获取你要查询的context id 2. 在这个上下文中搜索事实元素

        这个查询可以通过一次调用来完成:

        xquery version "3.0";
        declare default element namespace"http://www.xbrl.org/2003/instance";
        
        declare function local:for-context($node as node(),$ent as xs:string,$start as xs:string,$end as xs:string) as xs:boolean {
            let $cid := $node/@contextRef
            let $ctx := $node/../context[ @id = $cid ]
            return if ( $ctx 
                        and not(exists($ctx/entity/segment)) 
                        and $ctx/entity/identifier=$ent 
                        and $ctx/period/startDate=$start 
                        and $ctx/period/endDate=$end ) then true() else false()
            };
        
        let $id := request:get-parameter( 'id', '0001173514' ) 
        let $startDate := request:get-parameter( 'startdate', '2013-04-01' ) 
        let $endDate := request:get-parameter( 'enddate', '2013-06-30' ) 
        let $fact := request:get-parameter( 'fact', 'NonoperatingIncomeExpense' ) 
        
        let $q := concat( "/*/*:", $fact, "[ local:for-context(., $id, $startDate, $endDate) ]" ) 
        
        return util:eval($q)
        

        它接收公司 ID、开始日期、结束日期和事实名称,并从实例文档中返回值。

        【讨论】:

          【解决方案4】:

          您可以使用标准 XML 解析器来解析 XBRL 实例文档。但是(通过您引用的维基百科页面):

          在典型用法中,XBRL 由一个 XBRL 实例(主要包含所报告的业务事实)和一组分类法(称为可发现分类法集 (DTS))组成,这些分类法定义有关这些事实的元数据,例如事实是什么意思以及它们如何相互关联。 XBRL 使用 XML Schema、XLink 和 XPointer 标准。

          因此,要实际处理 XBRL 文档的内容,您可能需要能够处理 XLink 和 XPointers,并且您需要知道如何从 DTS 中检索、解释和应用元数据。

          就从数据库中提取数据而言:除非 XBRL 充当查询语言,否则在我看来,在这种情况下,您将创建一个新的实例文档,而不是解析现有的文档。这与解析相反。大多数解析器都带有处理语法细节的 XML 序列化程序,但构建具有正确语义的适当文档是您的责任。

          我根本没有看过这些产品,但我怀疑这些是 XBRL 包与基本 XML 工具不同的地方——它包含额外的逻辑来操作这种特定语言的语义。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多