【问题标题】:Xbrl ValidationXbrl 验证
【发布时间】:2013-03-28 11:02:57
【问题描述】:

我有一个生成的XDocument 需要验证为Xbrl xsd's 我创建了一个自定义XmlResolver 来加载来自外部方的所有xsd 文件。

这是来自我的解析器的GetEntity 函数,所以我可以得到包含的xsd's

Public Overrides Function GetEntity(absoluteUri As Uri, role As String, ofObjectToReturn As Type) As Object

    'If absoluteUri.ToString.Contains("www.xbrl.org") Then
    '    Nothing here yet
    'End If

    Dim nmSpace As String = _assembly.GetName.Name.ToString
    Dim resource = String.Concat(nmSpace, ".", Path.GetFileName(absoluteUri.ToString()))
    Dim result = _assembly.GetManifestResourceStream(resource)

    Return result
End Function

但是有很多来自 xbrl 命名空间的 xsd 并且它们没有被加载。

我开始下载它们以将它们作为资源包含,但文件太多,所以它似乎不是最好的解决方案。

我希望有人在验证 Xbrl 文件方面有一些经验,因为我觉得我在这里错过了重点:)

【问题讨论】:

  • 如果这是 .NET(不是 WinRT)代码,那么您可以查看 Gepsio (Gepsio.codeplex.com) 以查看 Gepsio 是否可以自动验证您的文档。

标签: xsd-validation xbrl


【解决方案1】:

www.Arelle.org

这个开源项目包含一个可用于验证 Xbrl 文件的网络服务。 这是我现在实现的,它会检查所有必需的 Xbrl 规则

【讨论】:

  • 是的,除了桌面应用程序之外,Arelle 还提供在您的本地机器上运行的本地 Web 服务。它还有其他有用的宁静服务,例如localhost:8080/help 给出了列表。
【解决方案2】:

我正在使用普通的 Xml-Xsd 验证,目前看来还可以。

我这样实现了自定义解析器:

Public Class ResourceXmlResolver
Inherits XmlResolver

Private Shared _xmlUrlResolver As XmlUrlResolver = New XmlUrlResolver()
Private _assembly As Assembly

Public Sub New(assembly As Assembly)
    _assembly = assembly
End Sub

Public Overrides Function GetEntity(absoluteUri As Uri, role As String, ofObjectToReturn As Type) As Object

    If absoluteUri.ToString.Contains("www.xbrl.org") Then
        Return _xmlUrlResolver.GetEntity(absoluteUri, role, ofObjectToReturn)
    End If

    Dim nmSpace As String = _assembly.GetName.Name.ToString
    Dim resource = String.Concat(nmSpace, ".", Path.GetFileName(absoluteUri.ToString()))
    Dim result = _assembly.GetManifestResourceStream(resource)

    Return result
End Function
Public Overrides WriteOnly Property Credentials() As System.Net.ICredentials
    Set(value As System.Net.ICredentials)
        Throw New NotImplementedException()
    End Set
End Property

结束类

第三方提供的Xsd文件为嵌入式资源。

我将 Assembly 设置为包含我的 Xsd 文件的程序集,所以当通过设置解析器调用 GetEntity 方法时:

Dim schemas As XmlSchemaSet = New XmlSchemaSet()
    schemas.XmlResolver = New ResourceXmlResolver(System.Reflection.Assembly.GetExecutingAssembly)

它们已正确加载。但是,我确实提供了来自 www.xbrl.org 的 xsd 检查。
在这种情况下,我使用标准 XmlUrlResolver 从网络上获取它们。

我也通过下载所有 xbrl xsd 并嵌入它们来完成这项工作。

我希望这是对 Xbrl 的足够验证,但到目前为止它已经工作了 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    相关资源
    最近更新 更多