H�!

�g er (loksins) b�inn a� krukka a�eins � gagnagrunnssilgreiningunum fyrir
or�ab�kina. H�r er uppf�r� tables.sql skr�, �samt en_US.sql og is_IS.sql locale
skilgreiningunum. �etta held �g a� s� loka�tg�fa af skilgreiningunum.

�g b�st ekki vi� a� hafa mikinn t�ma til a� standa � �essu � n�stunni, en
vonandi einhvern sm�.

Mig vantar reyndar skammstafanir � ensku m�lfr��iheitunum. �a� v�ri l�ka gott
ef menn litu a�eins � m�lfr��ireglurnar m�nar. �g er j� bara st�r�fr��ingur  :-)

Skipunin

SELECT grammar.id,function.name,gender.name,number.name
FROM grammar,function,gender,number
WHERE grammar.function=function.id AND
      grammar.gender=gender.id AND grammar.number=number.id AND
      function.locale='is_IS' AND gender.locale='is_IS' AND
      number.locale='is_IS' AND grammar.locale='en_US';

gefur

id|name       |name  |name
--+-----------+------+---------
 6|atviksor�  |ekkert|engin
 5|l�singaror�|ekkert|engin
 4|sagnor�    |ekkert|engin
 1|nafnor�    |ekkert|frj�ls
 2|nafnor�    |ekkert|eintala
 3|nafnor�    |ekkert|fleirtala                                                        
                                        

sem eiga a� vera allir leyfilegir or�flokkar � ensku. H�r og annarsta�ar �ttu
fyrirsagnirnar a� vera "function", "gender", "number" e�a "or�flokkur", "kyn",
"tala". Hugmyndin er a� ef ma�ur er a� setja inn �slenskt or� f�r ma�ur lista
yfir leyfilega or�flokka � �slensku en listann yfir enska or�flokka fyrir ensk
or�. Svo m� alltaf setja inn skilgreiningar fyrir fleiri tungum�l. Listinn
birtist au�vita� � manns eigin tungum�li, �h�� tungum�linu sem or�i� tilheyrir.
�essvegna eru f�rslur fyrir t.d. �ll kyn � �llum tungum�laskilgreiningunum.

SELECT grammar.id,function.name,gender.name,number.name
FROM grammar,function,gender,number
WHERE grammar.function=function.id AND
      grammar.gender=gender.id AND grammar.number=number.id AND
      function.locale='is_IS' AND gender.locale='is_IS' AND
      number.locale='is_IS' AND grammar.locale='is_IS';

gefur

id|name       |name     |name
--+-----------+---------+---------
18|atviksor�  |ekkert   |engin
17|l�singaror�|ekkert   |engin
16|sagnor�    |ekkert   |engin
 9|nafnor�    |hvorugkyn|frj�ls
 8|nafnor�    |kvennkyn |frj�ls
 7|nafnor�    |karlkyn  |frj�ls
12|nafnor�    |hvorugkyn|eintala
11|nafnor�    |kvennkyn |eintala
10|nafnor�    |karlkyn  |eintala
15|nafnor�    |hvorugkyn|fleirtala
14|nafnor�    |kvennkyn |fleirtala
13|nafnor�    |karlkyn  |fleirtala                                                     
                                        

sem eru allir �slenskir or�flokkar sem �g man eftir.

Til a� f� ensku heitin setur ma�ur {function,number,gender}.locale='en_US' og
f�r:
id|name     |name|name
--+---------+----+--------
 6|adverb   |none|none
 5|adjective|none|none
 4|verb     |none|none
 1|noun     |none|free
 2|noun     |none|singular
 3|noun     |none|plural                                                               
                                        

og

id|name     |name     |name
--+---------+---------+--------
18|adverb   |none     |none
17|adjective|none     |none
16|verb     |none     |none
 9|noun     |neuter   |free
 8|noun     |feminine |free
 7|noun     |masculine|free
12|noun     |neuter   |singular
11|noun     |feminine |singular
10|noun     |masculine|singular
15|noun     |neuter   |plural
14|noun     |feminine |plural
13|noun     |masculine|plural
(12 rows)                                                                              
                                        

N� �arf �g bara a� forrita �etta inn � java Locale klasann. �� v�ri komin �
java pakkann svotil �ll virkni sem �arf til a� �tf�ra or�alistann, nema einna
helst �ryggishlutinn.

M�n hugmynd a� notendafleti er eitthva� � �essa lei�:

1) Menn hafa stillt hj� s�r "frumm�l", "vinnum�l" og "eigin m�l". �a� ���ir a�
ma�ur er a� ���a �r frumm�linu � vinnum�li�, en vefurinn birtist � manns eigin
m�li. �etta og fleira v�ri stillt � s�r stillingas��u sem vi� nennum ekki a�
hafa �hyggjur af fyrr en anna� er fari� a� virka nokkurnveginn.

Annar m�guleiki er a� hafa "eiginm�l" og lista af virkum m�lum. �� birtast
allar ���ingar � milli allra virku m�lanna � �llum leitum og �a� er leita� a�
or�um � or�ab�kunum fyrir �ll virku m�lin.

