OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

xri message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Solution for GCS ! ambiguity in ABNF


In doing the final review of the 05 Syntax spec, a solution to the
longstanding issue about the ambiguity of "!" was identified. This email
briefly summarizes the issue and the solution. The proposed change to the
ABNF that fixes it has been closely reviewed by Dave, Chetan, and myself, so
we plan to roll this change into the 06 draft unless anyone has an
objection.

SUMMARY OF THE ISSUE

For simplicities sake, the current ABNF treats "!" the same as the other GCS
characters, when in fact the intent all along has been that unlike the other
GCS characters, "!" should only be followed by a persistent subsegment,
i.e., that as an absolute XRI, you could only have "!!123" and never "!123".
It should be unambiguous that the latter is a relative persistent XRI
subsegment.

However the current ABNF does not enforce this rule, so a relative XRI
starting with "!" is currently ambiguous. As a result in the 05 draft Dave
needed to add a section (2.4.7) that explained that you can't just write
"!123" as a relative subsegment, but instead you need to prefix it with
"./!123" to make sure it's not ambiguous.

Because this is ugly, and because it requires treating relative
!sub-segments differently than relative *sub-segments, the following
solution was identified.

PROPOSED SOLUTION

The solution involves changing six lines of the ABNF, with five of these
changes being just to make room for the one new production that actually
eliminates the ambiguity. Following is a complete analysis.

First, below is the current ABNF from the authority and path sections:

****CURRENT ABNF****

  xri-authority     = gcs-authority / xref-authority 

  gcs-authority     = gcs-char xri-segment

  xref-authority    = xref *xri-subseg

  gcs-char          = "=" / "@" / "+" / "$" / "!"

  xri-path          = xri-path-absolute
                    / xri-path-noscheme
                    / ipath-empty  

  xri-path-absolute = "/" [ xri-segment-nz *( "/" xri-segment ) ]

  xri-path-noscheme = xri-subseg-od-nx *xri-subseg-nc 
		  *( "/" xri-segment )

  xri-segment       = xri-subseg-od *xri-subseg

  xri-segment-nz    = xri-subseg-od-nz *xri-subseg

  xri-subseg        = ( "*" / "!" ) (xref / *xri-pchar)

  xri-subseg-nc     = ( "*" / "!" ) (xref / *xri-pchar-nc)

  xri-subseg-od     = [ "*" / "!" ] (xref / *xri-pchar)

  xri-subseg-od-nz  = [ "*" / "!" ] (xref / 1*xri-pchar)

  xri-subseg-od-nx  = [ "*" / "!" ] 1*xri-pchar-nc

  xri-gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "("
                    / ")" / "*" / gcs-char

***END***

Second, following are the six changed lines of ABNF that would be needed.
Two of them are revisions to current productions (gcs-authority and
xri-gen-delims), two are renamed productions (gcs-char renamed rgcs-char,
and gsc-authority renamed rgcs-authority), and two are new productions
(pgcs-authority and xri-subseg-pt-nz). Note also that "xri-subseg-pt-nz" is
named to match the rest of the "xri-subseg" productions, with the "pt"
standing for "persistent".

Also note that the only changes in the rgcs-char and xri-gen-delims
productions are to move "!" out of the rgcs-char because of its special
treatment vs. the other reassignable GCS characters.

****LINES THAT WOULD CHANGE IN THE REVISED ABNF****

  gcs-authority     = pgcs-authority / rgcs-authority    

  pgcs-authority    = "!" xri-subseg-pt-nz *xri-subseg

  xri-subseg-pt-nz  = "!" (xref / 1*xri-pchar)

  rgcs-authority    = rgcs-char xri-segment

  rgcs-char         = "=" / "@" / "+" / "$"

  xri-gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "("
                    / ")" / "*" / "!" / rgcs-char

****END****

The net effect of this change is simply to separate out the special
restriction on using "!" as a GCS character. Because of the new
pgcs-authority production, it is no longer ambiguous that a single bang
represents a relative persistent subsegment, i.e., it is fine to write
"!123".

To see it all in context, following is the fully revised ABNF for this set
of productions (again, only the six lines above have changed):

****FULL REVISED ABNF****

  xri-authority     = gcs-authority / xref-authority 

  gcs-authority     = pgcs-authority / rgcs-authority    

  pgcs-authority    = "!" xri-subseg-pt-nz *xri-subseg

  rgcs-authority    = rgcs-char xri-segment

  xref-authority    = xref *xri-subseg

  rgcs-char         = "=" / "@" / "+" / "$"

  xri-path          = xri-path-absolute
                    / xri-path-noscheme
                    / ipath-empty  

  xri-path-absolute = "/" [ xri-segment-nz *( "/" xri-segment ) ]

  xri-path-noscheme = xri-subseg-od-nx *xri-subseg-nc 
		  *( "/" xri-segment )

  xri-segment       = xri-subseg-od *xri-subseg

  xri-segment-nz    = xri-subseg-od-nz *xri-subseg

  xri-subseg        = ( "*" / "!" ) (xref / *xri-pchar)

  xri-subseg-nc     = ( "*" / "!" ) (xref / *xri-pchar-nc)

  xri-subseg-od     = [ "*" / "!" ] (xref / *xri-pchar)

  xri-subseg-od-nz  = [ "*" / "!" ] (xref / 1*xri-pchar)

  xri-subseg-od-nx  = [ "*" / "!" ] 1*xri-pchar-nc

  xri-subseg-pt-nz  = "!" (xref / 1*xri-pchar)

  xri-gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "("
                    / ")" / "*" / "!" / rgcs-char

***END***

=Drummond 




[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]