微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XBRL 标签名称因实例文档和计算文档而异

如何解决XBRL 标签名称因实例文档和计算文档而异

我有一个可能非常愚蠢的问题,但我被它难住了,希望得到任何帮助。 我正在尝试使用 Python 和 BeautifulSoup 从 SEC 文件中收集 xbrl 数据。我遇到的一个问题是,某些行项目在实例文档和计算链接库中的引用方式不同。 作为一个具体的例子,以 PHI Group Inc. 最近的 10-K 为例: https://www.sec.gov/Archives/edgar/data/704172/000149315221015100/0001493152-21-015100-index.htm 带有 xbrl 标记WriteoffOfFinancingCosts”的订单项显示<PHIL:WriteoffOfFinancingCosts ...> 在实例文档中(连同值和上下文) 但在计算链接库中显示为“loc_PHILWriteoffOfFinancingCosts”。 但是这种关系“PHIL:” = 'loc_PHIL' 在 XBRL 文件中并不是标准的。如何知道将向计算链接库中的标签添加什么前缀,以便(去除前缀后)可以将其可靠地绑定回实例文档中的标签? 我可以想到各种解决方法,但看起来很愚蠢;是不是有什么地方我可以在计算链接库或其他地方查看,它只会告诉我添加了什么前缀? 作为一些(可能相关的)细微差别:许多文件中的许多标签,当然,都有一个像“us-gaap”这样的前缀,表示 us-gaap 命名空间,但这似乎并不能保证计算中的标签因此,链接库看起来像 'us-gaapAccountsPayableCurrent' 而不是 'loc_us-gaapAccountsPayableCurrent' 或 'us-gaap:AccountsPayableCurrent' 或其他一些基本模式的变体,当然,所有这些都与 BeautifulSoup 不同。 有人能指出我正确的方向吗?

解决方法

PHIL:WriteoffOfFinancingCosts 是 XBRL 概念的名称,而 loc_PHILWriteoffOfFinancingCosts 是指向概念 PHIL:WriteoffOfFinancingCosts 的定位器的(计算链接库)标签。这种机制是链接库将概念连接在一起的方式:每个定位器都是一个概念的“代理”。

loc_PHILWriteoffOfFinancingCosts 因此是计算链接库的内部细节。链接库标签的名称原则上是“自由选择的”,但是有一些约定俗成的(例如以 loc_ 为前缀),但我不会依赖它们。相反,您可以通过查看链接库标签的定义来“跟踪”:

<link:loc xlink:type="locator"
          xlink:href="phil-20200630.xsd#PHIL_WriteoffOfFinancingCosts"
          xlink:label="loc_PHILWriteoffOfFinancingCosts" />

您可以看到,由于 xlink:href 属性,此定位器指向文件 PHIL_WriteoffOfFinancingCosts 中 ID 为 phil-20200630.xsd 的概念。

<element id="PHIL_WriteoffOfFinancingCosts"
         name="WriteoffOfFinancingCosts" .../>

并且你可以看到这个概念的本地名称是WriteoffOfFinancingCosts。它位于通常与前缀 PHIL: 关联的命名空间中,但从未出现在概念定义中,因为该文件中的所有概念都位于通常与 PHIL: 关联的命名空间中。现在,我们如何知道这一点?因为在 xsd 文件的顶部,它说 targetNamespace="http://phiglobal.com/20200630" 并且前缀 PHIL: 也附加到实例文件 phil-20200630.xml 中的这个命名空间,带有 xmlns:PHIL="http://phiglobal.com/20200630"

通常的做法是选择带有前缀、下划线和本地名称的概念 ID。一些用户依赖它,但遵循间接级别,尽管更复杂,但更“安全”:链接库标签 loc_PHILWriteoffOfFinancingCosts -> 概念 ID PHIL_WriteoffOfFinancingCosts -> 概念本地名称 {{1} } -> 概念的完全限定名称 WriteoffOfFinancingCosts

您可能已经注意到这是多么复杂。事实上,这就是为什么值得使用 XBRL 处理器的原因,它会为您完成所有这些工作。

,

@Ghislain Fourny:非常感谢。我很高兴知道我并不是因为发现情况复杂而疯狂。现在知道链接库标签是“自由选择的”,这是我想出的特定 BeautifulSoup 解决方法,以防有人感兴趣:

labeldict = {}
resp = requests.get(calcurl,headers = headers)
ctext = resp.text
soup = BeautifulSoup(ctext,'lxml')
tags = soup.find_all()
for tag in tags:
    if tag.name == 'link:loc':
        if tag.has_attr('xlink:href') and tag.has_attr('xlink:label'):
            href = tag['xlink:href']
            firstsplit = href.split('#')[1] ## gets the part of the link after the pound symbol
            value = firstsplit.split('_')[1] ## gets the part after the underscore
            key = tag['xlink:label']
            labeldict[key] = value

这会产生一个字典,其中键是“loc_Phil”类型的标签名称,值是普通的概念名称,例如labeldict['loc_PHILWriteoffOfFinancingCosts'] = 'WriteoffOfFinancingCosts' 这假设 xsd 链接将始终遵循“...#..._concept”的格式。我没有发现任何不遵循该格式的内容,但这不能保证。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。