I'll just wade in here with my 2p.
I agree that with the number of Ant based variants...maven, jelly etc... . and
people embedding Ant inside their own applications that their is a need to
avoid collision using namespace....in addition this will also allow intermixing
of Ant with other xml vocabularies ( XSLT, etc.. ) that may process prior or
after Ant processing, though in the example provided e.g. antcontrib ( or the
proposes <antlib/> stuff library its more akin to the binding a function to a
namespace as within xslt.
a few random and possibly not applicable comments;
---------------------------------------------------------
3rd party libraries that extend Ant e.g. antcontrib depends on Ant, they are
not standalone xml vocabularies with its own processor...I see a mixing of
using namespaces for avoiding collision versus using namespaces to 'bind'
functionality a potential source of problems.
What are the benefits ? XSLT has already gone through many of these type of
issues...and my exp with the EXSLT effort suggests that you might want to come
up with some clear use cases...otherwise users will just see namespaces as
additional effort for little return.
---------------------------------------------------------
I would suggest at least inheriting part of the URI to promote sanity with 3rd
party libraries;
note I add a mythical top level root element, as there might be a need of
something like this as a general container element for ant...but this applies
to <project/> as well.
<build xmlns:ant="http:/ant.apache.org/ant/v1"
xmlns:ac="http:/ant.apache.org/ant/antcontrib">
</build>
this allows ant.apache.org to control the valid 3rd party namespaces, though of
course the Ant developer / hacker would be allowed to determine completely
seperate variants as proposed...as follows;
<build xmlns:ant="http:/ant.apache.org/ant"
xmlns:ac="http:/myversionof3rdpartylibrary.com/antcontrib">
</build>
but once again this to me smacks of using namespace to bind functionality
---------------------------------------------------------
as with all xml namespaces there is the issue of the default namespaces not
applying to attribute names. That is
unprefixed attributes have no explicit namespace, though they are assumed to be
in the namespace of the element containing them. This means that choice A
really is not an option; too much ambiguity with respect to attributes may
cause problems.
to address these as clearly as possible one would prefix all elements and
attributes;
<build xmlns:ant="http:/ant.apache.org/ant"
xmlns:ac="http:/ant.apache.org/ant/antcontrib">
....
<ac:if>
<ac:or>
<ac:equals ac:arg1="a" ac:arg2="${x}"/>
<ac:ispropertytrue ac:property="y"/>
</ac:or>
<ac:then>
<ant:echo>both conditions are true</ant:echo>
</ac:then>
</ac:if>
</build>
admittedly most would argue that its alright to get away with not prefixing the
attributes if the elements were prefixed.
as u can see adding namespaces significantly reduces the readability of the
markup...not to mention adds the burden of typing more...which is irrevelent if
one is using an editor. So as much as I would like to be able to manipulate
markup that uses 3rd party libraries ( such as antcontrib ), its probably
important to allow users to just define a standard namespace for collision
aspects. I think that the antlib effort needs to address these issues as well.
---------------------------------------------------------
I would propose, to implement a set of conventions;
- namespace aware Ant processing switch to turn on and off namespace processing
- if namespace aware processing is on to include a switch for letting ant embed
3rd party libraries or to enable namespace processing of said 3rd party
libraries...or use some clear uri naming schema to indicate choice
- http URI should be used for identifying different ant namespaces, it gives
clear readable information and points to at the very least a domain (
ant.apache.org ) that user can put into browser, maybe even define a RDDL
document
- if function binding is to be used with namespaces, e.g. as suggested with
antlib, then I would suggest a bit of refactoring and just copy what XSLT does
with binding for java function binding
- what happens when certain functionality gets folded back into Ant...having
the ability to explicitly state namespace is a good abstraction...though not
sure about the internals of Ant of handling this... at the least its important
to embed version information into the namespace uri e.g.
http:/ant.apache.org/ant/v1 or http:/ant.apache.org/ant/2003
- if you are to gain the benefits of namespaces and are looking at using XML
Schema in the future, I would suggest some considerable modeling with xml
schema... to ensure what is being proposed across Ant with respect to
namespaces jigs up with what is natural within XML Schema, though I am a
relaxng man myself....
sorry about the random nature of this posting, also some of the points maybe
ill informed or not relevent though I can see some definate parallels with what
Ant wants to do and what XSLT has been through.
cheers, Jim Fuller
This e-mail and any files transmitted with it are confidential and intended
solely for the use of the individual or entity to whom they are addressed. If
you are not the intended recipient please contact the sender immediately. Any
disclosure, copying, distribution or any other use of this communication is
strictly prohibited and may be unlawful. Stuart Lawrence Marketing
Communications Limited reserves the right to monitor and intercept
communications for unlawful business purposes.
This also confirms that this message has been swept for viruses, although
Stuart Lawrence Marketing Communications Limited accepts no responsibility for
any loss or damage resulting directly or indirectly from the use of this email
or contents.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]