�a� g�ti veri� sni�ugt til a� hafa �nnur tungum�l til hli�sj�nar og er ekkert
(miki�) erfi�ara a� forrita.

2) A�alskj�r.

H�r er leitarv�l sem ma�ur notar til a� leita a� or�um. Fyrir ne�an
leitarv�lina birtist listi me� ni�urst��u s��ustu leitar sem er t�mur � upphafi.

Ef ma�ur smellir � or� � listanum, hvort sem �a� er � frumm�linu e�a
vinnum�linu, �� f�rist ma�ur yfir � s��u me� uppl�singum um �a� or�.

3) Sm�atri�askj�r

H�r eru s�nd heilm�rg sm�atri�i um or� og menn geta breytt eiginleikum or�a og
���inga, e�a b�tt vi� ���ingum.

�rygiskerfi g�ti veri� einfalt og gott. Hver notandi hefur notendanafn og
lykilor� og lista af tungum�lum sem hann kann. Svo m� bara breyta or�um � m�lum
sem ma�ur kann.

Allt sem er h�ttulegt �yrfti bara a� gera beint � SQL og einn e�a tveir hef�u
a�gang a� �v�.

Logi

-- 
Logi Ragnarsson ([EMAIL PROTECTED])  |  Some day we all shall be out of scope
PGP key IDs: A6D8479D & 42935585   |  Sex, Maths & Rock'n'Roll!
-- Build tables to hold lexicon in postgreSQL.

BEGIN WORK;

-- Stores the names of languages and locales.
CREATE TABLE locales (
 locale          VARCHAR(15),          -- ISO locale ID

 charset         VARCHAR(15) NOT NULL, -- ISO charset name
 localename_e    TEXT,  -- locale name in english
 localename_l    TEXT,  -- locale name in language of locale

 PRIMARY KEY (locale)
);

-- Links to on-line dictionaries. Each dictionary is associated with a
-- locale and is describet in the language of the locale.
CREATE TABLE dictionaries (
 id              SERIAL,

 locale          VARCHAR(15),
 name            VARCHAR(15) NOT NULL,
 url             TEXT NOT NULL,

 PRIMARY KEY (id),
 FOREIGN KEY (locale) REFERENCES locales(locale)
);

-- Gives the names of word functions in the various locales
-- id's have the following meanings:
--   0 None
--   1 Noun
--   2 Adjective
--   3 Adverb
CREATE TABLE function (
 id              INTEGER,

 locale          VARCHAR(15),
 name            TEXT,
 short		 VARCHAR(5),

 PRIMARY KEY (locale,id),
 FOREIGN KEY (locale) REFERENCES locales(locale)
);

-- Names of genders in the locales.
-- id's have the following meanings:
--   0 None
--   1 Masculine
--   2 Feminine
--   3 Neuter
--   4 Genus
CREATE TABLE gender (
 id              INTEGER,

 locale          VARCHAR(15),
 name            TEXT,
 short		 VARCHAR(5),

 PRIMARY KEY (locale,id),
 FOREIGN KEY (locale) REFERENCES locales(locale)
);

-- Names of numbers (eg. singular, plural) in the locales.
-- id's have the follofing meanings:
--  0 No number
--  1 Any number
--  2 Singular
--  3 Plural
CREATE TABLE number (
 id              INTEGER,

 locale          VARCHAR(15),
 name            TEXT,
 short		 VARCHAR(5),

 PRIMARY KEY (locale,id),
 FOREIGN KEY (locale) REFERENCES locales(locale)
);

-- A specific combination of (function, gender, number) is in this
-- table iff it is possible in the locale
CREATE TABLE grammar (
 id              SERIAL,

 locale          VARCHAR(15),
 function        INTEGER NOT NULL,  -- function of word
 gender          INTEGER NOT NULL,  -- gender of word
 number          INTEGER NOT NULL,  -- number restrictions of word

 PRIMARY KEY (locale,id),
 FOREIGN KEY (locale)          REFERENCES locale  (id),
 FOREIGN KEY (function,locale) REFERENCES function(id,locale),
 FOREIGN KEY (gender,locale)   REFERENCES gender  (id,locale),
 FOREIGN KEY (number,locale)   REFERENCES number  (id,locale)
);

-- Actual list of words. All words for all locales are stored in this
-- table.
CREATE TABLE lexicon (
 id              SERIAL,

 locale          VARCHAR(15),
 word            TEXT NOT NULL,
 grammar         INTEGER,
 expl            TEXT,

 PRIMARY KEY (id),
 UNIQUE(word,locale,grammar),
 FOREIGN KEY (locale) REFERENCES locales(locale),
 FOREIGN KEY (locale,grammar) REFERENCES grammar(locale,id)
);

-- Translations. Word with id id_a is translated to word with id=id_b.
CREATE TABLE lex_links (
 id_a            INTEGER,
 id_b            INTEGER,
 expl            TEXT,

 PRIMARY KEY (id_a, id_b),
 FOREIGN KEY (id_a,id_b) REFERENCES lexicon(id,id)
);

