ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Wannheden, Knut" <>
Subject RE: Roles (was: antlib)
Date Wed, 07 May 2003 12:56:06 GMT
> > > 
> > > Let's not reinvent the wheel here.
> > > 
> > > The solution for names conflicts is namespaces - not rewriting. 
> > > 
> > 
> > I agree.  With the new ProjectHelper2 everything should be in 
> > place to start
> > using namespaces.
> > 
> I have no problem on allowing people to use namespaces, but I do 
> have a problem on forcing people to use them just because some others
> want to use some fancy XML tool. The buildfile belongs to the
> user and s/he should be in charge.

As someone already said, it's about "not reinventing the wheel", not about
enabling the use of fancy tools.  But as ubiquitous and accepted as XML
namespaces are, I see many things that could be gained from using
namespaces.  Also, I suspect most users familiar with XML will have had some
dose of contact with namespaces.

> > This would also allow antlibs to have a DTD or XML Schema 
> > which could be
> > used in XML editors or for validation.
> > 
> Well ANT's XML is the result of introspection, and we already know
> our object model cannot be represented by a simple DTD. I see no way
> or reson to enforce 3rd party libraries to define their objects
> to be DTD-able. 
> I am not sure about XMLSchema but my hopes are not too high.

With roles I think XML Schema could very well be used to validate a
buildfile.  But I'm not saying that a schema should be enforce.  It would be
a gain of using XML namespaces.

> > Also namespaces lets the antlib user specify what prefix to 
> > use.  But it
> > doesn't allow two antlibs to use the same prefix in the 
> > context of the same
> > element, which I think is good.
> > 
> This sounds proper in theory, but in practice lets see:
>  1) Lets assume that we still want to be able to chop ANT jars
>     between core and different optional jars which have specific
>     dependencies of diferent packages and such.
>  2) Now because they are in different antlibs it would mean I am
>     forced to use different namespaces for each.

Is that really so?  As I understood it antlibs wouldn't be a requirement for
providing Ant tasks and types.  I thought the normal <taskdef/> and
<typedef/> would still work as they do now.

I suppose it would also be possible to let one antlib extend another one,
thus letting it use the same namespace.

>  3) So now you have people using 3rd party tasks like antcontrib
>     without problem and without conflicts, but they would have to
>     change not just one line (to use the antlib) but every bloddy
>     use of the tasks just because they are forced to use name spaces.

To use antcontrib as an antlib they would at the very least have to replace
the <taskdef/>s with an <antlib/> element or something, no?  But the tasks
should still work as they do now using <taskdef/>.

> > If you really want you can use short names with namespaces as 
> > well.  Just
> > set the default namespace locally.
> > 
> I have no problem using XML namespaces as long as they are independent
> of the antlib and under complete user control (not antlib 
> designer control).
> In other words the user should be able to decide if s/he wants to load
> the library on some particular namespace or in the default "" 
> namespace
> which is the one used by core.
> So if I say:
> 	<antlib location="antcontrib.jar"/>
> I will be able to use: <if/>, <switch/>, etc. But is I do:
> 	<project xmlns:cont="mylibs">
> 	   <antlib location="antcontrib.jar" usens="cont"/>
> 	</project>
> then I can use <cont:if/>, <cont:switch/>, etc.

I think the <antlib/> shouldn't define the prefix, but the namespace URI
instead .  Something like:

	<project xmlns:cont="urn:uri-supplied-by-ant-user">
	   <antlib location="antcontrib.jar"

Of course if the antlib would provide its own namespace in the descriptor.
Ant could do some kind of automatic loading when a namespace declaration
matching the namespace URI is encountered.  But I'm not sure that's a good

> Which means that the default value for the 'usens' attribute 
> is "" which assumes
> some implicit namespace definitions like:
> 	xmlns="ant-namespace" and probably xmlns:ant="ant-namespace"
> which uses as kosher namespaces as possible, I think.

But this would require that the <project/> element would define the default
namespace like this:

	<project xmlns="ant-namespace">

Why not use the empty namespace for Ant core?


  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message