This is only a proposal. This is not implemented, and it may never be implemented.

URI

Hierarchical URI syntax:

[scheme:][//authority][path][?query][#fragment]

Service Names

Absolute Service Name:

[artifact]serviceName

Artifact:

[scheme:][//authority][path]

Service Name:

[?key=value[,key=value]*]#shortName

An absolute name must provide at least a fragment and is encouraged to use an valid encoded artifact.

Must be able to turn artifact URI into an Artifact object.
We need to be able to compare artifacts based on version so we don't end up with the same artifact in memory multiple times. Some resolution rules need to be able to determine which artifact is "newer". This form will only be used within the Configuration, Repository, Artifact Resolver, and Artifact Manager.

Fragment part of service name must be unique within the Artifact.
This allows us to have a single well known short string to refer to a service. As a corollary, the query part is not considered in equals or hashCode.

Query part of service name contains extra identification data for the service.
This provides a way to supply the extra naming metadata which is expected in J2EE Management specification such as j2eeType and parent types without forcing a J2EE paradigm on the naming system. The order of keys is not significant, but the conical form is for the keys to be sorted by java.lang.String.compareTo(String).

Service Name Query

Full query:

[artifactQuery]serviceQuery

Artifact Query:

[vendorId]/[artifactId]/[version]/[type]

An artifact query matches an artifact if all of the supplied parts of the query match the related parts of the artifact.

Service Query:

[?key=value[,key=value]*][#shortName]

A service query matches a service name if the service name has all of the specified key/vale pairs, and if the optional shortName matches the shortName of the shortName of the service name.

Default Artifact Encoding

[vendorId]/artifactId/[version]/[type]

Artifact only uses the path part of the name.

Only the artifactId part of the artifact is required. The others are set to an empty string value.