4

目前我正在尝试区分不同的序列化文本格式。主要在 XBRL、XML、CSV 和 JSON 之间。

我想假设,按步骤检查,如果我们使用解析器解析 XBRL/XML 并返回而没有抛出任何异常,那么它是一个有效的 XML 文档,需要进一步检查以查看该文档是常规 xml 还是xbrl。

如果第一次检查失败,请尝试解析 csv。如果解析 csv 返回异常,请尝试解析为 JSON。如果上述方法均无效,则为无效文档。

这是一种识别文档文本格式类型的特殊方法吗?或者,还有更好的方法?(即读取文档的前几个字节等......)。

谢谢

4

3 回答 3

1

如果您知道 JSON 将是一个对象或数组,并且内容必须是这四个之一......

if(content.charAt(0) == "[" || content.charAt(0) == "{") { 
    // JSON
} else if(content.charAt(0) == "<") {
    if(content.indexOf("xmlns=\"http://www.xbrl.org/2001/instance\"") >= 0) {
        // XBRL
    } else {
        // XML
    }
} else {
    // CSV ?...
    // first remove strings
    var testCSV = content.replace("\"\"", ""); // remove escaped quotes
    testCSV = testCSV.replace(/".*?"/g, ""); // match-remove quoted strings
    var lines = testCSV.split("\n");
    if(lines.length === 1 && lines[0].split(",").length > 1) {
        // only 1 row so we can only verify if there is two or more columns
        // CSV
    } else if(lines.length > 1 && lines[0].split(",").length > 1 && lines[0].split(",").length === lines[1].split(",").length) {
        // we know there's multiple lines with the same number of columns
        // CSV
    }
    // can't be sure what it is
    // ???
}

以上将为您提供合理的确定性。

编辑我还添加了一个快速 CSV 测试。

于 2015-09-08T13:03:22.680 回答
0

XBRL不再被用户视为一种“语言”。XBRL 已成为金融业务文档的语义标准。最初,XML 被公司广泛采用,因为当时甚至不存在 JSON(我们谈论的是 90 年代)。

今天,使用 XML 仅仅是因为它可以创建大量链接数据(通过 XLink、模式和链接库)。但是,您不会停留在 XML 格式中,您可以使用其中任何一种技术来表示 XBRL 文件:XMLJSONCSV

如果您已经有 XBRL-XML 文件,您可以通过免费和开源工具将其转换为 XBRL-JSON 格式 - 例如:https ://youtu.be/Xr6v4jL535w 。

于 2018-06-04T21:48:01.357 回答
0

我想特别说明 XML 和 XBRL 之间的区别。

XML 是一种语法。XML 解析器的任务可能是解析元素,根据模式检查元素,并针对文档结构执行其他语法级别的验证。在大多数情况下,解析 XML 是对文档结构的语法检查。

XBRL 利用 XML 格式,因此所有 XBRL 文档也是 XML 文档。然而,XBRL 规范超越了 XML 解析器,以确保以 XML 格式编码的数据的语义是正确的。例如,XBRL 解析器加载计算链接库(如果已定义),并确保参与计算的数值按照计算链接库的定义正确相加。Gepsio等工具执行此 XBRL 特定的语义检查工作,以确保以 XML 格式编码的数据符合XBRL 规范中定义的所有规则。

XBRL 是针对 XML 编码数据的语义规则。有效的 XBRL 也是有效的 XML,但反过来不一定正确。

于 2018-06-06T13:02:53.357 回答