| This article needs additional citations for verification. Please help improve this article by adding reliable references. Unsourced material may be challenged and removed. (August 2009) |
This article is a comparison of data serialization formats, different ways to convert complex objects to sequences of bits. It does not include markup languages used exclusively as document file formats.
Contents |
Overview
| Name | Creator/Maintainer | Based on | Standardized? | Specification | Binary? | Human-readable? | Can store relational data? | Schema? | Standard APIs |
|---|---|---|---|---|---|---|---|---|---|
| ASN.1 | ISO, IEC, ITU-T | N/A | Yes | ISO/IEC 8824; X.680 series of ITU-T Recommendations | Yes | Yes (XER) | No | Yes (built-in) | No |
| BSON | MongoDB | JSON | Yes | BSON Specification | Yes | No | No | No | No |
| Comma-separated values (CSV) | RFC author: Yakov Shafranovich |
N/A | Partial (myriad informal variants used) |
RFC 4180 (among others) |
No | Yes | No | No | No |
| JSON | Douglas Crockford | JavaScript syntax | Yes | RFC 4627 | No, but see BSON | Yes | No | Partial (Kwalify, Rx, JSON Schema Proposal) |
No |
| Netstrings | Dan Bernstein | N/A | Yes | netstrings.txt | Yes | Yes | No | No | No |
| OGDL | Rolf Veen | ? | Yes | 1.0 Working draft | Yes (Binary 1.0 Working draft) |
Yes | Yes (Path 1.0 Working draft) |
Yes (Schema WD) |
|
| Property list | NeXT (creator) Apple (maintainer) |
? | Partial | Public DTD for XML format | Yesa | Yesb | ? | ? | Cocoa, CoreFoundation, OpenStep, GnuStep |
| Protocol Buffers | N/A | Partial | Developer Guide: Encoding | Yes | Partiald | No | Yes (built-in) | ||
| S-expressions | Internet Draft author: Ron Rivest |
Lisp, Netstrings | Partial (largely de facto) |
"S-Expressions" Internet Draft | No | Yes | No | No | |
| Thrift | Facebook (creator) Apache (maintainer) |
N/A | No | Original whitepaper | Yes | Partialc | No | Yes (built-in) | |
| eXternal Data Representation | IETF | N/A | Yes | RFC 4506 | Yes | ? | ? | Yes | ? |
| XML | W3C | SGML | Yes | W3C Recommendations: 1.0 (Fifth Edition) 1.1 (Second Edition) |
Partial (Binary XML) |
Yes | Yes (XPointer, XPath) | Yes (XML schema) | DOM, SAX, XQuery, XPath |
| YAML | Clark Evans, Ingy döt Net, and Oren Ben-Kiki | XML, C, Python, Perl, Email | Yes | Version 1.2 | No | Yes | Yes | Partial (Kwalify, Rx), (built-in language type-defs) | No |
- a. ^ The current default format is binary.
- b. ^ The "classic" format is plain text, and an XML format is also supported.
- c. ^ Theoretically possible due to abstraction, but no implementation is included.
- d. ^ The primary format is binary but a text format is available.[1]
Syntax comparison of human-readable formats
| Format | Null | Boolean true | Boolean false | Integer | Floating-point | String | Array | Associative array/Object |
|---|---|---|---|---|---|---|---|---|
| CSVb | nulla(or an empty element in the row)a |
1atruea |
0afalsea |
685230-685230a |
6.8523015e+5a |
A to Z"We said, ""no""." |
true,,-42.1e7,"A to Z" |
42,1 A to Z,1,2,3 |
| Netstringsc | 0:,a4:null,a |
1:1,a4:true,a |
1:0,a5:false,a |
6:685230,a |
9:6.8523e+5,a |
6:A to Z, |
29:4:true,0:,7:-42.1e7,6:A to Z,, |
41:9:2:42,1:1,,25:6:A to Z,12:1:1,1:2,1:3,,,,a |
| JSON | null |
true |
false |
685230-685230 |
6.8523015e+5 |
"A to Z" |
[true, null, -42.1e7, "A to Z"] |
{42: true, "A to Z": [1, 2, 3]} |
| OGDL[verification needed] | nulla |
truea |
falsea |
685230a |
6.8523015e+5a |
"A to Z"'A to Z'NoSpaces |
true null -42.1e7 "A to Z"
|
42 true "A to Z" 1 2 3 42 true "A to Z", (1, 2, 3) |
| Property list (plain text format)[2] |
N/A | <*BY> |
<*BN> |
<*I685230> |
<*R6.8523015e+5> |
"A to Z" |
( <*BY>, <*R-42.1e7>, "A to Z" ) |
{
"42" = <*BY>;
"A to Z" = ( <*I1>, <*I2>, <*I3> );
}
|
| Property list (XML format)[3][4] |
N/A | <true /> |
<false /> |
<integer>685230</integer> |
<real>6.8523015e+5</real> |
<string>A to Z</string> |
<array>
<true />
<real>-42.1e7</real>
<string>A to Z</string>
</array>
|
<dict>
<key>42</key>
<true />
<key>A to Z</key>
<array>
<integer>1</integer>
<integer>2</integer>
<integer>3</integer>
</array>
</dict>
|
| S-expressions | NILnil |
T#tetrue |
NIL#fefalse |
685230 |
6.8523015e+5 |
abc"abc"#616263#3:abc{MzphYmM=}|YWJj| |
(T, NIL, -42.1e7, "A to Z") |
((42 T) ("A to Z" (1 2 3))) |
| YAML | ~nullNullNULL[5] |
yYyesYesYESonOnONtrueTrueTRUE[6] |
nNnoNoNOoffOffOFFfalseFalseFALSE[6] |
685230+685_230-685230024722560x_0A_74_AE0b1010_0111_0100_1010_1110190:20:30[7] |
6.8523015e+5685.230_15e+03685_230.15190:20:30.15.inf-.inf.Inf.INF.NaN.nan.NAN[8] |
A to Z"A to Z"'A to Z' |
[y, ~, -42.1e7, "A to Z"]
- y - - -42.1e7 - A to Z |
{"John":3.14, "Jane":2.718}
42: y A to Z: [1, 2, 3] |
| XMLd | <null />a |
<boolean val="true"/>a
|
<boolean val="false"/>a
|
<integer>685230</integer>a |
<float>6.8523015e+5</float>a |
A to Z |
a
<array> <element type="boolean">true</element> <element type="null"/> <element type="float">-42.1e7</element> <element type="string">A to Z</element> </array> |
a
<associative-array>
<entry>
<key type="integer">42</key>
<value type="boolean">true</value>
</entry>
<entry>
<key type="string">A to Z</key>
<value>
<array>
<element type="integer" val="1"/>
<element type="integer" val="2"/>
<element type="integer" val="3"/>
<array>
</value>
</entry>
</associative-array>
|
- a. ^ One possible encoding; the specification document does not specifically give an encoding for this datatype.
- b. ^ The RFC CSV specification only deals with delimiters, newlines, and quote characters; it does not directly deal with serializing programming data structures.
- c. ^ The netstrings specification only deals with nested byte strings; anything else is outside the scope of the specification.
- d. ^ XML in and of itself is not a data serialization language, but many data serialization formats have been derived from it; as such, there are many different ways, in addition to those shown, to serialize programming data structures into XML.
- e. ^ This syntax is not compatible with the Internet-Draft, but is used by some dialects of Lisp.
Comparison of binary formats
| Format | Null | Booleans | Integer | Floating-point | String | Array | Associative array/Object |
|---|---|---|---|---|---|---|---|
| ASN.1 | |||||||
| Netstrings | 0:, |
True: 1:1,
False: |
|||||
| OGDL Binary | |||||||
| Property list (binary format) |
|||||||
| Protocol Buffers[9] | Variable encoding length signed 32-bit: varint encoding of "ZigZag"-encoded value (n << 1) XOR (n >> 31)
Variable encoding length signed 64-bit: "varint encoding of "ZigZag"-encoded |
floats: little-endian binary32 | UTF-8 encoded, preceded by varint-encoded integer length of string in bytes | ||||
| Thrift (protocol) |
Notes
- ^ http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google.protobuf.text_format.html
- ^ http://www.gnustep.org/resources/documentation/Developer/Base/Reference/NSPropertyList.html
- ^ http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man5/plist.5.html
- ^ http://developer.apple.com/mac/library/documentation/CoreFoundation/Conceptual/CFPropertyLists/Articles/XMLTags.html#//apple_ref/doc/uid/20001172-CJBEJBHH
- ^ "Null Language-Independent Type for YAML™ Version 1.1". YAML.org. 2005-01-18. http://yaml.org/type/null.html. Retrieved 2009-09-12.
- ^ a b "Boolean Language-Independent Type for YAML™ Version 1.1". YAML.org. Clark C. Evans. 2005-01-18. http://yaml.org/type/bool.html. Retrieved 2009-09-12.
- ^ "Integer Language-Independent Type for YAML Version 1.1". YAML.org. Clark C. Evans. 2005-02-11. http://yaml.org/type/int.html. Retrieved 2009-09-12.
- ^ "Floating-Point Language-Independent Type for YAML™ Version 1.1". YAML.org. Clark C. Evans. 2005-01-18. http://yaml.org/type/float.html. Retrieved 2009-09-12.
- ^ http://code.google.com/apis/protocolbuffers/docs/encoding.html
References
This entry is from Wikipedia, the leading user-contributed encyclopedia. It may not have been reviewed by professional editors (see full disclaimer)




