1

我有一个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 文件方面都有一些经验,因为我觉得我在这里错过了重点:)

4

2 回答 2

2

www.Arelle.org

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

于 2013-07-31T14:25:14.207 回答
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 来说是足够的验证,但到目前为止可以正常工作:)

于 2013-03-28T12:32:39.880 回答