Xbrl验证

时间:2013-03-28 11:02:58

标签: xsd-validation xbrl

我生成的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文件的经验,因为我觉得我在这里忽略了这一点:)

2 个答案:

答案 0 :(得分:2)

www.Arelle.org

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

答案 1 :(得分:1)

我正在使用普通的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文件是嵌入式资源。

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

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

它们已正确加载。但我会从www.xbrl.org上检查xsd 在那种情况下,我使用标准的XmlUrlResolver从网络上获取它们。

我也通过下载所有xbrl xsd并嵌入它们来实现这一点。

我希望这对Xbrl来说是足够的验证,但到目前为止还是有效:)