On Wed, Oct 19, 2011 at 7:28 PM, Stevan Little
<stevan.lit...@iinteractive.com> 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

Reply via email to