[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: updated proposed XRI 1.1 ABNF
After some lively discussion and email exchanges, the editor's group has an updated proposed ABNF for XRI 1.1. Apologies for having the discussions off-list, but we felt that we were delving into detail that wouldn't be of interest to the main body of the TC. Now that we have a proposal (with a couple of issues yet to iron out), we'd like to get everyone's feedback. I believe that this ABNF captures all of the requirements that have been agreed to for XRI 1.1 and has also been re-worked to have a parallel structure and naming convention to the 2396bis ABNF. The biggest change that you are likely to notice is the relaxing of the syntax in the path part of the XRI. While we have defined a relatively strict syntax in the authority part (since the resolution specification needs to define semantics around that syntax), the XRI specification doesn't (and, IMHO, shouldn't) say anything about the semantics in the path. Basically, this puts the onus of defining the semantics of the path part to applications that use XRI (such as XDI). This is exactly the same approach that 2396bis takes with respect to the path part of URIs. Issues that have been raised with respect to this ABNF are: 1. Should the "//" be required in all XRI's or is it enough to require the "//" only in URI normal form XRIs? E.g., should we allow "xri://@foo/bar" to also be written as "xri:@foo/bar"? 2. Should multiple xrefs be allowed in a sub-segment in the path? E.g., "xri://@foo/(xref1)abc(xref2)". The current ABNF allows this as I saw no reason to restrict this sort of XRI. 3. Should the names for sub-segment productions in the ABNF have "sub" in them? The relevant productions are named: xri-segment xri-segment-nz ;non-zero xri-segment-nc ;no colon xri-segment-nc-od ;no colon, optional delimiter xri-segment-nc-nx ;no colon, no xref If sub-segments are called out in the prodution names, the last 3 would be renamed to: xri-sub-segment-nc xri-sub-segment-nc-od xri-sub-segment-nc-nx 4. Are the productions that have alternatives hard to understand without explicit grouping using parenthesis. E.g., xri-hier-part. Feedback on these issues and any other topics with respect to the ABNF are welcome. The editor's group hopes to come to agreement on the ABNF this week and so would like as much feedback as we can get. Thanks, Mike <<draft-xri-v1-1-abnf-v3.txt>>
**************** PROPOSED XRI 1.1 ABNF ************************ XRI = [ "xri:" ] xri-hier-part [ "?" xri-query ] [ "#" xri-fragment ] xri-hier-part = ( xri-authority / iri-authority ) [ xri-path-absolute ] / 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 = [ "//" ] ( xref / gcs-char) [xri-segment-nc-od *xri-segment-nc] iri-authority = "//" iauthority xri-path = xri-path-absolute / xri-path-noscheme / ipath-empty xri-path-absolute = "/" [ xri-segment-nz *( "/" xri-segment ) ] xri-path-noscheme = xri-segment-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-segment-nc = ( "*" / "!" ) 1*( xref / xri-achar ) ;non-zero segment with no colon xri-segment-nc-od = [ "*" / "!"] (xref / 1*xri-achar) ;non-zero segment with no colon and optional delimiter xri-segment-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]