XML::EPP - an implementation of the EPP XML language
use XML::EPP; my $foo_create = XML::EPP->new( message => XML::EPP::Command->new( action => "create", argument => XML::EPP::SubCommand->new( payload => XML::EPP::Obj::create->new( ... ), ), clTRID => "xml_epp_".time."_$$", ), ); print $foo_create->to_xml;
This module is an implementation of the XML protocol used by most major domain registries around the world. This protocol was developed between 2002 and 2004, using XML standards which were at the time very new, such as XML Namespaces and XML Schema. It saw several incompatible revisions until the 1.0 version which became RFC3730.
This module hopes to create a Free Software, complete, user-friendly and standards compliant interface to both client and server sides of the EPP specification.
The classes which are present, while enough to be able to parse the RFC, are not fixed in API terms until they are documented and tested. Please consider any attribute which is not yet at least documented to be under review and subject to rename. This is thought to lead to a clearer implementation than fixing attribute names to the somewhat random (though well-known) names used in the EPP XML. Use of sub BUILDARGS { } to allow either may be considered; patches welcome.
sub BUILDARGS { }
Similarly with undocumented portions of the implementation. If you would like to make sure that the code you write against it doesn't need rewriting, please send a patch/pull request!
This module currently implements the XML part of the protocol only; converting this into an actual EPP session is currently TO-DO. Also, none of the mappings for essential registry types, such as domain, contact or host are yet implemented. This is a preview release.
This part currently works very well. Feed in some valid XML thusly;
use XML::EPP; my $message = XML::EPP->parse( $xml );
If you can find any RFC5730-valid document (including RFC5731, RFC5732 or RFC5733) this doesn't parse, then you win a bag of chocolate fish. Similarly if you find an RFC-invalid document that this module accepts blindly. Please log an RT ticket and contact the author privately for delivery of the chocolate.
There is an example in the SYNOPSIS, but essentially the regular Moose constructor is all that is provided in this module.
SYNOPSIS
Look out for convenience construction interfaces. These are primarily useful coerce rules (see Moose::Util::TypeConstraints).
coerce
For example, instead of writing (in the middle of constructing a XML::EPP::DCP stack):
recipient => XML::EPP::DCP::Recipient->new( same => 1, ours => [ XML::EPP::DCP::Ours->new( name => "SomeCo Ltd" ), XML::EPP::DCP::Ours->new( name => "Partner Ltd" ), ], ),
Coerce rules are defined to make this work:
recipient => [ qw(same), "SomeCo Ltd", "Partner Ltd" ];
Both construct the same stack of objects, and would serialize to:
<recipient xmlns="urn:ietf:params:xml:ns:epp-1.0"> <ours><recDesc>SomeCo Ltd</recDesc></ours> <ours><recDesc>Parnet Ltd</recDesc></ours> <same/> </recipient>
For this to be most useful, the rules are hand-written for each class.
@XML::EPP::epp_versions
The list of EPP versions implemented by this module. Default value is ("1.0", ).
("1.0", )
@XML::EPP::epp_lang
The list of EPP languages implemented by this module. Default value is ("en", ).
("en", )
Register the namespace $namespace as corresponding to the $uri URI. Object types such as XML::EPP::Domain, etc will use this to register themselves. The loaded object types are available in the global variable @XML::EPP::obj_uris
$namespace
$uri
@XML::EPP::obj_uris
Exactly the same as the above, but the URI will be advertised as an extension, not an object type.
Source code is available from Catalyst:
git://git.catalyst.net.nz/XML-EPP.git
And Github:
git://github.com/catalyst/XML-EPP.git
Please see the file SubmittingPatches for information on preferred submission formats.
Suggested avenues for support:
The DNRS forum on SourceForge - http://sourceforge.net/projects/dnrs/forums
Contact the author and ask either politely or commercially for help.
Log a ticket on http://rt.cpan.org/
XML::EPP::Changes for what has most recently been added to XML::EPP.
XML::EPP::Domain - an implementation of the RFC5731 domain mapping
XML::EPP::Host - an implementation of the RFC5732 host mapping
XML::EPP::Contact - an implementation of the RFC5733 contact mapping
Development commissioned by NZ Registry Services, and carried out by Catalyst IT - http://www.catalyst.net.nz/
Copyright 2009, 2010, NZ Registry Services. This module is licensed under the Artistic License v2.0, which permits relicensing under other Free Software licenses.
To install XML::EPP, copy and paste the appropriate command in to your terminal.
cpanm
cpanm XML::EPP
CPAN shell
perl -MCPAN -e shell install XML::EPP
For more information on module installation, please visit the detailed CPAN module installation guide.