7

我正在开发一个财务应用程序,其中一个功能是生成 XBRL(可扩展业务报告语言)文档。如果您熟悉 XBRL 实例文档,您可能知道它们通常引用大量模式。使用(商业)库生成这些 XBRL 实例通常更容易。

用例:为用户设计一个 Web 表单以填写各个字段。使用用户输入生成一个有效的 XBRL 实例文档。
我们的平台:C# & .Net

我的问题:

  • 您是否使用过任何(商业)库?您会推荐哪一个来生成“年度财务报表”?Altova MapForce 似乎是主导者。

  • 避免使用(商业)库的粗略解决方法:

    • 选择一个有效的实例文档,清除所有数据并将 XBRL (XML) 文件存储为模板。
    • 使用 XSLT 将模板呈现给用户。使用 .Net 中的标准 XML 库收集用户输入并填写 XBRL

您会推荐这种解决方法吗?为什么&为什么不?

任何输入将不胜感激:)

4

5 回答 5

2

现在,我使用第二种方法的变体。我有一个模板,我用数据解析和填充,这要归功于标准的 XML 库(在我的例子中是 C libxml)。

拥有模板的想法有助于生成有效的 XBRL,但我认为 XSLT 非常复杂,而且通常受到限制,我更喜欢使用真正的编程语言(在我的例子中是 python,但可能是 C# .net)

在商业工具方面:

  • 我从来没有用过Altova。
  • Invoke 非常擅长在实例中映射数据,而且速度非常快。

第三种方法是仅以编程方式使用 XML 库生成 XBRL 实例。毕竟,XBRL 是 XML。

于 2011-08-05T12:32:45.710 回答
0

要创建 xbrl 文件,我会使用模板来避免在不需要时重新编译解决方案。到目前为止,xslt 为我做得很好。

生成 xbrl 的 xslt 示例如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="no" />  
  <xsl:template match="/">    
    <xbrli:xbrl ....

    <xbrli:period>
     ....
<xbrli:startDate><xsl:value-of        select="yourcontext/contextstartdate"/></xbrli:endDate>
 </xbrli:period>
  </xbrli:xbrl>
  </xsl:template>
</xsl:stylesheet>

最近我一直在创建大的 xbrl 文件(500+ mb 大小)并且使用 xslt 在时间方面仍然做得很好。尽管为了使用这些文件,最好构建和 adhoc 算法来搜索和查找您要查找的内容。使用 xpath 太慢了,所以最好是构建一个定制的算法来获得你需要的东西。

于 2013-11-01T04:58:53.847 回答
0

我会先退后一步重新考虑用例。财务报告通常包含数百到数千个单独的数字事实,除了脚注和财务报表更长的段落大小的注释。您真的希望用户坐在 Web 表单前并重新键入这些关键业务数据吗?

实际上,这些数据存在于数据库中,将其导入 XBRL 的最安全方法是连接到该数据库。

如开题所述,XBRL 使用大量模式,最重要的分类模式可以包含数千个元素定义。标准 XML 工具上的 UI 并未针对这种情况进行优化,但内部帐户标识符和基本分类标记之间的映射是该流程最重要的用例之一。同样,考虑将此映射存储在您的财务数据库中,因为它是业务关键数据。

于 2013-10-08T19:12:25.177 回答
0

在商业库中,Gepsio 是 .NET 平台的明确选择,而且它是开源的。

如果用户必须填写数据,那么您的粗略解决方法是正确的。您可以使用 XForms 来允许用户直接编辑空白 XML。大多数 XML 数据库都包含 XForms 支持。

如果您不打算使用 XML DB,则可以使用 XSLTForms,这是一个几乎可以在任何浏览器中运行的 XForms 插件。

于 2013-10-08T19:29:19.823 回答
0

我目前正在处理一个消耗和生成大型 Xbrl 文档的项目。

对于生成,我们目前使用 Altova MapForce 设计地图,使用 Altova FlowForce 和 Altova MapForce Server 执行从 Xml 到 Xbrl 的映射。MapForce 的性能相当不错,但 FlowForce 在处理大量文件时有点笨拙。

对于您的用例,我不会沉迷于数据收集,MapForce 可以从文本文件 (csv) 或 xml 映射。将数据放入数据库后,生成一个输入文档(在 C# 中作为和 XmlDocument)并让 MapForce 在 Xbrl 中生成输出文档。

于 2015-07-15T07:42:22.733 回答