From: Clark C. E. <cc...@cl...> - 2004-09-02 18:51:19
|
Hello Tim. This belongs in a FAQ. ;) One of the express goals of YAML is to have a very simple set of 'core' data types: - a map (unordered list of keys to values) - a list (ordered list of values) - and scalar. These three things have a direct representation in YAML; all other types have to be 'simulated' as permutations of these items plus tags. While we could have included !omap in this 'assembler', it would make things more complicated for simple cases, any generic API or schema language would then have to worry about omaps as well as maps, lists, and scalars. There are a few possible representations: - list of maps, where each map has only one pair - list of lists, where the first item in each list is a key, and the second item is a value - a mapping, plus a list of keys We chose a list of maps beacuse it expressed the intent the best, its clearly ordered (witness the -). ... Q: Why didn't we just use a map syntax? Afterall, the keys in the file are ordered, arn't they? A: Well, most mappings in YAML arn't ordered. So someone reading the YAML file is free to "reorder" the keys without having to worry about it 'changing' the document. A: If you required the mapping syntax to be 'ordered', then all native language bindings would have to try to 'preserve' the order, since it is considered significant. This would not allow the useage of native hashtables in the typical case. In short, it gets ugly if you try to bend the rules. The line between what is in the syntax file gets blurry... do you report, for example, which style of list was used? If an application used this distinction to drive processing, then one could not hope to have unversal "YAML" editors... in the extreme case, the editor would have to find a schema file to know what's important and what isn't -- the appraoch SGML took. Q: Why not just fix the information model, people can always discard the order if they don't want it A: The original goal of YAML was to provide a nice syntax to represent sound, commonly used data structures like hashtables, records, lists, etc. If we modified the model to have omaps, we'd be requiring most languages to have an ordered dictinoary. Python and Perl don't have ordered dictionaries. Classes in Java and other OO languages also arn't ordered. So, to keep with the primary goal, we're sticking with a mapping. A: Further, the two collections, lists and mappings, happen to be functions with very well defined characteristics. Very nice schema, path, and transformation utilities can be made if all collections in YAML remain functions. An ordered map is not a function... it's a monkeywrench. I hope this helps. A note to anyone out there -- this point is _not_ open for debate. It is clearly stated in the specification, it is a pillar design decision, if you don't like it, start your own language. Sincerely Yours, Clark |