From: Neil W. <neilw@ActiveState.com> - 2002-04-10 03:59:02
|
Hi guys, In \S 4.3.1: A YAML stream may contain several independent YAML documents. A document header line is used to separate documents. This line must start with a document separator - '--' followed by a series of non-space characters. The same separator line must be used in all the document headers throughout the stream. If no explicit header line is specified at the start of the stream, the parser should behave as if a header line containing '--- #YAML:1.0 #TAB:NONE' was specified. Does that mean that the following stream is illegal? # note: no first separator. foo: bar --A-Separator #YAML:1.0 baz: com Interpreting the spec literally, I would expect this example to cause an "inconsistent document header" error, since the implicit separator ("-") is not the same as the explicit one ("A-Separator"). To be clear: the spec clearly states it's an error... I'm just checking to be sure. Pedanticly yours, Neil |
From: Clark C . E. <cc...@cl...> - 2002-04-10 04:32:03
|
On Tue, Apr 09, 2002 at 08:58:45PM -0700, Neil Watkiss wrote: | Does that mean that the following stream is illegal? | | # note: no first separator. | foo: bar | --A-Separator #YAML:1.0 | baz: com Yes, Illegal. However, when we added the explicit indent (#133), we noted that this separator concept was no longer necessary and I thought that we agreed to discontinue this construct. --- | This is document is a scalar but it cannot contain --- at the start of the line or it would signify another document. --- |1 This is document is also a scalar, without any leading spaces. However, unlike the former, --- can be used within the content. And since the ability to express this stupid exception was the reason for the whole "separator" thingy, we could safely drop the 'feature'. Best, Clark |
From: Neil W. <neilw@ActiveState.com> - 2002-04-10 04:54:29
|
Clark C . Evans [10/04/02 00:36 -0400]: > On Tue, Apr 09, 2002 at 08:58:45PM -0700, Neil Watkiss wrote: > | Does that mean that the following stream is illegal? > | > | # note: no first separator. > | foo: bar > | --A-Separator #YAML:1.0 > | baz: com > > Yes, Illegal. Good. > However, when we added the explicit indent (#133), > we noted that this separator concept was no longer necessary and > I thought that we agreed to discontinue this construct. What construct? Document separators? That wasn't the answer I was expecting. > --- | > This is document is a scalar but it > cannot contain --- at the start of the > line or it would signify another document. > --- |1 > This is document is also a scalar, without any > leading spaces. However, unlike the former, > --- can be used within the content. And since > the ability to express this stupid exception was > the reason for the whole "separator" thingy, we > could safely drop the 'feature'. In the above example, you don't need the '1' anyway. You've indented the block by a non-zero amount, and document separators always occur in column zero. So this stream is legal (albeit confusing): --- #YAML:1.0 | --- #YAML:1.0 ] A YAML stream stored inside another YAML document. How does this compared to escaping XML content in XML? Very Well! --- #YAML:1.0 | No explicit indent is needed because we're at column 1 here. There's no ambiguity, to my eye. Leading space in a nested leaf is part of the indentation, unless: a) it's explicitly marked as content using the indentation marker you mentioned; or, b) it's indented more than the first line. Later, Neil |
From: Clark C . E. <cc...@cl...> - 2002-04-10 05:14:12
|
On Tue, Apr 09, 2002 at 09:54:16PM -0700, Neil Watkiss wrote: | > However, when we added the explicit indent (#133), | > we noted that this separator concept was no longer necessary and | > I thought that we agreed to discontinue this construct. | | What construct? Document separators? --ArbitrarySeparators should have been removed from the specification as a part of the flexible indentation patches. We had --Arbitrary when we had a strict one space per indentaion level rule. With that rule we needed a way to allow content having -- in column zero. This hack was borrowed from MIME and accomplishes this. Fortunately, since we now have flexible indentation it can go away! | > --- |1 | > This is document is also a scalar, without any | > leading spaces. However, unlike the former, | > --- can be used within the content. And since | | In the above example, you don't need the '1' anyway. You've indented the | block by a non-zero amount, and document separators always occur in column | zero. So this stream is legal (albeit confusing): Right. I didn't demonstrate what I wanted to show. The following *was* legal YAML in November, but as soon as we added flexible indentation it became illegal, and it is now illegal: --OldStyle | This is an old style that is now illegal due to inconsistent indenting. The OldStyle is needed so that a -- separator can go in column one of the content. Note, under the OldStyle this sentance has one leading space. Right now, you'd write this as... -- |1 This is a new style version of a similar thing, that uses |1 to avoid inconsistent indenting. Also it allows -- separator at column one of the content. Does this make sense? Anyway... I'm absolutely certain of it now... the --OldStyle is a blast from the past and should have been removed. My apologies for not keeping tabs on the spec! As I recall, the _only_ document separator should be "---" in column one. That's it, the --OldStyle isn't needed anymore as you so clearly detail below... | --- #YAML:1.0 | | --- #YAML:1.0 ] | A YAML stream stored inside another YAML document. | | How does this compared to escaping XML content in XML? Very Well! | --- #YAML:1.0 | | No explicit indent is needed because we're at column 1 here. Right. | There's no ambiguity, to my eye. Leading space in a nested leaf | is part of the indentation, unless: | | a) it's explicitly marked as content using the indentation marker you | mentioned; or, | b) it's indented more than the first line. ;) Clark |
From: Neil W. <neilw@ActiveState.com> - 2002-04-10 05:30:50
|
Clark C . Evans [10/04/02 01:18 -0400]: > Does this make sense? Anyway... I'm absolutely certain of it > now... the --OldStyle is a blast from the past and should have > been removed. My apologies for not keeping tabs on the spec! > As I recall, the _only_ document separator should be "---" > in column one. That's it, the --OldStyle isn't needed anymore Great! That simplifies life! Later, Neil |
From: Clark C . E. <cc...@cl...> - 2002-04-10 15:50:25
|
On Tue, Apr 09, 2002 at 08:58:45PM -0700, Neil Watkiss wrote: | # note: no first separator. | foo: bar | --A-Separator #YAML:1.0 | baz: com According to the current spec, this is illegal, but not in the way you may think. Its illegal beacuse the map key "--A-Separator #YAML" is lacking quotes. Thus, oren is correct that the following is OK with the current spec... the whole purpose of the --HACK thingy *was* to allow an embedded -- at column 0 since we didn't have flexible indenting when it was added. --HACK | -- | This is just a text block -- | and not two documents --HACK | This is the second document. ... In any case, I don't like it. I think that the feature has limited applicability and is confusing. The above is definately not "readable" via the printer test... Also, imagine someone typing in Neil's first example, and getting an error message: "unquoted map key on line #3" Icky. ;( Clark |
From: Neil W. <neilw@ActiveState.com> - 2002-04-10 16:29:46
|
Clark C . Evans [10/04/02 11:54 -0400]: > On Tue, Apr 09, 2002 at 08:58:45PM -0700, Neil Watkiss wrote: > | # note: no first separator. > | foo: bar > | --A-Separator #YAML:1.0 > | baz: com > > According to the current spec, this is illegal, but > not in the way you may think. Its illegal beacuse > the map key "--A-Separator #YAML" is lacking quotes. Aha! Wrong. The `inline_keyed_entry' production requires at least one space between `keyed_entry_separator' and `inline_node', and there is no space before '1.0' in this example. So the only possible match for `#YAML:1.0' is as a document directive. Otherwise, the following becomes ambiguous: --- foo: bar --- #YAML:1.0 baz: com That's an ambiguity we can live without. > Thus, oren is correct that the following is OK with > the current spec... the whole purpose of the --HACK > thingy *was* to allow an embedded -- at column 0 since > we didn't have flexible indenting when it was added. > > --HACK | > -- | > This is just a text block > -- | > and not two documents > --HACK | > This is the second document. > ... Okay, I believe you all. But... > In any case, I don't like it. I think that the feature > has limited applicability and is confusing. The above is > definately not "readable" via the printer test... Also, > imagine someone typing in Neil's first example, and getting > an error message: "unquoted map key on line #3" Icky. ... I don't like it either. I'll wait for the verdict. Later, Neil |