I have a few comments on the proposed URI Syntax, from
http://nagoya.apache.org/wiki/apachewiki.cgi?ASFRepository/URISyntax.

<quote>
   Compromise URI

   http://<host>/<project>/<version>/artifact-[<version>;].ext
   For example
   http://repo.apache.org/org-apache-ant/1.5.1/ant-1.5.1.jar
   http://repo.apache.org/org-apache-ant/1.5.1/ant-testutil-1.5.1.jar
   http://repo.apache.org/org-apache-ant/1.5.1/LICENSE.txt
</quote>

1. This should be written as:
     http://<host>/<project>/<version>/artifact[-<version>].ext
   as the '-' is only required if the version is present.

2. Does '.ext' need to be mandatory?
   I'm assuming that a project is free to deploy whatever it
   likes into the repository, not all of which should be forced
   to have extensions (e.g, Unix shell scripts, README files).

3. <project> is too limiting as it is required to be globally
   unique, resulting in unwieldy names like:
      "jakarta-commons-logging" or "org.apache.jakarta.commons.logging"

   I would prefer to see this split into:
     <organisation>/<product>
   where:
   . <organisation> is arbitrary, but globally unique.
     It could be the domain name, e.g "sun.com", the reverse domain
     name e.g "org.apache", or simply the name of the organisation, e.g
"oracle".

   . <project> is the project name, unique within the organisation,
     e.g: "jndi", "ldap", "commons-logging" etc.

4. <artifact> is too limiting as it groups all artifacts for one
   project in a single directory. For projects producing large
   no.s of artifacts, it becomes difficult for users to browse.
   The httpd project for example produces multiple binaries, for
   different platforms (see http://www.apache.org/dist/httpd/)
   The requirement that -<version> is prepended to the artifact
   name also doesn't support language specific requirements.

   I would prefer to see this split into:
     [<type>/][<platform>/]<artifact>

   where:
   . <type> is optional and arbitrary, determined by the deployment tool.
     E.g: "jars", "binaries", "docs" etc.
   . <platform> is optional and arbitrary, determined by the deployment
tool.
   . <artifact> is determined by the deployment tool, and includes:
     . the artifact name
     . the version (optional)
     . the platform (optional)
     . the extension (optional)
     . the type (optional)
       E.g, "-src", "-bin" etc.

   This allows the repository to cater for language-specific deployment
   tools. For java, <artifact> could be:
     <artifact-name>[-<version>][-<type>][.<ext>]
   E.g:
     . LICENSE.txt
     . ant-1.5.1.jar
     . ant-1.5.1-src.zip

   For C binaries, <artifact> could be:
      <artifact-name>-<version>-<platform>.<ext>
   E.g:
     . httpd-2.0.43-sparc-sun-solaris2.8.tar.gz

In summary, I think the URI should be of the form:

http://<host>/<organisation>/<project>/<version>/[<type>/][<platform>/]<arti
fact>,
with the format of <artifact> determined by the deployment tool.

For example:
   http://repo.apache.org/apache/ant/1.5.4/LICENSE.txt
   http://repo.apache.org/apache/ant/1.5.4/jars/ant-1.5.4.jar
   http://repo.apache.org/apache/ant/1.5.4/source/ant-1.5.4-src.zip

http://repo.apache.org/apache/httpd/2.0.43/binaries/sparc-sun-solaris2.8/htt
pd-2.0.43-sparc-sun-solaris2.8.tar.gz
   http://repo.mycompany.com/sun/jndi/jars/jndi-1.2.1.jar

Regards,

Tim


Reply via email to