1

外部パーティからすべてのファイルをロードするため のカスタムを作成しましたXDocumentXbrl xsd'sXmlResolverxsd

これは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 ファイルは埋め込みリソースです。

Assembly を Xsd ファイルを含むアセンブリに設定したので、リゾルバーを設定して GetEntity メソッドを呼び出すと、次のようになります。

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

それらは正しくロードされます。ただし、www.xbrl.org から xsd のチェックを提供しています。
その場合、標準の XmlUrlResolver を使用して Web から取得しています。

また、すべての xbrl xsd をダウンロードして埋め込むだけで、これが機能するようになりました。

これが Xbrl の十分な検証であることを願っていますが、これまでのところ機能しています :)

于 2013-03-28T12:32:39.880 に答える