API:EPrints/DataSet
EPrints 3 Reference: Directory Structure - Metadata Fields - Repository Configuration - XML Config Files - XML Export Format - EPrints data structure - Core API - Data Objects
Latest Source Code (3.4, 3.3) | Revision Log | Before editing this page please read Pod2Wiki
Contents
- 1 NAME
- 2 SYNOPSIS
- 3 DESCRIPTION
- 4 CREATING CUSTOM DATASETS
- 5 METHODS
- 5.1 Class Methods
- 5.2 Object Methods
- 5.2.1 base_id
- 5.2.2 field
- 5.2.3 id
- 5.2.4 count
- 5.2.5 fields
- 5.2.6 key_field
- 5.2.7 make_dataobj
- 5.2.8 create_dataobj
- 5.2.9 dataobj
- 5.2.10 repository
- 5.2.11 prepare_search
- 5.2.12 search
- 5.2.13 satisfy_all_1
- 5.2.14 staff_1
- 5.2.15 custom_order_field1_field2_field3
- 5.2.16 search_fields_meta_fields_field1_field2_document_field3_merge_any_match_ex_value_bees_meta_fields_field4_value_honey
- 5.2.17 limit_10
- 5.2.18 list
- 6 COPYRIGHT
NAME
EPrints::DataSet - a set of records with the same metadata scheme
SYNOPSIS
my $dataset = $repository->dataset( "inbox" ); print sprintf("There are %d records in the inbox\n", $dataset->count); $string = $dataset->base_id; # eprint $string = $dataset->id; # inbox $dataobj = $dataset->create_dataobj( $data ); $user = $dataset->dataobj( 23 ); $search = $dataset->prepare_search( %options ); $list = $dataset->search( %options ); # prepare_search( %options )->execute $list = $dataset->search; # match ALL $metafield = $dataset->field( $fieldname ); $metafield = $dataset->key_field; @metafields = $dataset->fields; $dataset->search->map( sub {}, $ctx ); $n = $dataset->search->count; $ids = $dataset->search->ids; $list = $dataset->list( \@ids );
DESCRIPTION
This module describes a dataset.
A repository has several datasets that make up the repository's metadata schema. The list of dataset ids can be obtained from the repository object (see EPrints::Repository).
A normal dataset (eg. "user") has a package associated with it (eg. EPrints::DataObj::User) which must be a subclass of EPrints::DataObj and a number of SQL tables which are prefixed with the dataset name. Most datasets also have a set of associated EPrints::MetaField's which may be optional or required depending on the type eg. books have editors but posters don't but they are both EPrints.
The fields contained in a dataset are defined by the data object and by any additional fields defined in cfg.d. Some datasets don't have any fields.
Some datasets are "virtual" datasets made from others. Examples include "inbox", "archive", "buffer" and "deletion" which are all virtual datasets of of the "eprint" dataset. That is to say "inbox" is a subset of "eprint" and by inference contains EPrints::DataObj::EPrints. You can define your own virtual datasets which opperate on existing datasets.
CREATING CUSTOM DATASETS
New datasets can be defined in a configuration file, e.g.
$c->{datasets}->{bread} = { class => "EPrints::DataObj::Bread", sqlname => "bread", };
This defines a dataset with the id bread (must be unique). The dataobj package (class) to instantiate objects with is EPrints::DataObj::Bread, which must be a sub-class of EPrints::DataObj. Lastly, the database tables used by the dataset will be called 'bread' or prefixed 'bread_'.
Other optional properties:
columns - an array ref of field ids to default the user view to datestamp - field id to use to sort this dataset import - is the dataset importable? index - is the dataset text-indexed? order - is the dataset orderable? virtual - completely virtual dataset (no database tables)
To make one dataset a virtual dataset of another (as 'inbox' is to 'eprint') use the following properties:
confid - the super-dataset this is a virtual sub-dataset of dataset_id_field - the field containing the sub-dataset id filters - an array ref of filters to apply when retrieving records
As with system datasets, the EPrints::MetaFields can be defined via EPrints::DataObj/get_system_field_info or via configuration:
$c->add_dataset_field( "bread", { name => "breadid", type => "counter", sql_counter => "bread" } ); $c->add_dataset_field( "bread", { name => "toasted", type => "bool", } ); $c->add_dataset_field( "bread", { name => "description", type => "text", } );
See EPrints::RepositoryConfig/add_dataset_field for details on add_dataset_field.
Creating a fully-operational dataset will require more configuration files. You will probably want at least a workflow, citations for the summary page, search results etc, and permissions and searching settings:
push @{$c->{user_roles}->{admin}}, qw( +bread/create +bread/edit +bread/view +bread/destroy +bread/details ); push @{$c->{plugins}->{"Export::SummaryPage"}->{params}->{accept}}, qw( dataobj/bread ); $c->{datasets}->{bread}->{search}->{simple} = { search_fields => { id => "q", meta_fields => [qw( breadid description )], }, };
METHODS
Class Methods
Object Methods
base_id
$id = $ds->base_id $ds = $repo->dataset( "inbox" ); $id = $ds->base_id; # returns "eprint"
Returns the identifier of the base dataset for this dataset (same as id unless this dataset is virtual).
field
$metafield = $ds->field( $fieldname )
Returns the EPrints::MetaField from this dataset with the given name, or undef.
id
$id = $ds->id
Return the id of this dataset.
count
$n = $ds->count( $session )
Return the number of records in this dataset.
fields
@fields = $ds->fields
Returns a list of the EPrints::MetaFields belonging to this dataset.
key_field
$field = $ds->key_field
Return the EPrints::MetaField representing the primary key field.
Always the first field.
make_dataobj
$dataobj = $ds->make_dataobj( $epdata )
Return an object of the class associated with this dataset, always a subclass of EPrints::DataObj.
$epdata is a hash of values for fields in this dataset.
Returns $epdata if no class is associated with this dataset.
create_dataobj
$obj = $ds->create_dataobj( $data )
Returns a new object in this dataset based on $data or undef on failure.
If $data describes sub-objects then those will also be created.
dataobj
$dataobj = $ds->dataobj( $id )
Returns the object from this dataset with the given id, or undefined.
repository
$repository = $ds->repository
Returns the EPrints::Repository to which this dataset belongs.
prepare_search
$searchexp = $ds->prepare_search( %options )
Returns a EPrints::Search for this dataset with %options.
search
$list = $ds->search( %options )
Short-cut to prepare_search( %options )->execute.
satisfy_all_1
"satisfy_all"=>1
Satify all conditions specified. 0 means satisfy any of the conditions specified. Default is 1
staff_1
"staff"=>1
Do search as an adminstrator means you get everything back
custom_order_field1_field2_field3
"custom_order" => "field1/-field2/field3"
Order the search results by field order. prefixing the field name with a "-" results in reverse ordering
search_fields_meta_fields_field1_field2_document_field3_merge_any_match_ex_value_bees_meta_fields_field4_value_honey
"search_fields" => \@({meta_fields=>[ "field1", "field2" "document.field3" ], merge=>"ANY", match=>"EX", value=>"bees"}, {meta_fields=>[ "field4" ], value=>"honey"});
Return values where field1 field2 or field3 is "bees" and field2 is "honey" (assuming satisfy all is set)
limit_10
"limit" => 10
Only return 10 results
list
$list = $ds->list( $ids )
Returns a EPrints::List for this dataset for the given $ids list.
COPYRIGHT