Treex::PML::Factory - a base class for Treex::PML object factories
use Treex::PML; use MyTreex::PML::Factory; MyTreex::PML::Factory->make_default(); # These class methods invoke similarly named methods on the default # factory; the default factory method's are responsible for # creating and returning the corresponding objects. Treex::PML::Factory->createPMLSchema(...) Treex::PML::Factory->createPMLInstance(...) Treex::PML::Factory->createDocument(..) Treex::PML::Factory->createDocumentFromFile(..) Treex::PML::Factory->createFSFormat(..) Treex::PML::Factory->createNode(..) Treex::PML::Factory->createTypedNode($decl,...); Treex::PML::Factory->createList(...) Treex::PML::Factory->createSeq(...) Treex::PML::Factory->createAlt(...) Treex::PML::Factory->createContainer(...) Treex::PML::Factory->createStructure(...)
This class maintains a default factory for creating Treex::PML objects and delegates create...() methods called as class methods to the default factory.
create...()
Note that this class does not implement a factory, Treex::PML::StandardFactory does that.
This class provides means for creating various types of Treex::PML-like objects without having to name particular classes. The user can plug in their own default factory in order to replace the default Treex::PML class hierarchy with their own one. The classes in the user hierarchy typically derive from the corresponding classes in the Treex::PML hierarchy; if not, they must at least implement the same interfaces and use the same types of references for the underlying objects (or overloading to them, so that also low-level code using HASH or ARRAY dereferencing on objects still works).
User can define factory by implementing all the create* methods as object methods. The factory must be derived from the 'Treex::PML::Factory' class or, alternatively, provide a constructor 'new' and implement the DOES method which then returns true if 'Treex::PML::Factory' is passed to it as an argument.
create*
If inherited by a customized factory class, makes the invocant class the default factory. Every factory class should either inherit this method or reimplement it using a call to Treex::PML::Factory->set_default_factory.
Treex::PML::Factory->set_default_factory
If inherited by a customized factory class, creates a new instance of that class. The default constructor will create a blessed hash reference using the constructor arguments to populate the hash with name=>value pairs.
Returns the default factory (usually a singleton Treex::PML::Factory object).
Change the default factory to a given object (the object must implment the Treex::PML::Factory interface).
The following functions must be implemented by custom factory classes as object methods, but should be called as class methods of the 'Treex::PML::Factory' class. The class methods of 'Treex::PML::Factory' delegate the call to the default factory.
Parses an XML representation of a PML Schema from a string, filehandle, local file, or URL, processing the modular instructions as described in
L<http://ufal.mff.cuni.cz/jazz/PML/doc/pml_doc.html#processing>
and returns the corresponding object implementing the interface or Treex::PML::Schema. One of the following options must be given:
string
a XML string to parse
filename
a file name or URL
fh
a file-handle (IO::File, IO::Pipe, etc.) open for reading
The following options are optional:
base_url
base URL for referred schemas (usefull when parsing from a file-handle or a string)
use_resources
if this option is used with a true value, the parser will attempt to locate referred schemas also in Treex::PML resource paths.
revision
minimal_revision
maximal_revision
put constraints on the revision number of the schema.
validate
if this option is used with a true value, the parser will validate the schema on the fly using a RelaxNG grammar given using the relaxng_schema parameter; if relaxng_schema is not given, the file 'pml_schema_inline.rng' searched for in Treex::PML resource paths is assumed.
relaxng_schema
a particular RelaxNG grammar to validate against. The value may be an URL or filename for the grammar in the RelaxNG XML format, or a XML::LibXML::RelaxNG object representation. The compact format is not supported.
Without arguments (the option HashRef) creates a empty object implementing the Treex::PML::Instance interface.
If called with the option HashRef, a new object implementing the Treex::PML::Instance interface is created and its content is read from a given XML input in the PML format. The input can be a file, filehandle, string, or a DOM tree. The arguments are described in the documentation of the the load() method of Treex::PML::Instance.
load()
Creates a new empty object implementing the Treex::PML::Document interface. The options are used to initialize the object's attributes and include: name, format, trees, backend, FS, hint, patterns, tail, save_status. See the documentation of the create() method of Treex::PML::Document for details.
name
format
trees
backend
FS
hint
patterns
tail
save_status
create()
Creates a new object implementing the Treex::PML::Document interface and reads its content from a given file. The arguments are described in the documentation of the the load() method of Treex::PML::Document.
Return a new object implementing the Treex::PML::FSFormat interface. The argument can be a HashRef containing the FS format definition in parsed from, or an ARRAY reference (whose elements are individual lines of the FS format definition) or a GLOB reference with an input stream from which the FS format definition is to be read.
Return a new node object implementing the Treex::PML::Node interface, using given HashRef reference as the source of initial set of attributes; if the $reuse argument is true, the HashRef may be actually blessed into the new class (if supported by the implementation).
$reuse
or
Return a new node object implementing the Treex::PML::Node interface, associated with the given PML type (passed either as a Treex::PML::Schema::Decl object or as the type name followed by a PML schema object).
Return a new list (object implementing the Treex::PML::List interface), populated with the values passed in the (optional) ArrayRef. If the $reuse argument is true, the given ArrayRef may actually be reblessed into the target class (if supported by the implementation).
Return a new alternative (object implementing the Treex::PML::Alt interface), populated with the values passed in the (optional) ArrayRef. If the $reuse argument is true, the given ArrayRef may actually be reblessed into the target class (if supported by the implementation).
Return a new sequence (object implementing the Treex::PML::Seq interface). The object gets populated by elements from a given ArrayRef (if given). Each element of the ArrayRef should be a Treex::PML::Seq::Element object. The second optional argument is a regular expression constraint which can be stored in the object and used later for validating its content (see validate() method of Treex::PML::Seq). If the $reuse argument is true, the ArrayRef can be used directly as the container for the content of the sequence (if supported by the implementation); otherwise it is copied.
Create a new container (object implementing the Treex::PML::Container interface). The the initial value for the container's value with $value and its attributes with the name-value pairs from the given HashRef. If $reuse is true, the HashRef passed may actually be reblessed into the target class (if supported by the implementation).
Create a new structure (object implementing the Treex::PML::Struct interface). The structure is initialized with the name-value pairs from the given HashRef (optional). If $reuse is true, the HashRef may actually be reblessed into the target class (if supported by the implementation).
Check whether the class implements a given interface (role). Note, the class Treex::PML::Factory itself does not implement the Treex::PML::Factory interface, but assumes that anything derived from it does!
None by default.
Treex::PML
Copyright (C) 2010 by Petr Pajas
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.2 or, at your option, any later version of Perl 5 you may have available.
None reported... yet.
To install Treex::PML, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Treex::PML
CPAN shell
perl -MCPAN -e shell install Treex::PML
For more information on module installation, please visit the detailed CPAN module installation guide.