技术的使用,有时候如同堆积木,就看你怎么堆,大家怎么堆。当生成一个大家都要使用的东西时,应该力求一致的方式处理,是有必要的!
现在需要自定义一种编码标签,里面放置元素的编码。一种做法:
模式文件:
<xsd:appinfo>
<link:arcroleType arcroleURI=http://my-xbrl.com/core/arcrole/codeLabel cyclesAllowed="any" id="codeLabel“>
<link:definition>元素编码标签</link:definition>
<link:usedOn>link:labelArc</link:usedOn>
</link:arcroleType>
</xsd:appinfo>
标签链接库:
<link:labelArc xlink:type="arc" xlink:arcrole="http://my-xbrl.com/core/arcrole/codeLabel" xlink:from="label_XXXX" xlink:to="label_XXXX" xlink:title="label:XXXXX"/>
我认为不合适,基本分析:
(1) 概念和标签的关系是绝对不允许直接循环的。所以:cyclesAllowed="any" 错误;
(2)一般的arcroleURI,应该说明arc两头的对象类型,例如:http://www.xbrl.org/2003/arcrole/concept-label,所以codeLabel表达的信息不完整。
(1)编码标签,是标签的类型,说明当前标签是元素编码,不是其他类型,和标准的起始标签、合计标签、简洁标签等,以及LRR扩展的反向标签negatedLable、净值标签netLabel,属于同一范畴。基于同样的原因定义编码标签,为什么不是自定义roleType,而要去自定义arcroleType呢?
(2)我们认为当需要定义元素(concept、elelemnt)和资源(resource)之间的新的关系类型时,才有必要定义新的arcroleType。通过分析IFRS、以及US的分类标准我们都会发现他们没有定义新的关系类型,尽可能使用LRR、DTR里面的角色类型(roleType)、数据类型,这是各套分类标准,力求兼容的做法。
如果使用自定义arcroleType的方式定义编码标签,请问编码对应的<link:label>使用什么@xlink:role值,里面放一个合计标签,还能清晰说明它是编码标签?这里的arc关系,就是概念-标签的关系,就是“http://www.xbrl.org/2003/arcrole/concept-label ”。
如果非要定义新的arcroleType,arcroleURI的定义方法,也应该才采用一致的方式,说明arc的起点和终点的类型。例如上面的arcroleURI很清楚说明,起点是concept,终点是label。那么arcroleURI应该为:http://my-xbrl.com/core/arcrole/concept-code, 另外在定义一种新的资源类型(code),这个资源保存的就是元素编码。
到目前为止,我们只在formula中使用过自定义arcroleType,和自定义resourceType。那就是断言选项:有些业务规则必须通过、有些业务规则如果失败可以放行。如果必须验证通过的规则失败,公司必须重新提交材料。下面是我们的定义的arcroleType、和resource
<?xml version="1.0" encoding="UTF-8"?>
<!--
为满足formula验证可以按照不同等级处理,为断言设置验证等级,通过generic:arc设置
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:vo="http://xbrl-cn.org/2009/validate-option" xmlns:variable="http://xbrl.org/2008/variable" xmlns:gen="http://xbrl.org/2008/generic" xmlns:link="http://www.xbrl.org/2003/linkbase" targetNamespace="http://xbrl-cn.org/2009/validate-option" elementFormDefault="qualified" attributeFormDefault="qualified">
<import namespace="http://www.xbrl.org/2003/XLink" schemaLocation="http://www.xbrl.org/2003/xl-2003-12-31.xsd"/>
<import namespace="http://xbrl.org/2008/variable" schemaLocation="http://www.xbrl.org/2008/variable.xsd"/>
<annotation>
<appinfo>
<!-- arcrole from an assertion resource to an assertionOption resource -->
<link:arcroleType id="assertion-option" cyclesAllowed="undirected" arcroleURI="http://xbrl-cn.org/arcrole/2009/assertion-option">
<link:definition>assertion validation option</link:definition>
<link:usedOn>gen:arc</link:usedOn>
</link:arcroleType>
</appinfo>
</annotation>
<!-- validate option elements definition -->
<simpleType name="levelType">
<annotation>
<documentation>validation level for assertion or other kind of validation </documentation>
</annotation>
<restriction base="string">
<enumeration value="must"/>
<enumeration value="should"/>
<enumeration value="may"/>
</restriction>
</simpleType>
<simpleType name="variablesType">
<annotation>
<documentation>validation level for assertion or other kind of validation </documentation>
</annotation>
<list itemType="variable:QName"/>
</simpleType>
<attribute name="level" type="vo:levelType" />
<attribute name="messageVariables" type="vo:variablesType" />
<element name="assertionOption" substitutionGroup="variable:resource" id="xml-assertion-option">
<complexType mixed="true">
<complexContent mixed="true">
<extension base="variable:resource.type">
<attribute name="level" use="optional"/>
<attribute name="messageVariables" use="optional"/>
<anyAttribute namespace="##other" processContents="lax"/>
</extension>
</complexContent>
</complexType>
</element>
</schema>