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: RE: [xri] updated proposed XRI 1.1 ABNF


Attached is an updated version of the 1.1 ABNF.  A number of issues were raised and discussed on the editor's call yesterday.  The new ABNF addresses all but one of those issues.  To summarize, the issues (and their resolutions) were as follows.

1.  Concern about allowing the "//" at the beginning of an XRI to be optional.  Resolution: "//" is never optional.  Absolute XRIs begin with "xri://" or with either an xref or gcs character.

2.  [This is the issue that is still open.]  Should multiple xrefs and characters be allowed to be mixed in a subsegment in the path (the part of an XRI after the first "/" and before a fragment or query)?  E.g., xri://@foo/(bar)abc(xyz).  The issue at stake here is should the path be left as flexible and loosely-defined as possible, or should the XRI specification make stronger statements about the syntax and semantics of segments or sub-segments in the path (and what should that syntax and semantics be).  

3.  Should production names that refer to sub-segments have "sub" in their names or is it ok to just call them "segment" productions?  Resolution: replace "segment" in the appropriate productions with "subseg".

4.  Support for authority-less XRIs.  E.g., xri:/foo.  Resolution: Remove support for authority-less XRIs.

5.  Should we follow 2396bis and disallow "[" and "]" in the query and fragment productions? Resolution: Follow 2396bis.

Two errors were also found in the ABNF and have been corrected.  The first allowed an XRI authority that started with an xref to be followed by arbitrary characters (e.g., xri://(@foo)abc).  The second allowed a subsegment in an XRI authority to be composed of an arbitrary number of characters and xrefs (e.g., xri://@foo.(@bar)abc(@xyz)def).  This second error is related to issue number 2 above, but such behavior was never supposed to be allowed in the authority part of an XRI.

Mike

**************** PROPOSED XRI 1.1 ABNF ************************


  XRI               = [ "xri://" ] xri-hier-part [ "?" xri-query ] [ "#" xri-fragment ]
  
  xri-hier-part     = ( xri-authority / iauthority ) [ xri-path-absolute ]
                    / ipath-empty
  
  XRI-reference     = XRI 
                    / relative-XRI
  
  absolute-XRI      = [ "xri:" ] xri-hier-part [ "?" xri-query ]
  
  relative-XRI      = xri-path [ "?" xri-query ] [ "#" xri-fragment ]

  xri-authority     = xri-auth-xref
                    / xri-auth-gcs

  xri-auth-xref     = xref *xri-subseg-nc

  xri-auth-gcs      = gcs-char [xri-subseg-nc-od *xri-subseg-nc]

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

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

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

  xri-segment       = *( xref / xri-pchar / "*" / "!" )    ;path segment including "*" and "!" sub-delims

  xri-segment-nz    = 1*( xref / xri-pchar / "*" / "!" )   ;non-zero path segment

  xri-subseg-nc     = ( "*" / "!" ) ( xref / 1*xri-achar ) ;non-zero segment with no colon

  xri-subseg-nc-od  = [ "*" / "!"] ( xref / 1*xri-achar )  ;non-zero segment with no colon and optional delimiter

  xri-subseg-nc-nx  = ( "*" / "!" ) 1*xri-achar            ;non-zero segment with no colon or xref

  xref              = "(" ( XRI-reference / IRI ) ")"
  
  gcs-char          = "=" / "@" / "+" /  "!" / "$" 
 
  xri-achar         = xri-unreserved / pct-encoded / "&" / ";" / "," / "'"

  xri-pchar         = xri-unreserved / pct-encoded / xri-sub-delims
  
  xri-query         = *( xri-pchar / iprivate / "/" / "?"
                    / ":" / "@" / "(" / ")" / "!" / "$"
                    / "*" / "+" / "=" )
                  
  xri-fragment      = *( xri-pchar / "/" / "?"
                    / ":" / "@" / "(" / ")" / "!" / "$"
                    / "*" / "+" / "=" )
                  
  xri-reserved      = xri-gen-delims / xri-sub-delims

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

  xri-sub-delims    = "&" / ":" / ";" / "," / "'"
  
  xri-unreserved    = unreserved / ucschar

****END OF XRI PRODUCTIONS*****

  IRI               = scheme ":" ihier-part [ "?" iquery ]
                    [ "#" ifragment ]

  scheme            = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

  ihier-part        = "//" iauthority ipath-abempty
                    / ipath-abs
                    / ipath-rootless
                    / ipath-empty
                  
  iauthority        = [ iuserinfo "@" ] ihost [ ":" port ]

  iuserinfo         = *( iunreserved / pct-encoded / sub-delims / ":" )

  ihost             = IP-literal / IPv4address / ireg-name

  IP-literal        = "[" ( IPv6address / IPvFuture  ) "]"

  IPvFuture         = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )

  IPv6address       =                            6( h16 ":" ) ls32
                    /                       "::" 5( h16 ":" ) ls32
                    / [               h16 ] "::" 4( h16 ":" ) ls32
                    / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
                    / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
                    / [ *3( h16 ":" ) h16 ] "::"    h16 ":"   ls32
                    / [ *4( h16 ":" ) h16 ] "::"              ls32
                    / [ *5( h16 ":" ) h16 ] "::"              h16
                    / [ *6( h16 ":" ) h16 ] "::"

  ls32              = ( h16 ":" h16 ) / IPv4address

  h16               = 1*4HEXDIG

  IPv4address       = dec-octet "." dec-octet "." dec-octet "." dec-octet

  dec-octet         = DIGIT                ; 0-9
                    / %x31-39 DIGIT        ; 10-99
                    / "1" 2DIGIT           ; 100-199
                    / "2" %x30-34 DIGIT    ; 200-249
                    / "25" %x30-35         ; 250-255

  ireg-name         = *( iunreserved / pct-encoded / sub-delims )

  port              = *DIGIT
  
  ipath-abempty     = *( "/" isegment )

  ipath-abs         = "/" [ isegment-nz *( "/" isegment ) ]

  ipath-rootless    = isegment-nz *( "/" isegment )

  ipath-empty       = 0<ipchar>

  isegment          = *ipchar

  isegment-nz       = 1*ipchar
  
  iquery            = *( ipchar / iprivate / "/" / "?" )

  iprivate          = %xE000-F8FF / %xF0000-FFFFD / %x100000-10FFFD
  
  ifragment         = *( ipchar / "/" / "?" )
  
  ipchar            = iunreserved / pct-encoded / sub-delims / ":"
                    / "@"
  iunreserved       = ALPHA / DIGIT / "-" / "." / "_" / "~" / ucschar

  pct-encoded       = "%" HEXDIG HEXDIG

  ucschar           = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF /
                    %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD /
                    %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD /
                    %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD /
                    %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD /
                    %xD0000-DFFFD / %xE1000-EFFFD
                  
  reserved          = gen-delims / sub-delims

  gen-delims        = ":" / "/" / "?" / "#" / "[" / "]" / "@"

  sub-delims        = "!" / "$" / "&" / "'" / "(" / ")"
                    / "*" / "+" / "," / ";" / "="

  unreserved        = ALPHA / DIGIT / "-" / "." / "_" / "~"


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