function
| Library: URI handling (OMURI) Import : omuri.xmd | Returns: indication if the uri is valid | 
export switch function
   parse      value      string uri
         into write-only string uri-components
 Function uri.parse parses the argument URI and stores its components into the uri-components
        argument. uri-components is cleared first. It must be a variable-size shelf, or OmniMark will report a
        program error otherwise.
      
 If the uri argument is a well-formed URI, uri.parse returns true and fills the
        uri-components shelf with its components. Each component is corresponding to the BNF productions
        presented in RFC 2396, appendix A. The following keys can be returned:
        
scheme
          
absolute URI
          
relative URI
          
opaque part
          
absolute path
          
network path
          
registry name
          
query
          
user
          
host name
          
IPv4 address
          
IPv6 address
          
port
        
 Hex-encoded characters in the parsed URI appear decoded in all uri-components shelf item values,
        except in absolute URI and relative URI where they remain encoded. For
        example, the output of the following program:
import "omuri.xmd" prefixed by uri. process local string components variable assert uri.parse "file://localhost/C:/My%%20Documents" into components repeat over components as c output key of c || ": %"" || c || "%"%n" againwould be
host name: "localhost" absolute path: "/C:/My Documents" network path: "//localhost/C:/My Documents" scheme: "file" absolute URI: "file://localhost/C:/My%20Documents"
 If you only want to validate a URI string and don't need its parsed components, you can specify an anonymous
        shelf literal as the uri-components argument:
output "Malformed URI: " || my-URI unless uri.parse my-URI into { }