Re: Next YAML: drop equality definition
Oren Ben-Kiki <[email protected]> Mon, 7 Mar 2016 21:44:06 +0200
| Newsgroups | gmane.text.yaml.general |
|---|---|
| Message-ID | <CADJiDhstJE4ATNwbrxt-U1Yem38Sg7_dyk6RKr7L1kHz3e698Q@mail.gmail.com> |
Yes, I see layer 0 as being the "physical layer" - bytes in the file, which need to be converted to code points so that layer 1, the "presentation layer" can parse/tokenize/scan it. This is consistent with section 3 of the spec. On Mon, Mar 7, 2016 at 9:33 PM, Ingy dot Net <[email protected]> wrote: > Thanks Oren, > > I'll try to make all of this clear in the YAML Developers Guide. I can > start by making a document that declares the layers and what properties > apply and such. Then we can have more precise and targeted arguments. :) > > My main addition is that the reader/writer transforms between your layer 0 > and 1 are responsible for transforming between a unicode encoding and a > stream of unicode code point integers. Do you agree? > > Ingy > > On Mon, Mar 7, 2016 at 10:54 AM, Oren Ben-Kiki <[email protected]> wrote: > >> This has been a long thread... >> >> The way I see it: The spec is what it is :-) >> >> Using the layered approach to describe YAML processing, then: >> >> Layer 0 is the text file (Unicode encoding etc.). It doesn't do anything. >> >> Layer 1 is the parser/scanner/grammer/etc. It doesn't do duplicate key >> detection. It does provide key order. It provides indentation levels, and >> the way strings are wrapped in lines, and how characters are quoted, and >> lots of other "presentation" details. It can be streaming. YamlReference is >> an example. >> >> Layer 2 is building an abstract node graph (with either some or all of >> the nodes having resolved tags). It _need not_ preserve key order. It _need >> not_ preserve identity of scalars. It _may_ do duplicate key detection, but >> if it does it _must_ do so in a way that ensures "no false positives", that >> is, it may _only_ flag keys as duplicate if the application _must_ consider >> them equal, given the YAML data model (thanks to Osamu for finding a gap in >> the definition of this data model). >> >> Layer 3 is the application native data structures. They _must not_ depend >> on scalar identity. They _must not_ depend on key order in a mapping. They >> _must not_ depend on duplicate keys in a mapping. You can have key order >> and duplicate keys in an !!omap or something like that. >> >> A concrete system can work at level 0 only (e.g., re-encode a YAML file >> from utf-8 to utf-32be). Or level 0/1 only (e.g., a YAML pretty-printer). >> Or level 0/1/2 only (e.g., a ypath tool for extracting specific fragments >> from a document). Or level /0/1/2/3 (a full application). All are valid. >> Each one uses a different (related) data model. >> >> Much of the confusion in this very long thread is due to people applying >> the restrictions or data model of a level X to another level Y where they >> do not apply. Also, confusing between what is _allowed_ and what is >> _required_ in each level. >> >> The above rules allow _control_ over the interoperability of YAML data >> between systems. Note - "control", not "guarantee". Nothing can "guarantee" >> interoperability between the native data types of completely unrelated >> platforms. >> >> The rules also try to minimize the "surprise" people may feel when >> learning on how the application actually interprets the data. >> >> Sometimes this means that less-common data needs to be serialized with a >> bit more syntax (e.g., !!omap notation vs. !!map notation). Note the fact >> we _require_ the use of a less-streamlined syntax (1) does not _prevent_ us >> from being able to serialize "anything at all" into YAML and (2) does not >> necessarily reduce legibility - in fact, it arguably increases. >> >> Now, you can break any of the above rules, with the understanding that by >> doing so you are stepping outside of what YAML provides. In this case your >> system may produce unexpected results if valid YAML processors are applied >> to the data, and will "surprise" people who expect YAML behavior. So, while >> we can't prevent people from doing whatever they want - this is a free >> universe - we can require that people doing such such things will not say >> "this is a valid YAML system". >> >> BTW: The reason that tags can't apply to different kinds of nodes is due >> to the identity issue. Collection identity is guaranteed by YAML. Scalar >> identity is not. Applying the same tag to both raises some sticky issues. >> That said, we may be able to relax this by using careful wording >> (especially given the gap Osamu has found). I'm not certain it is a problem >> in practice, though. >> >> So... "it is what it is". I hope the above helps explain why. >> >> Oren. >> >> >> ------------------------------------------------------------------------------ >> Transform Data into Opportunity. >> Accelerate data analysis in your applications with >> Intel Data Analytics Acceleration Library. >> Click to learn more. >> http://makebettercode.com/inteldaal-eval >> _______________________________________________ >> Yaml-core mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/yaml-core >> >> > ------------------------------------------------------------------------------ Transform Data into Opportunity. Accelerate data analysis in your applications with Intel Data Analytics Acceleration Library. Click to learn more. http://makebettercode.com/inteldaal-eval _______________________________________________ Yaml-core mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/yaml-core