----------------------------------------------------------------------
-- Below we use the user groups "lexicon" and "lexiconadm"
-- which have to be created with commands similar to
--   insert into pg_group (groname, grosysid, grolist) values ('lexicon', '100', '{1,2,3}' );
--   insert into pg_group (groname, grosysid, grolist) values ('lexiconadm', '101', '{1,2}' );    

-- Give administrators all priveleges
grant all on function to group lexiconadm;
grant all on function_pkey to group lexiconadm;
grant all on dictionaries to group lexiconadm;
grant all on dictionaries_id_seq to group lexiconadm;
grant all on dictionaries_pkey to group lexiconadm;
grant all on gender to group lexiconadm;
grant all on gender_pkey to group lexiconadm;
grant all on lex_links to group lexiconadm;
grant all on lex_links_pkey to group lexiconadm;
grant all on lexicon to group lexiconadm;
grant all on lexicon_id_seq to group lexiconadm;
grant all on lexicon_pkey to group lexiconadm;
grant all on locales to group lexiconadm;
grant all on locales_pkey to group lexiconadm;
grant all on number to group lexiconadm;
grant all on number_pkey to group lexiconadm;

-- Give users sufficient priveleges
grant select,update,insert on function to group lexicon;
grant select,update,insert on function_pkey to group lexicon;
grant select,update,insert on dictionaries to group lexicon;
grant select,update,insert on dictionaries_id_seq to group lexicon;
grant select,update,insert on dictionaries_pkey to group lexicon;
grant select,update,insert on gender to group lexicon;
grant select,update,insert on gender_pkey to group lexicon;
grant select,update,insert on lex_links to group lexicon;
grant select,update,insert on lex_links_pkey to group lexicon;
grant select,update,insert on lexicon to group lexicon;
grant select,update,insert on lexicon_id_seq to group lexicon;
grant select,update,insert on lexicon_pkey to group lexicon;
grant select,update,insert on locales to group lexicon;
grant select,update,insert on locales_pkey to group lexicon;
grant select,update,insert on number to group lexicon;
grant select,update,insert on number_pkey to group lexicon;

COMMIT;
-- Inserts grammar names and rules for en_US English
-- 
-- Hrafnkell - [EMAIL PROTECTED]

BEGIN WORK;

DELETE FROM locales WHERE locale='en_US';
DELETE FROM function WHERE locale='en_US';
DELETE FROM gender WHERE locale='en_US';
DELETE FROM number  WHERE locale='en_US';
DELETE FROM grammar WHERE locale='en_US';

INSERT INTO locales (locale,charset,localename_e,localename_l)
       VALUES ('en_US', 'us-ascii', 'English/United States', 'English/United States');

-- NAMES:

-- Function: 
INSERT INTO function (id, locale, name, short) VALUES (0, 'en_US','none', '');
INSERT INTO function (id, locale, name, short) VALUES (1, 'en_US','noun', '??');
INSERT INTO function (id, locale, name, short) VALUES (2, 'en_US','verb', '??');
INSERT INTO function (id, locale, name, short) VALUES (3, 'en_US','adjective', '??');
INSERT INTO function (id, locale, name, short) VALUES (4, 'en_US','adverb', '??');

-- Gender:
INSERT INTO gender (id, locale, name, short) VALUES (0, 'en_US','none', '');
INSERT INTO gender (id, locale, name, short) VALUES (1, 'en_US','masculine', '??');
INSERT INTO gender (id, locale, name, short) VALUES (2, 'en_US','feminine', '??');
INSERT INTO gender (id, locale, name, short) VALUES (3, 'en_US','neuter', '??');
INSERT INTO gender (id, locale, name, short) VALUES (4, 'en_US','genus', '??');

-- Number:
INSERT INTO number (id, locale, name, short) VALUES (0, 'en_US','none', '');
INSERT INTO number (id, locale, name, short) VALUES (1, 'en_US','free', '');
INSERT INTO number (id, locale, name, short) VALUES (2, 'en_US','singular', '??');
INSERT INTO number (id, locale, name, short) VALUES (3, 'en_US','plural', '??');

-- RULES:

-- Nouns, no gender, free singular or plural.
INSERT INTO grammar (locale, function, gender, number) VALUES ('en_US',1,0,1);
INSERT INTO grammar (locale, function, gender, number) VALUES ('en_US',1,0,2);
INSERT INTO grammar (locale, function, gender, number) VALUES ('en_US',1,0,3);

-- Verbs, no gender, no number.
INSERT INTO grammar (locale, function, gender, number) VALUES ('en_US',2,0,0);

-- Adjectives
INSERT INTO grammar (locale, function, gender, number) VALUES ('en_US',3,0,0);

-- Adverbs
INSERT INTO grammar (locale, function, gender, number) VALUES ('en_US',4,0,0);

COMMIT;








is_IS.sql

Reply via email to