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