实例文档和计算文档之间的XBRL标签名称不同

2024-04-29 00:13:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很可能是很愚蠢的问题,但我被它难住了,希望能得到任何帮助。 我正在尝试使用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”的行项目显示为 ^实例文档中的{}(以及值和上下文) 但在计算链接库中显示为“loc_PHILWriteoffOfFinancingCosts”。 但是这种关系“PHIL:”='loc_PHIL”,在XBRL文件中不是标准的。如何知道将向calculation linkbase中的标记添加哪个前缀,以便(在移除前缀的情况下)将其可靠地绑定回实例文档中的标记? 我可以想出各种各样的解决办法,但这似乎很愚蠢;难道我不能在计算链接库或其他地方查找,以便准确地告诉我添加了什么前缀吗? 作为一些(可能相关的)细微差别:当然,许多文件中的许多标记都有一个类似“us gaap”的前缀,表示us gaap名称空间,但这似乎不能保证计算链接库中的标记因此看起来像“us-gaapAccountsPayableCurrent”,而不是“loc_us-gaapAccountsPayableCurrent”或“us-gaap:AccountsPayableCurrent”或基本模式的其他变体,所有这些,当然,看起来和美女们不一样。 谁能给我指出正确的方向吗


Tags: 文件数据项目实例文档标记secloc
2条回答

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

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

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

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

<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。一些用户依赖于它,但是遵循间接寻址级别,尽管更复杂,但“更安全”:linkbase labelloc_PHILWriteoffOfFinancingCosts->;概念IDPHIL_WriteoffOfFinancingCosts->;概念本地名称WriteoffOfFinancingCosts->;概念的完全限定名PHIL:WriteoffOfFinancingCosts

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

@Ghislain Fourny:非常感谢。我很高兴知道,我并没有因为发现情况复杂而发疯。现在知道linkbase标签是“自由选择”的,下面是我提出的具体的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链接将始终遵循“…#…"概念”的格式。我还没有找到任何不符合这种格式的,但这不是保证

相关问题 更多 >