Tim,
This is very nicely laid out.
I have one little suggestion,
In the Product Specifier, can the organization be made as just name-segment ? This avoids the confusion of “/” separator that separates the main things like the orgainization ”/” project with “/” separating the organisation itself.
I mean, replace “.” By “-“ instead of “/” - since “/” is used as the main separation.
Instead of this, where it is hard to say where the org ends and where the project starts, you sure can differentiate it, but
http://repo.apache.org/org/apache/commons-logging
this makes more sense as org / project http://repo.apache.org/org-apache/commons-logging
regards, -Anou
From: "Tim Anderson" <[EMAIL PROTECTED]> Reply-To: <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Subject: [proposal] URI Syntax - v0.2 Date: Fri, 14 Nov 2003 16:39:06 +1100
This version replaces v1.0: http://nagoya.apache.org/eyebrowse/[EMAIL PROTECTED]&ms gNo=308
Overview ========
The key aims of this proposal are: . language and artifact neutrality. It should be possible to support multiple languages and their artifacts, not just java.
. it should be possible for users to easily navigate the repository and locate artifacts, including jars and release distributions. Compare this with the existing approach of separating release distributions (http://www.apache.org/dist/) and jars (http://www.ibiblio.org/maven).
. it should be possible for tools to construct a URI to locate an artifact using a set of known criteria
Artifacts ---------
All files in the repository are artifacts. There is no distinction between artifacts and meta-data. Any relationships between artifacts is determined by supporting tools.
Repository URI Components =========================
An absolute repository URI is written as follows:
repository-uri = access-specifier "/" product-specifier "/" version-specifier "/" artifact-specifier
Access specifier ----------------
The access specifier determines the scheme, authority, and optional repository directory prefix. There is currently no requirement for ftp, scp or file based access - only http is supported:
access-specifier = http-access-specifier http-access-specifier = "http://" authority "/" [directory "/"] directory = path_segments
(authority and path_segments are per http://www.ietf.org/rfc/rfc2396.txt)
<directory> is used when the repository cannot be located at the root of an absolute URI.
URI examples: http://repo.apache.org/ http://repo.apache.org/pub/repository
Product specifier -----------------
The product specifier specifies the organisation and project:
product-specifier = organisation "/" project organisation = name-segments project = name-segment name-segments = name-segment *( "/" name_segment) name-segment = nchar+ nchar = alphanum | escaped | "_" | "-" | "!" | "~" | "@" | "&"
(alphanum and escaped are per http://www.ietf.org/rfc/rfc2396.txt)
<organisation> is the organisation name. It is arbitrary, but should be globally unique. It could be the domain name, or reverse domain name, with "." replaced by "/", e.g: "sun/com", "org/apache" or simply the name of the organisation, e.g "oracle".
<project> is the project name. It is unique within an organisation. E.g, "ldap", "jndi", "maven", "commons-logging".
URI examples: http://repo.apache.org/org/apache/commons-logging http://repo.apache.org/sun/jndi
Version specifier -----------------
The version specifier specifies the version of the project:
version-specifier = name-segments
For the purposes of this proposal, version-specifier is opaque - its format is determined by language and deployment best practices.
Some possible examples include: "1.0", "v0.9-beta", "nightly/20031113", "latest", "release/1.5.4"
URI examples: http://repo.apache.org/apache/commons-logging/1.0 http://repo.apache.org/apache/commons-logging/1.1 http://repo.apache.org/apache/commons-logging/latest http://repo.apache.org/apache/ant/release/1.5.4 http://repo.apache.org/apache/ant/nightly/20031113 http://repo.apache.org/apache/commons-cli/nightly/1.0/20031113 http://repo.apache.org/apache/commons-cli/nightly/2.0/20031113
Artifact specifier ------------------
The artifact specifier uniquely identifies an artifact within a project version: artifact-specifier = name-segments
For the purposes of this proposal, artifact-specifier is opaque - its format is determined by language and deployment best practices.
Some possible examples include: jars/commons-logging-1.1.jar binaries/linux/httpd-2.0.40-i686-pc-linux-gnu-rh73.tar.gz
URI examples:
http://repo.apache.org/apache/common-logging/1.1/jars/commons-logging-1.1.ja r http://repo.apache.org/apache/httpd/2.0.48/docs/httpd-docs-2.0.48.en.zip http://repo.apache.org/apache/ant/1.5.4/KEYS
Rationale =========
Of the URI components: . <access-specifier> and <product-specifier> are common accross all languages and deployments. . <version-specifier> is subject to language or deployment best practices . <artifact-specifier> is subject to language, deployment, artifact, or project best practices
It is envisioned that there will be different repository deployment and query tools developed for each language. A generic tool cannot be written without providing supporting meta-data, which is outside the scope of this proposal.
Projects should be able to deploy arbitrary artifacts to the repository, whether they be for end-users, or meta-data (e.g, maven's project.xml). Tools should ignore any artifact they don't understand.
To ensure interoperability between language-based tools, best-practice guidelines need to be drawn up for each supported language and deployment scenario.
Appendix ========
Changes from v0.1 -----------------
. repository-uri changed from: access-specifier "/" product-specifier "/" artifact-specifier to: access-specifier "/" product-specifier "/" version-specifier "/" artifact-specifier
. product-specifier changed from: organisation "/" project "/" version to: organisation "/" project
. organisation changed from: *pchar to: name_segments
. project changed from: *pchar to: name_segment
. version renamed to version-specifier, and is now opaque
. artifact-specifier is now opaque
_________________________________________________________________
Frustrated with dial-up? Get high-speed for as low as $26.95. https://broadband.msn.com (Prices may vary by service area.)