首页
学习
活动
专区
圈层
工具
发布

Xbrl验证
EN

Stack Overflow用户
提问于 2013-03-28 19:02:58
回答 2查看 1.1K关注 0票数 1

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

这是我的解析器中的GetEntity函数,因此我可以获得包含的xsd's

代码语言:javascript
复制
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文件的经验,因为我觉得我错过了这里的要点:)

EN

回答 2

Stack Overflow用户

发布于 2013-07-31 22:25:14

www.Arelle.org

此开源项目包含可用于验证Xbrl文件的web服务。这就是我现在实现的东西,它会检查所有需要的Xbrl规则

票数 2
EN

Stack Overflow用户

发布于 2013-03-28 20:32:40

我使用的是普通的Xml-Xsd验证,到目前为止这似乎还可以。

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

代码语言:javascript
复制
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文件是嵌入式资源。

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

代码语言:javascript
复制
Dim schemas As XmlSchemaSet = New XmlSchemaSet()
    schemas.XmlResolver = New ResourceXmlResolver(System.Reflection.Assembly.GetExecutingAssembly)

它们已正确加载。但是,我确实提供了来自www.xbrl.org的xsd的检查。

在这种情况下,我使用标准的XmlUrlResolver从web上获取它们。

我还通过下载所有xbrl xsd并嵌入它们来使其正常工作。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15680101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档