ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Wannheden, Knut" <knut.wannhe...@paranor.ch>
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"
ns="urn:uri-supplied-by-ant-user"/>
         <cont:if/>
	</project>

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
idea.

> 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">
		...
	</project>

Why not use the empty namespace for Ant core?

--
knut

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