name ::= (domain "/")? path domain ::= host (":" port-number)? host ::= domain-name | IPv4address | "[" IPv6address "]" /* see https://www.rfc-editor.org/rfc/rfc3986#appendix-A */ domain-name ::= domain-component ("." domain-component)* domain-component ::= ([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]) port-number ::= [0-9]+ path-component ::= [a-z0-9]+ (separator [a-z0-9]+)* path ::= path-component ("/" path-component)* separator ::= [_.] | "__" | "-"+