# coding: utf-8 =begin * Name: SiSU * Description: a framework for document structuring, publishing and search * Author: Ralph Amissah * Copyright: (C) 1997 - 2009 Ralph Amissah All Rights Reserved. * License: GPL 3 or later: SiSU, a framework for document structuring, publishing and search Copyright (C) Ralph Amissah This program 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 3 of the License, or (at your option) any later version. This program 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 this program. If not, see . If you have Internet connection, the latest version of the GPL should be available at these locations: * SiSU uses: * Standard SiSU markup syntax, * Standard SiSU meta-markup syntax, and the * Standard SiSU object citation numbering and system * Hompages: * Download: * Ralph Amissah ** Description: modules shared by the different db types, dbi, postgresql, sqlite =end module SiSU_DB_create require "#{SiSU_lib}/db_columns" class Create < SiSU_DB_columns::Column_size require "#{SiSU_lib}/sysenv" @@dl=nil def initialize(opt,conn,file,sql_type='pg') @opt,@conn,@file,@sql_type=opt,conn,file,sql_type @cX=SiSU_Screen::Ansi.new(@opt.cmd).cX @comment=Comment.new(@conn,@sql_type) @@dl ||=SiSU_Env::Info_env.new.digest.length end def available DBI.available_drivers.each do |driver| puts "Driver: #{driver}" DBI.data_sources(driver).each do |dsn| puts "\tDatasource: #{dsn}" end end end def create_db @env=SiSU_Env::Info_env.new(@opt.fns) tell=SiSU_Screen::Ansi.new(@opt.cmd,'invert','Create PG db:',%{"SiSU_#{@env.path.stub_pwd}"}) tell.colorize unless @opt.cmd =~/q/ SiSU_Env::System_call.new.create_pg_db(@env.path.stub_pwd) #watch use of path.stub_pwd instead of stub end def output_dir? dir=SiSU_Env::Info_env.new('') if @opt.cmd =~/d/ #p dir.path.webserv_stub_ensure.inspect dir.path.webserv_stub_ensure end end def create_table def metadata print %{ currently using sisu dbi module to be populated from documents files create tables metadata data import through ruby transfer } unless @opt.cmd =~/q/ @conn.execute(%{ CREATE TABLE metadata ( tid BIGINT PRIMARY KEY, title VARCHAR(#{lt_title}) NULL, subtitle VARCHAR(#{lt_subtitle}) NULL, author VARCHAR(#{lt_author}) NULL, /* plan to replace creator field, currently used, with author field */ creator VARCHAR(#{lt_author}) NULL, author_title VARCHAR(#{lt_author_title}) NULL, author_nationality VARCHAR(#{lt_author_nationality}) NULL, illustrator VARCHAR(#{lt_illustrator}) NULL, translator VARCHAR(#{lt_translator}) NULL, subject VARCHAR(#{lt_subject}) NULL, date VARCHAR(#{lt_date}) NULL, date_added_to_site VARCHAR(#{lt_date}) NULL, date_created VARCHAR(#{lt_date}) NULL, date_issued VARCHAR(#{lt_date}) NULL, date_available VARCHAR(#{lt_date}) NULL, date_valid VARCHAR(#{lt_date}) NULL, date_modified VARCHAR(#{lt_date}) NULL, date_translated VARCHAR(#{lt_date}) NULL, /* date DATE, */ /* date_added_to_site DATE, */ /* date_created DATE, */ /* date_issued DATE, */ /* date_available DATE, */ /* date_valid DATE, */ /* date_modified DATE, */ /* date_translated DATE, */ type VARCHAR(#{lt_type}) NULL, description VARCHAR(#{lt_description}) NULL, publisher VARCHAR(#{lt_publisher}) NULL, contributor VARCHAR(#{lt_contributor}) NULL, prepared_by VARCHAR(#{lt_prepared_by}) NULL, digitized_by VARCHAR(#{lt_digitized_by}) NULL, format VARCHAR(#{lt_format}) NULL, identifier VARCHAR(#{lt_identifier}) NULL, source VARCHAR(#{lt_source}) NULL, language VARCHAR(#{lt_language}) NULL, language_original VARCHAR(#{lt_language_original}) NULL, relation VARCHAR(#{lt_relation}) NULL, coverage VARCHAR(#{lt_coverage}) NULL, rights VARCHAR(#{lt_rights}) NULL, copyright VARCHAR(#{lt_copyright}) NULL, owner VARCHAR(#{lt_owner}) NULL, keywords VARCHAR(#{lt_keywords}) NULL, comment VARCHAR(#{lt_comment}) NULL, loc VARCHAR(#{lt_loc}) NULL, dewey VARCHAR(#{lt_dewey}) NULL, isbn VARCHAR(#{lt_isbn}) NULL, pg VARCHAR(#{lt_pg}) NULL, abstract VARCHAR(#{lt_abstract}) NULL, prefix_a TEXT NULL, prefix_b TEXT NULL, skin VARCHAR(#{lt_skin}) NULL, markup VARCHAR(#{lt_markup}) NULL, links VARCHAR(#{lt_links}) NULL, information VARCHAR(#{lt_information}) NULL, contact VARCHAR(#{lt_contact}) NULL, suffix VARCHAR(#{lt_suffix}) NULL, filename VARCHAR(#{lt_filename}) NULL UNIQUE, types CHAR(#{lt_types}) NULL, subj VARCHAR(#{lt_subj}) NULL, original_publication VARCHAR(#{lt_orig_pub}) NULL, original_publication_date VARCHAR(#{lt_orig_pub_date}) NULL, original_publication_institution VARCHAR(#{lt_orig_pub_institution}) NULL, original_publication_nationality VARCHAR(#{lt_orig_pub_nationality}) NULL, writing_focus_nationality VARCHAR(#{lt_writing_focus_nationality}) NULL, topic_register VARCHAR(#{lt_topic_register}) NULL ); }) @comment.metadata end def documents # create documents base print %{ to be populated from documents files create tables documents document_trade document_env data import through ruby transfer } unless @opt.cmd =~/q/ @conn.execute(%{ CREATE TABLE documents ( lid BIGINT PRIMARY KEY, metadata_tid BIGINT REFERENCES metadata, ocn SMALLINT, ocnd VARCHAR(6), ocns VARCHAR(6), clean TEXT NULL, body TEXT NULL, seg VARCHAR(#{document_seg}) NULL, lev SMALLINT NULL, lev1 SMALLINT, lev2 SMALLINT, lev3 SMALLINT, lev4 SMALLINT, lev5 SMALLINT, lev6 SMALLINT, en_a SMALLINT NULL, en_z SMALLINT NULL, en_a_asterisk SMALLINT NULL, en_z_asterisk SMALLINT NULL, en_a_plus SMALLINT NULL, en_z_plus SMALLINT NULL, digest_clean CHAR(#{@@dl}), digest_all CHAR(#{@@dl}), types CHAR(1) NULL ); }) @comment.documents end def endnotes print %{ to be populated from document files create tables endnotes data import through ruby transfer } unless @opt.cmd =~/q/ @conn.execute(%{ CREATE TABLE endnotes ( nid BIGINT PRIMARY KEY, document_lid BIGINT REFERENCES documents, nr SMALLINT, clean TEXT NULL, body TEXT NULL, ocn SMALLINT, ocnd VARCHAR(6), ocns VARCHAR(6), digest_clean CHAR(#{@@dl}), metadata_tid BIGINT REFERENCES metadata ); }) @comment.endnotes end def endnotes_asterisk print %{ to be populated from document files create tables endnotes_asterisk data import through ruby transfer } unless @opt.cmd =~/q/ @conn.execute(%{ CREATE TABLE endnotes_asterisk ( nid BIGINT PRIMARY KEY, document_lid BIGINT REFERENCES documents, nr SMALLINT, clean TEXT NULL, body TEXT NULL, ocn SMALLINT, ocnd VARCHAR(6), ocns VARCHAR(6), digest_clean CHAR(#{@@dl}), metadata_tid BIGINT REFERENCES metadata ); }) @comment.endnotes_asterisk end def endnotes_plus print %{ to be populated from document files create tables endnotes_plus data import through ruby transfer } unless @opt.cmd =~/q/ @conn.execute(%{ CREATE TABLE endnotes_plus ( nid BIGINT PRIMARY KEY, document_lid BIGINT REFERENCES documents, nr SMALLINT, clean TEXT NULL, body TEXT NULL, ocn SMALLINT, ocnd VARCHAR(6), ocns VARCHAR(6), digest_clean CHAR(#{@@dl}), metadata_tid BIGINT REFERENCES metadata ); }) @comment.endnotes_plus end def urls # create documents file links mapping print %{ currently using sisu dbi module to be populated from documents files create tables urls data import through ruby transfer } unless @opt.cmd =~/q/ @conn.execute(%{ CREATE TABLE urls ( metadata_tid BIGINT REFERENCES metadata, plaintext varchar(512), html_toc varchar(512), html_doc varchar(512), xhtml varchar(512), xml_sax varchar(512), xml_dom varchar(512), odf varchar(512), pdf_p varchar(512), pdf_l varchar(512), concordance varchar(512), latex_p varchar(512), latex_l varchar(512), digest varchar(512), manifest varchar(512), markup varchar(512), sisupod varchar(512) ); }) @comment.urls end self end end class Comment def initialize(conn,sql_type='pg') @conn=conn if sql_type =~ /pg/; psql else none end end def psql def conn_execute_array(sql_arr) @conn.transaction do |conn| sql_arr.each do |sql| conn.execute(sql) end end end #def conn_execute_array(sql_arr) # sql_arr.each do |sql| # @conn.execute(sql) # end #end def metadata sql_arr=[ %{COMMENT ON Table metadata IS 'contains SiSU documents metadata with metadata';}, %{COMMENT ON COLUMN metadata.tid IS 'unique';}, %{COMMENT ON COLUMN metadata.filename IS 'document filename';}, %{COMMENT ON COLUMN metadata.title IS 'metadata title (dublin core element 1)';}, %{COMMENT ON COLUMN metadata.subtitle IS 'document subtitle';}, %{COMMENT ON COLUMN metadata.creator IS 'metadata creator (dublin core element 2)';}, %{COMMENT ON COLUMN metadata.author IS 'metadata author (dublin core element 2)';}, %{COMMENT ON COLUMN metadata.illustrator IS 'metadata illustrator';}, %{COMMENT ON COLUMN metadata.translator IS 'metadata translator';}, %{COMMENT ON COLUMN metadata.subject IS 'metadata subject (dublin core element 3)';}, %{COMMENT ON COLUMN metadata.date IS 'metadata date (dublin core element 7)';}, %{COMMENT ON COLUMN metadata.date_created IS 'metadata date created (dublin core)';}, %{COMMENT ON COLUMN metadata.date_issued IS 'metadata date of issue (dublin core)';}, %{COMMENT ON COLUMN metadata.date_available IS 'metadata date available (dublin core)';}, %{COMMENT ON COLUMN metadata.date_valid IS 'metadata date valid (dublin core)';}, %{COMMENT ON COLUMN metadata.date_modified IS 'metadata date modified (dublin core)';}, %{COMMENT ON COLUMN metadata.type IS 'metadata type (dublin core element 8)';}, %{COMMENT ON COLUMN metadata.description IS 'metadata description (dublin core element 4)';}, %{COMMENT ON COLUMN metadata.publisher IS 'metadata publisher (dublin core element 5)';}, %{COMMENT ON COLUMN metadata.contributor IS 'metadata contributor (dublin core element 6)';}, %{COMMENT ON COLUMN metadata.prepared_by IS 'metadata markup prepared by';}, %{COMMENT ON COLUMN metadata.digitized_by IS 'metadata digitized by';}, %{COMMENT ON COLUMN metadata.format IS 'metadata format (dublin core element 9)';}, %{COMMENT ON COLUMN metadata.identifier IS 'metadata identifier (dublin core element 10)';}, %{COMMENT ON COLUMN metadata.source IS 'metadata source (dublin core element 11)';}, %{COMMENT ON COLUMN metadata.language IS 'metadata language (dublin core element 12)';}, %{COMMENT ON COLUMN metadata.language_original IS 'metadata original language';}, %{COMMENT ON COLUMN metadata.relation IS 'metadata (dublin core element 13)';}, %{COMMENT ON COLUMN metadata.coverage IS 'metadata coverage (dublin core element 14)';}, %{COMMENT ON COLUMN metadata.rights IS 'metadata rights / copyright / license (dublin core element 15)';}, %{COMMENT ON COLUMN metadata.owner IS 'metadata owner';}, %{COMMENT ON COLUMN metadata.keywords IS 'metadata keywords';}, %{COMMENT ON COLUMN metadata.comment IS 'metadata comment';}, %{COMMENT ON COLUMN metadata.abstract IS 'metadata abstract';}, %{COMMENT ON COLUMN metadata.loc IS 'metadata library of congress';}, %{COMMENT ON COLUMN metadata.dewey IS 'metadata dewey';}, %{COMMENT ON COLUMN metadata.isbn IS 'metadata isbn';}, %{COMMENT ON COLUMN metadata.pg IS 'metadata project gutenberg number';}, %{COMMENT ON COLUMN metadata.prefix_a IS 'metadata prefix';}, %{COMMENT ON COLUMN metadata.prefix_b IS 'metadata prefix';}, %{COMMENT ON COLUMN metadata.skin IS 'metadata sisu skin';}, %{COMMENT ON COLUMN metadata.markup IS 'metadata markup source';}, %{COMMENT ON COLUMN metadata.links IS 'metadata links';}, %{COMMENT ON COLUMN metadata.information IS 'metadata information';}, %{COMMENT ON COLUMN metadata.contact IS 'metadata contact';}, %{COMMENT ON COLUMN metadata.suffix IS 'metadata sisu suffix (output related)';}, %{COMMENT ON COLUMN metadata.filename IS 'metadata source filename';}, %{COMMENT ON COLUMN metadata.types IS 'document types scroll 1, seg 2, both 3';}, %{COMMENT ON COLUMN metadata.subj IS 'subject areas - no way to populate at present as not mapped';}, ] conn_execute_array(sql_arr) end def documents sql_arr=[ %{COMMENT ON Table documents IS 'contains searchable text of SiSU documents';}, %{COMMENT ON COLUMN documents.lid IS 'unique';}, %{COMMENT ON COLUMN documents.metadata_tid IS 'tie to title in metadata';}, %{COMMENT ON COLUMN documents.lev IS 'doc level 1-6 \d\~';}, %{COMMENT ON COLUMN documents.seg IS 'segment name from level 4';}, %{COMMENT ON COLUMN documents.ocn IS 'object citation number';}, %{COMMENT ON COLUMN documents.en_a IS 'first endnote number in text object (eg. NULL or 34) (used with en_z to create range)';}, %{COMMENT ON COLUMN documents.en_z IS 'last endnote number within text object (eg. NULL, 34 or say 47) (used with en_a to create range)';}, %{COMMENT ON COLUMN documents.en_a_asterisk IS 'first endnote number in text object (eg. NULL or 34) (used with en_z_asterisk to create range)';}, %{COMMENT ON COLUMN documents.en_z_asterisk IS 'last endnote number within text object (eg. NULL, 34 or say 47) (used with en_a_asterisk to create range)';}, %{COMMENT ON COLUMN documents.en_a_plus IS 'first endnote number in text object (eg. NULL or 34) (used with en_z_plus to create range)';}, %{COMMENT ON COLUMN documents.en_z_plus IS 'last endnote number within text object (eg. NULL, 34 or say 47) (used with en_a_plus to create range)';}, %{COMMENT ON COLUMN documents.types IS 'document types seg scroll';}, %{COMMENT ON COLUMN documents.clean IS 'text object - substantive text: clean, stripped of markup';}, %{COMMENT ON COLUMN documents.body IS 'text object - substantive text: light html markup';}, %{COMMENT ON COLUMN documents.lev1 IS 'document structure, level 1';}, %{COMMENT ON COLUMN documents.lev2 IS 'document structure, level 2';}, %{COMMENT ON COLUMN documents.lev3 IS 'document structure, level 3';}, %{COMMENT ON COLUMN documents.lev4 IS 'document structure, level 4';}, %{COMMENT ON COLUMN documents.lev5 IS 'document structure, level 5';}, %{COMMENT ON COLUMN documents.lev6 IS 'document structure, level 6';} ] conn_execute_array(sql_arr) end def endnotes sql_arr=[ %{COMMENT ON Table endnotes IS 'contains searchable text of SiSU documents endnotes';}, %{COMMENT ON COLUMN endnotes.nid IS 'unique';}, %{COMMENT ON COLUMN endnotes.document_lid IS 'ties to text block from which referenced';}, %{COMMENT ON COLUMN endnotes.nr IS 'endnote number ';}, %{COMMENT ON COLUMN endnotes.clean IS 'endnote substantive content, stripped of markup';}, %{COMMENT ON COLUMN endnotes.body IS 'endnote substantive content';}, %{COMMENT ON COLUMN endnotes.ocn IS 'object citation no# <\~(\d+)> from which endnote is referenced';}, %{COMMENT ON COLUMN documents.metadata_tid IS 'tie to title in metadata - unique for each document';} ] conn_execute_array(sql_arr) end def endnotes_asterisk sql_arr=[ %{COMMENT ON Table endnotes_asterisk IS 'contains searchable text of SiSU documents endnotes asterisk';}, %{COMMENT ON COLUMN endnotes_asterisk.nid IS 'unique';}, %{COMMENT ON COLUMN endnotes_asterisk.document_lid IS 'ties to text block from which referenced';}, %{COMMENT ON COLUMN endnotes_asterisk.nr IS 'endnote number ';}, %{COMMENT ON COLUMN endnotes_asterisk.clean IS 'endnote substantive content, stripped of markup';}, %{COMMENT ON COLUMN endnotes_asterisk.body IS 'endnote substantive content';}, %{COMMENT ON COLUMN endnotes_asterisk.ocn IS 'object citation no# <\~(\d+)> from which endnote is referenced';}, %{COMMENT ON COLUMN documents.metadata_tid IS 'tie to title in metadata - unique for each document';} ] conn_execute_array(sql_arr) end def endnotes_plus sql_arr=[ %{COMMENT ON Table endnotes_plus IS 'contains searchable text of SiSU documents endnotes';}, %{COMMENT ON COLUMN endnotes_plus.nid IS 'unique';}, %{COMMENT ON COLUMN endnotes_plus.document_lid IS 'ties to text block from which referenced';}, %{COMMENT ON COLUMN endnotes_plus.nr IS 'endnote number ';}, %{COMMENT ON COLUMN endnotes_plus.clean IS 'endnote substantive content, stripped of markup';}, %{COMMENT ON COLUMN endnotes_plus.body IS 'endnote substantive content';}, %{COMMENT ON COLUMN endnotes_plus.ocn IS 'object citation no# <\~(\d+)> from which endnote is referenced';}, %{COMMENT ON COLUMN documents.metadata_tid IS 'tie to title in metadata - unique for each document';}, ] conn_execute_array(sql_arr) end def urls sql_arr=[ %{COMMENT ON Table urls IS 'contains base url links to different SiSU output';}, %{COMMENT ON COLUMN documents.metadata_tid IS 'tie to title in metadata - unique for each document, the mapping of rows is one to one';}, %{COMMENT ON COLUMN urls.plaintext IS 'plaintext utf-8';}, %{COMMENT ON COLUMN urls.html_toc IS 'table of contents for segmented html document';}, %{COMMENT ON COLUMN urls.html_doc IS 'html document (scroll)';}, %{COMMENT ON COLUMN urls.xhtml IS 'xhtml document (scroll)';}, %{COMMENT ON COLUMN urls.xml_sax IS 'xml sax oriented document (scroll)';}, %{COMMENT ON COLUMN urls.xml_dom IS 'xml dom oriented document (scroll)';}, %{COMMENT ON COLUMN urls.odf IS 'opendocument format text';}, %{COMMENT ON COLUMN urls.pdf_p IS 'pdf portrait';}, %{COMMENT ON COLUMN urls.pdf_l IS 'pdf landscape';}, %{COMMENT ON COLUMN urls.concordance IS 'rudimentary document index linked to html';}, %{COMMENT ON COLUMN urls.latex_p IS 'latex portrait';}, %{COMMENT ON COLUMN urls.latex_l IS 'latex_landscape';}, %{COMMENT ON COLUMN urls.markup IS 'markup';}, %{COMMENT ON COLUMN urls.sisupod IS 'SiSU document format .tgz (all SiSU information on document)';}, ] conn_execute_array(sql_arr) end self end def none def metadata end def documents end def endnotes end def endnotes_asterisk end def endnotes_plus end def urls end self end end end __END__