区分XBRL,XML,CSV和JSON

时间:2015-09-08 08:06:20

标签: json xml algorithm csv xbrl

目前,我试图区分不同的序列化文本格式。主要介于XBRL,XML,CSV和JSON之间。

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

如果第一次检查失败,请尝试解析csv。如果解析csv会返回异常,请尝试解析为JSON。如果以上都不起作用,那么它就是无效的文件。

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

感谢

3 个答案:

答案 0 :(得分: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测试。

答案 1 :(得分:0)

XBRL 并未被视为&#34;语言&#34;再由用户提供。 XBRL已成为金融业务文档的语义标准。最初,XML被公司广泛采用,因为那时JSON甚至不存在(我们谈论的是90年代)。

今天,使用XML只是因为它创建了大量链接数据(通过XLink,Schemas和Linkbases)。但是,您不会使用XML格式,您可以使用此技术中的任何一种来表示XBRL文件:XMLJSONCSV

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

答案 2 :(得分:0)

我想专门解决XML和XBRL之间的区别。

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

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

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