0

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

  • 我们可以解析XBRL(基于 XML)从数据库中提取数据吗?

我提交这个理论问题(需要 XML 技术能力)的原因是软件公司在和之间放置了一个单独的价格标签请检查之前的链接)!这肯定会引发危险信号。XML parsersXBRL parsers

  • 我们是否可以使用BaseX旨在查询XML解析XBRL 实例文档并提取数据的免费软件。如果不是,为什么因为 XBRL 是 XML?
4

4 回答 4

3

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

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

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

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

于 2014-08-25T21:08:22.610 回答
2

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

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

我认为您需要从 XBRL 实例文档中查询数据。这可以分两步完成: 1. 获取您要查询的上下文 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、开始日期、结束日期和事实名称,并从实例文档返回值。

于 2014-06-12T15:59:18.703 回答
2

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

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

于 2014-06-13T16:59:50.277 回答
1

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

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

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

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

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

于 2014-06-11T21:19:26.493 回答