Далее для каждой колонки каждой таблицы БД Проба даётся вид и способ формирования предложения (высказывания), содержащего значение этой колонки.
NB. шаблоны предложений являются спецификациями SQL-скриптов выгружающих в ACE-предложения. И как обычно бывает устарели;-)
Также приводятся SQL-скрипты и sh-скрипты их запуска.
Путь от записи основной таблицы к значению колонки вспомогательной таблицы описывается навигационной формулой. При описании пути используется следующая простая нотация:
$ - текущая запись какой-то основной таблицы,
"." - получение атрибута записи или если атрибут — ссылочный — переход по стрелке к записи другой таблицы.
Например:
Пусть $ означает текущую запись в таблице measurement, тогда
$.id — значение колонки id текущей записи в таблице measurement, а
$.locality_id.latitude — приписанная текущей записи широта из таблицы localities.
Обозначения: Шаблон предложения представляет собой размеченный текст, т.е. текст в котором в угловых скобках написаны навигационные формулы для получения значений, которые должны быть подставлены в текст на этапе генерации.
Например:
Пусть $ означает текущую запись в таблице measurement, тогда
S<$.id> - переменная обозначающая образец,
P<$.id> - переменная обозначающая место сбора образца,
B<$.bibl_id> - переменная обозначающая публикацию.
Здесь запись выражения в угловых скобках означает, что надо вычислить значение выражения и подставить в текст (в символьном виде).
Содержит сведения о публикациях.
B<$.id> - переменная для публикации как части печатного издания.
Шаблоны предложений:
There is a publication$dic B<$.id>.
A year$dic of the publication$dic B<$.id> is <$.year>.
A title$dic of the publication$dic B<$.id> is "<$.title>".
A journal_reference$dic of the publication$dic B<$.id> is "<$.journal>".
A first_page$dic of the publication$dic B<$.id> is <$.pagefrom>.
A last_page$dic of the publication$dic B<$.id> is <$.pageto>.
A db_number$dic of the publication$dic B<$.id> is <$.id>.
Строка таблицы содержит информацию об образце породы, описанном в научной публикации.
Мы различаем образец и место сбора образца. Соответственно нам нужны две переменные.
Пусть $ - текущая запись в таблице measurements,
S<$.id> - переменная для образца,
P<$.id> - переменная для места сбора. !!!это устарело см. SQL-скрипт!
Шаблоны предложений:
There is a sample$dic S<$.id>.
A db_number$dic of the sample$dic S<$.id> is <$.id>.
There is a place$dic P<$.id>.
A db_number$dic of the place$dic P<$.id> is <$.id>.
A gathering_place$dic of the sample$dic S<$.id> is P<$.id>.
A latitude$dic of the place$dic P<$.id> is <$.locality_id.latitude>.
A longitude$dic of the place$dic P<$.id> is <$.locality_id.longitude>.
The place$dic P<$.id> is a part$dic of <$.locality_id.lgroup_id.name>$dic.
The place$dic P<$.id> is a part$dic of <$.locality_id.lglobal_id.name>$dic.
A reference$dic of the place$dic P<$.id> is "<$.llocal_id.name>".
The sample$dic S<$.id> is a <$.rock_id.name>$dic.
The publication$dic B<$.bibl_id> describes$dic the sample$dic S<$.id>.
An authorial_number$dic of the sample$dic S<$.id> is "<$.auth_id.name>".
В этой таблице хранятся данные о концентрациях различных химических элементов в пробах.
id - номер строки в таблице concentrations.
Нам понадобятся переменные:
- U<$.id> - обозначает часть материала образца, состоящую из конкретного химического вещества или изотопа.
- W<$.id> - обозначает величину концентрации некоторого вещества в некотором образце.
Шаблоны предложений:
There is a substance$dic U<$.id>. A db_number$dic of the substance$dic U<$.id> is <$.id>.
A chemical_formula$dic of the substance$dic U<$.id> is "<$.element.name>".
The sample$dic S<$.measurement> includes$dic the substance$dic U<$.id>.
There is a weight_percent$dic W<$.id>. A db_number$dic of the weight_percent$dic W<$.id> is <$.id>.
A component$dic of the weight_percent$dic W<$.id> is the substance$dic U<$.id>.
A mixture$dic of the weight_percent$dic W<$.id> is the sample$dic S<$.measurement>.
A value$dic of the weight_percent$dic W<$.id> is <$.concentration>.
select
'SAM'||m.id||' is a n:sample$dic.' as sample /*id*/
, ' An n:authorial_number$dic of SAM'||m.id||' is "'||an.name||'".' as authn /*auth_id*/
,NULLIF(' An n:age$dic of SAM'||m.id||' is '||ag.name||'.',
' An n:age$dic of SAM'||m.id||' is '||'.') as age /*age*/
, ' SAM'||m.id||' is a n:'||replace(ro.name,' ','_')||'$dic.' as rock /*rock_id*/
, ' PUB'||m.bibl_id||' v:describes$dic SAM'||m.id||'.' as artcl /*bibl_id*/
, 'PLC'||lo.id||' is a n:place$dic.' as place
, ' A n:latitude$dic of PLC'||lo.id||' is '||lo.latitude||'.' as latitude /*locality_id*/
, ' A n:longitude$dic of PLC'||lo.id||' is '||lo.longitude||'.' as longitude
,NULLIF(' An n:elevation$dic of PLC'||lo.id||' is '||ad.name||'.',
' An n:elevation$dic of PLC'||lo.id||' is '||'.') as elevation /*alt_depth_id*/
, ' A n:reference$dic of SAM'||m.id||' is "'||ll.name||'".' as location /*llocal_id*/
, ' PLC'||lo.id||' is a n:part$dic of '||replace(lgr.name,' ','_')||'$dic.' as gr_part
, ' PLC'||lo.id||' is a n:part$dic of '||replace(lgl.name,' ','_')||'$dic.' as gl_part
, ' A n:gathering_place$dic of SAM'||m.id||' is PLC'||lo.id||'.' as g_place
from proba.measurements m
,proba.localities lo, proba.lgroup lgr, proba.lglobal lgl, proba.llocal ll
,proba.alt_depth ad, proba.rocks ro, proba.auth_numb an, proba.ages ag
where m.status=3
and m.bibl_id = :BID /*** parameter! ***/
and m.locality_id = lo.id
and lo.lgroup_id = lgr.id and lo.lglobal_id = lgl.id and m.llocal_id = ll.id
and m.alt_depth_id = ad.id
and m.rock_id = ro.id
and m.auth_id = an.id
and m.age = ag.id
/*
order by lgr.name*/
;
select
'SUB'||conc.id||' is a n:substance$dic.'
,'SUB'||conc.id||' is a n:'||lower(e.name)||'$dic.'
,'SAM'||conc.measurement||' v:includes$dic SUB'||conc.id||'.'
,' A n:weight_percent_content$dic of SUB'||conc.id||' is '||conc. concentration||'.'
from proba.concentrations conc, proba.elements e
where conc.element = e.id and (0=1
)
order by conc.measurement
;
select
' or conc.measurement='||m.id
from proba.measurements m
where m.status=3 and m.bibl_id=:BID /*** parameter! ***/
/* это лишнее: order by m.bibl_id*/
;
select
'SAM'||m.id||' is a n:sample$dic.' as sample /*id*/
, ' An n:authorial_number$dic of SAM'||m.id||' is "'||an.name||'".' as authn /*auth_id*/
,NULLIF(' An n:age$dic of SAM'||m.id||' is '||ag.name||'.',
' An n:age$dic of SAM'||m.id||' is '||'.') as age /*age*/
, ' SAM'||m.id||' is a n:'||replace(ro.name,' ','_')||'$dic.' as rock /*rock_id*/
, ' PUB'||m.bibl_id||' v:describes$dic SAM'||m.id||'.' as artcl /*bibl_id*/
, 'PLC'||lo.id||' is a n:place$dic.' as place
, ' A n:latitude$dic of PLC'||lo.id||' is '||lo.latitude||'.' as latitude /*locality_id*/
, ' A n:longitude$dic of PLC'||lo.id||' is '||lo.longitude||'.' as longitude
,NULLIF(' An n:elevation$dic of PLC'||lo.id||' is '||ad.name||'.',
' An n:elevation$dic of PLC'||lo.id||' is '||'.') as elevation /*alt_depth_id*/
, ' A n:reference$dic of SAM'||m.id||' is "'||ll.name||'".' as location /*llocal_id*/
, ' PLC'||lo.id||' is a n:part$dic of '||replace(lgr.name,' ','_')||'$dic.' as gr_part
, ' PLC'||lo.id||' is a n:part$dic of '||replace(lgl.name,' ','_')||'$dic.' as gl_part
, ' A n:gathering_place$dic of SAM'||m.id||' is PLC'||lo.id||'.' as g_place
from proba.measurements m
,proba.localities lo, proba.lgroup lgr, proba.lglobal lgl, proba.llocal ll
,proba.alt_depth ad, proba.rocks ro, proba.auth_numb an, proba.ages ag
where m.status=3
and m.bibl_id = :BID /*** parameter! ***/
and m.locality_id = lo.id
and lo.lgroup_id = lgr.id and lo.lglobal_id = lgl.id and m.llocal_id = ll.id
and m.alt_depth_id = ad.id
and m.rock_id = ro.id
and m.auth_id = an.id
and m.age = ag.id
/*
order by lgr.name*/
;
select replace(name,' ','-') from proba.rocks
where id<>64 and id<>173
order by name;
select 'Every '||replace(name,' ','-')||' is a rock.' from proba.rocks
where id<>64 and id<>173
order by name;
# $1 - BID, bibl.id.
cat bibl.sql meas.sql >tmp_.sql
psql -t -A -F "|" -d geo -v BID=$1 <tmp_.sql >tmp_.ace
gawk '{n=split($0,ar,"|"); for(i=1;i<=n;i=i+1)print(ar[i]);}' <tmp_.ace >Art$1_tmp.ace
psql -t -A -F "" -d geo -v BID=$1 <con_gen.sql >tmp_.sql
cat con_begin.sql tmp_.sql con_end.sql >tmp2_.sql
psql -t -A -F "|" -d geo <tmp2_.sql >tmp2_.ace
gawk '{n=split($0,ar,"|"); for(i=1;i<=n;i=i+1)print(ar[i]);}' <tmp2_.ace >>Art$1_tmp.ace
gawk '{if (length($0)!=0) print $0}' <Art$1_tmp.ace >Art$1.ace.txt
#rm *_.*
#echo 'Every rock is something' >rocks_.ace
psql -d geo -t -f rocks.sql >>rocks.txt
#gawk '{if (length($0)!=0) print $0}' <rocks_.ace >rocks.ace
#echo ' that is a nothing.' >>rocks.ace
#psql -t -A -F "|" -d geo -v BID=$1 <tmp_.sql >tmp_.ace
#gawk '{n=split($0,ar,"|"); for(i=1;i<=n;i=i+1)print(ar[i]);}' <tmp_.ace >Art$1_.ace
#psql -t -A -F "" -d geo -v BID=$1 <con_gen.sql >tmp_.sql
#cat con_begin.sql tmp_.sql con_end.sql >tmp2_.sql
#psql -t -A -F "|" -d geo <tmp2_.sql >tmp2_.ace
#gawk '{n=split($0,ar,"|"); for(i=1;i<=n;i=i+1)print(ar[i]);}' <tmp2_.ace >>Art$1_.ace
#gawk '{if ($0 !~ / \$dic\./ && $0 !~ / \./ && length($0)!=0) print $0}' <Art$1_.ace >Art$1.ace
#rm *_.*