[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]