On Oct 19, 2011, at 12:30 PM, Sherwin Daganato wrote: > On Wed, Oct 19, 2011 at 7:28 PM, Stevan Little > <[email protected]> wrote: >> Annotations/Attributes are kind of the bastard love child of compiler hints >> and macros, they make less sense in a highly dynamic language like Perl. >> >> Can you explain what it is you want to do with annotations/attributes? And >> perhaps we can point you in a more perl-ish direction. > > Honestly I have an ambitious plan to create a module using Moose that > will start out small and eventually evolve into something like what > .Net XML Serialization[1], and JAXB[2] offer -- XML binding and > serialization, and class generation from XML schema. Much like what > XML::Toolkit has originally intended to do, but I'd like it to follow > the API -- which unfortunately depends on Annotation/Attributes -- of > .Net, JAXB, or Simple[3] as closely as possible because I find it > simpler and easier to understand. > > I'm currently thinking of doing something like this for the XML schema > described in [1]: > > package Books; > > use namespace::autoclean; > use XML::Something; > use Moose -traits => [ > 'XMLType' => { namespace => > 'urn:xmlns:25hoursaday-com:my-bookshelf' }, > 'XMLRootElement' => { name => 'books', namespace => > 'urn:xmlns:25hoursaday-com:my-bookshelf' }, > ]; > > has 'book' => ( > traits => [ 'Array', 'XMLElement' ], > is => 'rw', > isa => 'ArrayRef[BookType]', > required => 1, > ); > > __PACKAGE__->meta->make_immutable; > > # =-=-=-=-=-=-=-=-=-=-=-=- > > package BookType; > > use namespace::autoclean; > use XML::Something; > use Moose -traits => [ > 'XMLType' => { namespace => > 'urn:xmlns:25hoursaday-com:my-bookshelf', order => [ 'title', > 'author', 'publicationdate' ] }, > ]; > > has 'title' => ( > traits => [ 'XMLElement' ], > is => 'rw', > isa => 'Str', > required => 1, > ); > has 'author' => ( > traits => [ 'XMLElement' ], > is => 'rw', > isa => 'Str', > required => 1, > ); > has 'publicationdate' => ( > traits => [ 'XMLElement' => { name => 'publication-date', > datatype => 'date' } ], > is => 'rw', > isa => 'DateTime', > required => 1, > ); > has 'publisher' => ( > traits => [ 'XMLAttribute' ], > is => 'rw', > isa => 'Str', > ); > has 'onloan' => ( > traits => [ 'XMLAttribute' => { name => 'on-loan' } ], > is => 'rw', > isa => 'Str', > ); > > __PACKAGE__->meta->make_immutable; > > # =-=-=-=-=-=-=-=-=-=-=-=- > > > [1] http://msdn.microsoft.com/en-us/library/ms950721.aspx > [2] http://jaxb.java.net/tutorial/section_1_3-Hello-World.html > [3] http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php
So what about the above code does not work in Moose right now? - Stevan
