验证C#中的XBRL和iXBRL文件
Contents
[
Hide
]
验证 C# 中的 XBRL 实例文件
XBRL 实例、XBRL 链接库和 XBRL 分类法模式必须符合XBRL 规格书.为了验证这些,Xbrl实例类提供了证实()方法。
以下 C# 代码片段演示了如何验证 XBRL 实例文档。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
XbrlDocument document = new XbrlDocument(XbrlFilePath + @"IdScopeContextPeriodStartAfterEnd.xml"); | |
XbrlInstanceCollection xbrlInstances = document.XbrlInstances; | |
XbrlInstance xbrlInstance = xbrlInstances[0]; | |
xbrlInstance.Validate(); | |
if(xbrlInstance.ValidationErrors.Count > 0) | |
{ | |
List<ValidationError> validationErrors = xbrlInstance.ValidationErrors; | |
} |
验证 C# 中的 iXBRL 文件
这iXBRL 规格书定义了许多验证规则。为了验证 iXBRL 文件,内联Xbrl文档类提供了证实()方法。
以下 C# 代码片段演示了验证 iXBRL 实例文档。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
InlineXbrlDocument document = new InlineXbrlDocument(XbrlFilePath + @"account_1.html"); | |
document.Validate(); | |
if (document.ValidationErrors.Count > 0) | |
{ | |
List<ValidationError> validationErrors = document.ValidationErrors; | |
} |
验证错误代码
在枚举中验证错误代码,为每个验证规则定义了验证错误代码。 以下是错误码定义:
- ContextPeriodNoStartTime:上下文周期类型是持续时间,但没有开始日期。
- ContextPeriodNoEndTime:上下文期间类型是持续时间,但没有结束日期。
- ContextPeriodStartAfterEnd:上下文期间类型为持续时间,但结束日期早于开始日期。
- ContextInstantNoTime:上下文期间类型是即时的,但没有即时日期。
- ContextScenarioXbrlNamespace:上下文场景不能有 XBRL 命名空间节点。
- ContextScenarioXbrlSubstitutionGroup:上下文场景在 XBRL 命名空间中定义的元素的替换组中不能有元素。
- ContextScenarioEmpty:上下文场景不能为空。
- ContextSegmentXbrlNamespace:上下文段不能有 XBRL 命名空间节点。
- ContextSegmentXbrlSubstitutionGroup:上下文段在 XBRL 命名空间中定义的元素的替换组中不能有元素。
- ContextSegmentEmpty:上下文段不能为空。
- ItemNoContext:项目必须有上下文。
- ItemPeroidTypeConflictWithContext:项目的句点类型与上下文冲突。
- ItemNumericNoUnit:项目是数字,必须有一个单位。
- MonetaryItemNoSingleUnitMeasure:Item 是一种货币类型,必须有一个单一的计量单位。
- MonetaryItemNoISO4217:项目是一种货币类型,必须具有 Iso 4217 样式的单位度量。
- ShareItemNoSingleUnitMeasure:Item 是一个共享类型,必须有一个单一的单位度量。
- ShareItemNoShareUnitMeasure:项目是共享类型并且必须具有 xbrli:shares 单位度量。
- NillItemWithPrecisionOrDecimals:项目为 nil,不得有精度或小数。
- FractionItemWithPrecisionOrDecimals:项目是分数类型,不能有精度或小数。
- NumericItemWithBothPrecisionAndDecimals:项目是数字类型,不能同时具有精度和小数。
- NumericItemWithoutPrecisionOrDecimals:项目是数字类型,必须具有精度或小数。
- NonNumericItemWithPrecisionOrDecimals:项目不是数字类型,不能有精度或小数。
- FootnoteArcFromNotFound:无法从 Loc 找到脚注弧。
- FootnoteArcToNotFound:无法找到到脚注的脚注弧。
- DefinitionArcFromNotFound:无法从 Loc 找到定义弧。
- DefinitionArcToNotFound:无法找到到 Loc 的定义弧。
- EssenceAliasDefinitionArcDifferentType: Essence-alias Definition arc有不同的类型。
- EssenceAliasDefinitionArcDifferentPeriodType: Essence-alias Definition arc 有不同的periodTypes。
- EssenceAliasDefinitionArcDifferentBalance:本质别名定义弧有不同的平衡。
- CalculationArcFromNotFound:无法从 Loc 找到计算弧。
- CalculationArcToNotFound:无法找到 Loc 的计算弧。
- LabelArcFromNotFound:无法从 Loc 找到 Lable 弧。
- LabelArcToNotFound:无法找到到 Loc 的 Lable 弧。
- PresentationArcFromNotFound:无法从 Loc 中找到 Presentation arc。
- PresentationArcToNotFound:无法找到到 Loc 的 Presentation arc。
- ReferenceArcFromNotFound:无法从 Loc 找到参考弧。
- ReferenceArcToNotFound:无法找到 Loc 的参考弧。
标准验证错误消息示例
上面是一个XBRL实例,它定义了context“cd1”,这个context的周期类型是duration,它的开始日期是2002-03-31,结束日期是2001-03-31,所以结束日期早于开始日期。在 XBRL 规范的第 4.7.2 章中,它定义了验证规则:“endDate 必须指定或暗示一个时间点晚于相应 startDate 的指定或暗示时间点”。根据此规则,此 XBRL 实例无效。
验证 XBRL 并输出标准错误消息
以下代码验证 XBRL 实例并输出标准错误消息。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
XbrlDocument document = new XbrlDocument(XbrlFilePath + @"IdScopeContextPeriodStartAfterEnd.xml"); | |
XbrlInstanceCollection xbrlInstances = document.XbrlInstances; | |
XbrlInstance xbrlInstance = xbrlInstances[0]; | |
xbrlInstance.Validate(); | |
if (xbrlInstance.ValidationErrors.Count > 0) | |
{ | |
foreach(ValidationError validationError in xbrlInstance.ValidationErrors) | |
{ | |
Console.WriteLine("Find validation error:" + validationError.Message); | |
} | |
} |
下图显示了输出:
验证 XBRL 并输出自定义错误消息
以下代码验证 XBRL 实例并输出自定义错误消息。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
XbrlDocument document = new XbrlDocument(XbrlFilePath + @"IdScopeContextPeriodStartAfterEnd.xml"); | |
XbrlInstanceCollection xbrlInstances = document.XbrlInstances; | |
XbrlInstance xbrlInstance = xbrlInstances[0]; | |
xbrlInstance.Validate(); | |
if (xbrlInstance.ValidationErrors.Count > 0) | |
{ | |
foreach (ValidationError validationError in xbrlInstance.ValidationErrors) | |
{ | |
if(validationError.Code == ValidationErrorCode.ContextPeriodStartAfterEnd) | |
{ | |
ContextValidationError contextValidationError = validationError as ContextValidationError; | |
Console.WriteLine("Validation error: end date is before start date in context " + contextValidationError.Object.Id); | |
} | |
else | |
{ | |
Console.WriteLine("Find validation error:" + validationError.Message); | |
} | |
} | |
} |
下图显示了输出:
验证 XBRL 并输出标准错误消息