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