[LON-CAPA-cvs] cvs: loncom /metadata_database/LONCAPA lonmetadata.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Mon, 12 Jan 2004 15:07:08 -0000
This is a MIME encoded message
--matthew1073920028
Content-Type: text/plain
matthew Mon Jan 12 10:07:08 2004 EDT
Added files:
/loncom/metadata_database/LONCAPA lonmetadata.pm
Log:
First swipe at consolidating the metadata table creation routines. Designed
to be used in scripts as well as the httpd. Table creation and table
description are implemented.
--matthew1073920028
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20040112100708.txt"
Index: loncom/metadata_database/LONCAPA/lonmetadata.pm
+++ loncom/metadata_database/LONCAPA/lonmetadata.pm
# The LearningOnline Network with CAPA
#
# $Id: lonmetadata.pm,v 1.1 2004/01/12 15:07:08 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#
######################################################################
package LONCAPA::lonmetadata;
use strict;
use DBI;
######################################################################
######################################################################
=pod
=head1 Name
lonmetadata
=head1 Synopsis
lonmetadata holds a description of the metadata table and provides
wrappers for the storage and retrieval of metadata to/from the database.
=head1 Description
=head1 Methods
=over 4
=cut
######################################################################
######################################################################
=pod
=item Old table creation command
CREATE TABLE IF NOT EXISTS metadata
(title TEXT,
author TEXT,
subject TEXT,
url TEXT,
keywords TEXT,
version TEXT,
notes TEXT,
abstract TEXT,
mime TEXT,
language TEXT,
creationdate DATETIME,
lastrevisiondate DATETIME,
owner TEXT,
copyright TEXT,
FULLTEXT idx_title (title),
FULLTEXT idx_author (author),
FULLTEXT idx_subject (subject),
FULLTEXT idx_url (url),
FULLTEXT idx_keywords (keywords),
FULLTEXT idx_version (version),
FULLTEXT idx_notes (notes),
FULLTEXT idx_abstract (abstract),
FULLTEXT idx_mime (mime),
FULLTEXT idx_language (language),
FULLTEXT idx_owner (owner),
FULLTEXT idx_copyright (copyright))
TYPE=MYISAM;
=cut
######################################################################
######################################################################
my @Metadata_Table_Description =
(
{ name => 'title', type=>'TEXT'},
{ name => 'author', type=>'TEXT'},
{ name => 'subject', type=>'TEXT'},
{ name => 'url', type=>'TEXT', restrictions => 'NOT NULL' },
{ name => 'keywords', type=>'TEXT'},
{ name => 'version', type=>'TEXT'},
{ name => 'notes', type=>'TEXT'},
{ name => 'abstract', type=>'TEXT'},
{ name => 'mime', type=>'TEXT'},
{ name => 'language', type=>'TEXT'},
{ name => 'creationdate', type=>'DATETIME'},
{ name => 'lastrevisiondate', type=>'DATETIME'},
{ name => 'owner', type=>'TEXT'},
{ name => 'copyright', type=>'TEXT'},
#--------------------------------------------------
{ name => 'dependencies', type=>'TEXT'},
{ name => 'modifyinguser', type=>'TEXT'},
{ name => 'authorspace', type=>'TEXT'},
{ name => 'lowestgradelevel', type=>'INT'},
{ name => 'highestgradelevel', type=>'INT'},
{ name => 'standards', type=>'TEXT'},
{ name => 'count', type=>'INT'},
{ name => 'course', type=>'INT'},
{ name => 'course_list', type=>'TEXT'},
{ name => 'goto', type=>'INT'},
{ name => 'goto_list', type=>'TEXT'},
{ name => 'comefrom', type=>'INT'},
{ name => 'comefrom_list', type=>'TEXT'},
{ name => 'sequsage', type=>'INT'},
{ name => 'sequsage_list', type=>'TEXT'},
{ name => 'stdno', type=>'INT'},
{ name => 'stdno_list', type=>'TEXT'},
{ name => 'avetries', type=>'FLOAT'},
{ name => 'avetries_list', type=>'TEXT'},
{ name => 'difficulty', type=>'FLOAT'},
{ name => 'difficulty_list',type=>'TEXT'},
{ name => 'clear', type=>'FLOAT'},
{ name => 'technical', type=>'FLOAT'},
{ name => 'correct', type=>'FLOAT'},
{ name => 'helpful', type=>'FLOAT'},
{ name => 'depth', type=>'FLOAT'},
{ name => 'hostname', type=> 'TEXT'},
#--------------------------------------------------
);
my @Fulltext_indicies = qw/
title
author
subject
url
keywords
version
notes
abstract
mime
language
owner
copyright/;
######################################################################
######################################################################
=pod
=item &describe_metadata_storage
Input: None
Returns: An array of hash references describing the columns and rows
of the metadata table.
=cut
######################################################################
######################################################################
sub describe_metadata_storage {
return (\@Metadata_Table_Description,\@Fulltext_indicies);
}
######################################################################
######################################################################
=pod
=item create_metadata_storage()
Inputs: None
Returns: A perl string which, when executed by MySQL, will cause the
metadata storage to be initialized.
=cut
######################################################################
######################################################################
sub create_metadata_storage {
my $tablename = 'metadata';
my $request = "CREATE TABLE IF NOT EXISTS ".$tablename." ";
#
# Process the columns (this code is stolen from lonmysql.pm)
my @Columns;
my $col_des; # mysql column description
foreach my $coldata (@Metadata_Table_Description) {
my $column = $coldata->{'name'};
$col_des = '';
if (lc($coldata->{'type'}) =~ /(enum|set)/) { # 'enum' or 'set'
$col_des.=$column." ".$coldata->{'type'}."('".
join("', '",@{$coldata->{'values'}})."')";
} else {
$col_des.=$column." ".$coldata->{'type'};
if (exists($coldata->{'size'})) {
$col_des.="(".$coldata->{'size'}.")";
}
}
# Modifiers
if (exists($coldata->{'restrictions'})){
$col_des.=" ".$coldata->{'restrictions'};
}
if (exists($coldata->{'default'})) {
$col_des.=" DEFAULT '".$coldata->{'default'}."'";
}
$col_des.=' AUTO_INCREMENT' if (exists($coldata->{'auto_inc'}) &&
($coldata->{'auto_inc'} eq 'yes'));
$col_des.=' PRIMARY KEY' if (exists($coldata->{'primary_key'}) &&
($coldata->{'primary_key'} eq 'yes'));
} continue {
# skip blank items.
push (@Columns,$col_des) if ($col_des ne '');
}
foreach my $colname (@Fulltext_indicies) {
my $text = 'FULLTEXT idx_'.$colname.' ('.$colname.')';
push (@Columns,$text);
}
$request .= "(".join(", ",@Columns).") ";
return $request;
}
######################################################################
######################################################################
=pod
=item store_metadata()
Inputs: database handle ($dbh) and a hash or hash reference containing the
metadata for a single resource.
Returns: 1 on success, 0 on failure to store.
=cut
######################################################################
######################################################################
sub store_metadata {
}
######################################################################
######################################################################
=pod
=item lookup_metadata()
Inputs: database handle ($dbh) and a hash or hash reference containing
metadata which will be used for a search.
Returns:
=cut
######################################################################
######################################################################
sub lookup_metadata {}
######################################################################
######################################################################
=pod
=item delete_metadata()
=cut
######################################################################
######################################################################
sub delete_metadata {}
######################################################################
######################################################################
1;
__END__;
=pod
=back
=cut
--matthew1073920028--