So why do you need to know all of this? As the author of an engine, you presumably care about the argument, i.e. the portion of the request that contains the user input needed by the engine. The tricky part is separating the path from the argument, which can only be done by comparing the request against the match patterns specified in the CMRL document. You need to keep in mind that the the argument depends on the CMRL document. This contrasts with web programming, where everything that follows the "?" symbol in a URL is unambigiously considered to be the argument (and is passed, e.g., to a CGI program).