Relāciju datu bāzu informācijas pieejamība semantiskā tīmekļa

Report
Relāciju datu bāzu informācijas
pieejamība semantiskā tīmekļa
tehnoloģijām
Guntars Būmans
20.06.2012.
Darba vadītājs: Dr.sc.comp., profesors
Kārlis Čerāns
1
RDB <-> OWL: modeļu atšķirības
• Elementu un saišu
vārdi
• Apakšklašu relācija
(mantošana)
• n:n relācija
• Kardinalitātes
• Konceptuāls un
tehnisks projektējums
Divu modeļu atšķirības
OWL
RDB
• ontoloģijas parasti atbilst • Relāciju shēmas atbilst
konceptuālam modelim.
implementācijas
modelim.
• klasēm un īpašībām
• Relāciju shēmas
piešķir konceptuālus
elementiem ir tehniski
nosaukumus.
nosaukumi.
• var nodefinēt inversās
• Nevar nodefinēt ārējai
īpašibas.
atslēgai inverso.
• Apakšklašu attiecība ir
• Apakšklašu attiecībai nav
dabiska.
atbalsts.
3
...divu modeļu atšķirības
OWL
RDB
• Īpašības var aprakstīt
daudzi pret daudziem
attiecībās starp klasēm.
• Īpašībām var pievienot
kardinalitātes
nosacījumus.
• Ir uz loģiku bāzēta
valoda un tai ir
secināšanas rīki (Pellet,
FaCT++, uc.)
4
• Nevar nodefinēt daudzi
pret daudziem saiti starp
tabulām.
• Saitēm starp tabulām
nevar deklaratīvi
nodefinēt kvantitātes
ierobežotājus.
• Katram informācijas
pieprasījumam jāraksta
atsevišķa SQL komanda
Nepieciešamība pēc attēlojumu
risinājumiem no RDB uz RDF/OWL
• Attīstās semantiskās tehnoloģijas (RDF, OWL,
SPARQL, uc.) un to atbaltošie rīki (OpenLink
Virtuoso, Jena, Sesame uc.)
• Lielākā datu glabājas relāciju datu bāzēs, jo
–
–
–
–
tās ir efektīvas ātruma un datu apjoma ziņā,
tām ir precīza definīcija,
tām ir augstas drošības garantijas iespējas,
eksistē daudz uz SQL bāzētu rīku un lietotņu izstrādes
vides,
– eksistē daudz lietotņu, kas izmanto relāciju datu bāzes
5
Attēlojuma risinājumi RDB<->RDF/OWL
Relāciju DB shēma
atbilst
DB tabulu raksti
attēlojuma
risinājums
OWL ontoloģija
atbilst
RDF dati
(trijnieki)
• Tiešais attēlojums definē attēlojumu no relāciju datu
bāzes datiem uz to reprezentāciju RDF grafa veidā,
kam struktūra un izmantotā vārdnīca tieši atbilst
relāciju datu bāzes shēmai.
• Attēlojumu valoda nodibina patvaļīgu atbilstību starp
RDB un RDF datu kopām, kas izteiktas autora izvēlētā
vārdnīcā (ontoloģijā) un struktūrā.
6
Esošie tiešā attēlojuma risinājumi
• W3C standarts par relāciju datu tiešo attēlojumu uz
RDF (“A Direct Mapping of Relational Data to
RDF”).
• Relational.OWL platforma. Relāciju shēmu apraksta
ar speciālas ontoloģijas palīdzību.
• DB2OWL- rīks automātiskam attēlojumam no OWL
ontoloģijas uz relāciju datu bāzi.
• UltraWrap- SQL skati, vienkāršas atbilstības.
7
Esošie attēlojumu valodas risinājumi
• R2RML: (“RDB to RDF Mapping Language”)
attēlojuma valoda no RDB uz RDF (W3C).
• Attēlojums no datu bāzes uz mērķa ontoloģiju,
izmantojot Relational.OWL un SPARQL.
• R2O: XML bāzēta attēlojuma valoda.
• D2RQ: atbilstību ontoloģija, ETL vai dinamiskā
piekļuve RDB datiem.
• Virtuoso RDF Views: dinamiska piekļuve RDB
datiem, translējot atbilstību definīcijas uz SQL
pieprasījumiem.
8
...esošie attēlojumu valodas risinājumi
• Triplify: PHP kodā integrētas speciāla veida SQL
komandas (zema līmeņa).
• DartGrid: tabulu veidā izteiktas atbilstības un rīki to
ievadam un informācijas meklēšanai (SPARQL).
• Spyder: rīks ar savu attēlojuma valodu, bet atbalsta
arī jauno valodu R2RML (W3C).
• Attēlojuma risinājums, izmantojot modeļu
transformācijas (MOLA)
9
Esošajos attēlojuma risinājumos mazāk
risinātie jautājumi
• Maz uzmanības uz augsta līmeņa valodas
konstrukcijām (piemēram, funkcijām).
• Maz uzmanības uz lasāmību un pieraksta īsumu.
• Maz izmanto informāciju par avota datu bāzes un
mērķa ontoloģijas struktūrām.
• Maz izmanto izsecināmo informāciju (tabulas ārējo
atslēgu lauki, OWL īpašības domēna klase uc.).
10
Pētījuma mērķis
• Izveidot ērtu RDB-RDF/OWL atbilstību specificēšanas
valodu ar akcentu uz
– lasāmību,
– pieraksta īsumu,
– augsta līmeņa valodas konstrukciju izmantošanu
• Izveidot praktiskām situācijām piemērotu
efektīvu atbilstību realizāciju.
11
Darba galvenie rezultāti
• Izveidota RDB-RDF/OWL attēlojuma specificēšanas
valoda RDB2OWL.
• Izstrādāts RDB2OWL attēlojuma specificēšanas
valodas parseris (BNF) un tās apakškopas realizācija.
• Izstrādāta RDB2OWL izpildes vide ar datu bāzes
shēmu atbilstību pierakstam.
• Praktiskas izmantošanas iespēja Latvijas medicīnas
reģistru piemērā:
– RDB2OWL izpildes vides darbināšana, ģenerējot
RDF trijniekus no relāciju datiem,
– atbilstību specifikācija RDB2OWL valodā.
12
RDB2OWL valodas uzdevumi
• Definēt saistību starp mērķa ontoloģijas un izejas DB
shēmas elementiem.
• Definēt, kā mērķa ontoloģijai atbilstošie RDF trijnieki
tiek ģenerēti no datiem izejas DB.
• Lietot precīzas saites uz izejas DB un mērķa
ontoloģijas elementiem (validācijai, atkarību analīzei
uc.).
• Dot līdzekļus, lai izvairītos no koda atkārtojumiem:
–
–
–
–
netieša atsauce uz ārējās atslēgas kolonām,
funkciju atbalsts,
mainīgie konstrukciju iegaumēšanai un izmantošanai ,
u.c.;
• Dot valodas atbalstu dažiem tipiskiem atbilstību tipiem
industrijā.
13
RDB2OWL valodas līmeņi
• Raupjais RDB2OWL valodas pamata līmenis.
• Kodola RDB2OWL- papildus konstrukcijas
izteiksmju īsināšanai, izsecināmās informācijas
izmantošana uc.
• Pilnais RDB2OWL- funkcijas, vairāku klašu
konceptualizācija uc. nosacījumi, datu bāzes
palīga objekti.
14
RDB2OWL raupjā attēlojuma metamodelis
RDB MM (fragment)
OWL metamodel (fragment)
*
Database
dbName: String
connection: String
1
*
/ref 1
Table
tName:String
TableRef
tName:String
ContextRef
text:{<>,<s>,<t>}
RefItem
1
1
*
ExprRef
alias: String [0..1]
* {ordered}
OWL Ontology
ontologyURI: String
baseURI: String
OWL Entity
localName: String[0..1]
entityURI:String[1]
TableExpression
filter: FilterExpression
subclassOf *
1
1
1
*
OWL Class
*
1
Column
colName: String
ClassMap
uriPattern: ValueExpression
0..1
0..1 /source
*
PropertyMap
XSD Ref
typeName:String
0..1
*
*
DatatypePropertyMap
expr: ValueExpression
uriPattern:ValueExpression[0..1]
15
*
OWL ObjectProperty
1
*
1
*
0..1 domain
*
OWL Property
1
ObjectPropertyMap
srcUriPattern:ValueExpression [0..1]
trgUriPattern:ValueExpression [0..1]
*
datatype 1
SQL Datatype
typeName: String
*
/target
*
0..1 range
/ref
OWL DatatypeProperty
XSD datatype
typeName:String
range
default
1
Izteiksmju un filtru metamodelis
FilterExpression
FilterItem
opName: {true, false, =,<,>,<>,
<=, >=, like, is null, is not null}
ColumnExpr
QualifiedColumnExpr
prefix: String
1
1..2 {ordered}
{ordered} 0..2
ValueExpression
/datatype: SQL Datatype [0..1]
Constant
cValue: String
Compound
Expression
1..* {ordered}
ColumnRef
colName: String
/ref: Column
Function
fName:String
1
CompoundFilter
cond: {AND,OR,NOT}
BinaryExpression
opName: {=,<,>,<>,<=, >=,+,
-,*,/,div,mod}
FunctionExpr
Raupjā RDB2OWL izteiksmes:
rakstu filtrācijai un tabulu saitēm.
16
SQL
Function
Raupjā RDB2OWL semantika
OWL klašu instanču RDF trijnieki
TableExpression
filter: FilterExpression
ClassMap
uriPattern: ValueExpression
isVirtual: Boolean=false
*
0..1
OWLEntity
localName: String[0..1]
entityURI:String[1]
OWLClass
filtrs
<val(x.uriPattern), ‘rdf:type’, c.entityURI>
Izteiksmju aprēķināšana notiek izejas RDB
17
Raupjā RDB2OWL semantika
OWL objektu īpašību vērtību RDF trijnieki
ClassMap
uriPattern: ValueExpression
isVirtual: Boolean=false
1 source
target
OWLEntity
localName: String[0..1]
entityURI:String[1]
OWLObjectProperty
1 *
filtrs
*
ObjectPropertyMap
*
<val(x.uriPattern), p.entityURI, val(y.uriPattern)>
18
Attēlojuma piemērs: raupjais RDB2OWL
Thing
Person ID
IDValue:String
{DB: (TEACHER {uri=('PersonID',IDCode)}).IDCode}
{DB: (STUDENT {uri=('PersonID',IDCode)}).IDCode}
{DB: TEACHER {uri=('PersonID',IDCode)}}
{DB: STUDENT {uri=('PersonID',IDCode)}}
personName:String
{DB: (TEACHER {uri=('Teacher', teacher_id)}).name}
{DB: (STUDENT {uri=('Student', student_id)}).name}
0..1
personID
person
{DB: (TEACHER {uri=('Teacher', teacher_id)}) <s>,
TEACHER {uri=('PersonID',IDCode)}) <t>;
<s>.teacher_id=<t>.teacher_id}
{DB: STUDENT{uri=('Student', student_id)}) <s>,
STUDENT{uri=('PersonID',IDCode)}) <t>;
<s>.student_id=<t>.student_id}
Student
Teacher
{DB: TEACHER
{uri=('Teacher', teacher_id)} !No}
{disjoint}
Person
{DB:STUDENT
{uri=('Student', student_id)}}
isTaughtBy
belongsTo
Academic Program
program Nam e:String {DB: name}
{DB: PROGRAM {uri=('Program ', program _id)}}
enrolled {DB: <s>.program_id=<t>.program _id}
isTakenBy
{DB: <s>,REGISTRATION R,<t>;
<s>.student_id=R.student_id AND takes
R.course_id=<t>.course_id }
{<>teaches}
{complete}
{disjoint}
{DB:
program _id=<t>.program_id}
includes
Course
Assistant
teaches courseName:String {DB: nam e}
{DB: COURSE {uri=('Course', course_id)} !No}
{DB: <s>.teacher_id=<t>.teacher_id }
{DB: TEACHER; level='Assistant'
{uri=('Teacher', teacher_id)}}
{complete}
Associate Professor
{DB: TEACHER; level='AssocProf'
{uri=('Teacher', teacher)}}
19
Professor
{DB: TEACHER;level='Professor'
{uri=('Teacher', teacher_id)}}
Optional Course
{DB: COURSE; required=0
{uri=('Course', course_id)}}
Pilnīgi nospecificēts RDB2OWL attēlojums , lietojot OWLGrEd redaktoru
{disjoint}
Mandatory Course
< isTaughtBy only Professor
{DB: COURSE; required=1
{uri=('Course', course_id)}}
Papildinājumi kodola RDB2OWL
-> navigācija no ārējās atslēgas uz primāro
=> navigācija no primārās atslēgas uz ārējo
• Noklusētā uriPattern ģenerācija (PK info)
• Atsauce uz klases attēlojumiem, izmantojot mainīgo
vārdus [[T]], [[Teacher]]
• Pirmo rindu atlase: Student=>Registration:first
20
Kodola RDB2OWL: navigācijas izteiksmes
(Teacher t, Course c; t.teacher_id=c.teacher_id)
• Navigācijas izteiksmes
Teacher[teacher_id]=>[teacher_id] Course
• Ņemot vērā primārās un ārējās atslēgas informāciju
Teacher=>[teacher_id] Course
Teacher=>Course
=> (ņem vērā izsecināmos avota un mērķa attēlojumus)
21
Attēlojuma piemērs: kodola RDB2OWL
Person ID
IDValue:String
{DB: [[T]].IDCode} {DB: [[S]].IDCode}
{DB: T=Teacher {uri=('Person_Id',IDCode)}}
{DB: S=Student {uri=('Person_Id',IDCode)}}
Academic Program
enrolled programName:String {DB: Name}
{DB: -> } {DB: Program }
Student
isTakenBy
{DB:Student}
{DB: Teacher}
isTaughtBy
{DB: =>Registration-> } takes
includes
Course
{disjoint}
teaches courseNam e:String {DB: Name}
{DB: =>} {DB: Course}
{complete}
22
{DB: ->} belongs To
0..1 pers on
Teacher
{DB: [[Teacher]];
Level='Assistant'}
{disjoint}
pers onName:String
{DB: [[Teacher]].Name}
{DB: [[Student]].Name}
pers onID {DB: [[Teacher]][teacher_id]->[[T]]}
{DB: [[Student]][student_id]->[[S]]}
Assistant
Thing
Person
Associate
Professor
{DB: [[Teacher]];
Level='AssocProf'}
Professor
{DB: [[Teacher]];
Level='Professor'}
{complete}
{disjoint}
Mandatory Course
Optional Course
{DB: [[Course]]; isRequired=0}
< isTaughtBy only Profes sor
{DB: [[Course]]; isRequired=1}
Vairāku klašu konceptualizācija
Vienai DB tabulai
atbilst vairākas OWL
klases un vēl vairāk
īpašības.
Klases attēlojuma īsais
pieraksts ir bez gariem
filtra nosacījumiem:
T {uri=(...)} !Out
type
A
P
x
Tabulas raksti
y
type
A
Katram DB tabulas rakstam: klases instance tiek radīta tikai tad, ja
tai eksistē “izejoša īpašība”, t.i.,
RDF trijnieks <x,’rdf:type’,A> jāģenerē tikai tad, ja eksistē cits
trijnieks <x,p,y>, kam p.domain=A.
23
DB palīga objekti
Princips: saglabāt izejas datu bāzi neskartu.
Var pievienot papildus DB attēlojuma vajadzībām:
- Papildus tabulas
- Numbers (Tally) tabula, kam rindas satur skaitļus 1-n,
palīdz sadalīt tekstu daļās
- Neeksistējošu klasifikatory tabulu re-inženierija
- SQL skati
- Pagaidu tabulas (sarežģītākiem SQL- līmeņa
aprēķiniem)
Attēlojumam jāspecificē:
- palīga datu bāze (piekļuve)
- kods, kas jāizpilda pirms attēlojuma izteiksmju apstrādes
24
DB palīga objekti attēlojuma vajadzībām
25
Lietotāja definētās funkcijas
Funkcija sadala tekstu daļās, atgriežot rakstu kopu:
split4(@X) = (Numbers; len(@X)<N*4).
substring(@X,(N-1)*4+1,4))
199219982004 -> {1992, 1998, 2004}
111 lietojumi Latvijas Medicīnas reģistru piemērā
split4(ManyYears) kolonnai ManyYears tabulasA
kontekstā tiek translēta uz:
(A,Numbers; len(ManyYears)<N*4).
substring(ManyYears,(N-1)*4+1,4))
Lietotāja definētās funkcijas ar
aprēķināmām kolonnām
FullCourseInfo(@cId)=
(
(Course c)->(Teacher t); [email protected];
courseType= #iif(c.required,’Mandatory’,’Optional’)),
teacherName=t.tname
).#concat(
courseType, ‘ course ‘, c.cname ,
’ tought by ’, teacherName
)
piemēram “Mandatory course Semantic Web tought
by Saly”
27
Tabulu funkcijas izmanto divu kolonu
tabulas
data
Code Value
en
England
de
Germany
lv
Latvia
...
Ja funkcijas vārds sakrīt ar tabulas vārdu, tad tā ir tabulu funkcija
COUNTRY(‘lv’)  ‘Latvia’
Tas pats standarta notācijā:
Definīcija:
CountryName( @x)=(COUNTRY; [email protected] ).description
Izsaukums:
CountryName(‘lv’)  ‘Latvia’
28
Agregātfunkcijas
DB
Ontoloģija
Person
personName:String
Student
creditsTaken: Integer
creditsPaid: Integer
Kredītpunkti, ko student izvēlējies
SUM(=>XRegistration->XCourse.credits)
Kredītpunkti, ko students apmaksājis
SUM(=>XRegistration:isPaid=1->XCourse.credits)
29
RDB2OWL implementācija
Metamodeļu repozitorijs
MII REP
Transformācijas definīcija (lua,lQuery valoda)
xx.owl ar
atēlojuma
anotācijām
RDB2OWL
sintakses
MM
instances
Imports (java)
+ parseris (javacc)
30
RDB2OWL
pilnais
semantiskais
MM
instances
Transformāciju izpilde
RDB2OWL
samazinātais
semantiskais
MM
instances
Relāciju DB
RDB2OWL
attēlojuma
shēma
attēlojuma
dati
MII REP java API
+ jdbc
RDB2OWL izpildes vide
SQL-līmeņa implementācija: SQL komandas ģenerē citas SQL
komandas, ko izpildot izejas DB tiek ģenerēti RDF trijnieki;
31
RDB shēma attēlojuma informācijai
32
RDB2OWL attēlojums Latvijas Medicīnas
reģistru piemēram
RDB2OWL tika pielietota 6 Latvijas Medicīnas reģistru (Vēža,ievainojumu un
traumu,diabēta, multiplās sklerozes, narkotisko saslimšanu un psihiskās
uzvedības traucējumu) piemēram
Izejas DB: 106 tabulas, 1353 kolonas, > 3 miljoni rakstu, > 3 GB datu
OWL ontoloģija: 172 klases (168 ne abstraktas), 814 datu tipu īpašības un 218
objektu īpašības
Attēlojums: 170 klases attēlojumi, 832 datu tipu īpašību attēlojumi, 220 objektu
īpašību attēlojumi
Implementācija: klēpjdators ar Intel Mobile Core 2 Duo T6570 procesoru,
Windows Vista, 3 GB RAM.
Rezultāts: noģenerēti 42.8 miljoni RDF trijnieki
ETL laiki: < 28 min. (< 10 min. Sākotnējā trijnieku ģenerācija, 8 min.
indeksēšana,
< 4 min. Vairāku klašu konceptualizācijas filtrācija, 6 min. Eksports teksta failā)
33
... RDB2OWL attēlojums Latvijas
Medicīnas reģistru piemēram
Sadalītas tabulas: vienai DB tabulai atbilst vairākas 17 no 106 DB tabulām,
OWL klases
76 no 172 OWL klasēm
Vairāku klašu konceptualizācija lietota
54 no 172 OWL klasēm
Teksta lauka sadalīšana daļās ar lietotāja definēto
funkciju split, izmantojot palīga tabulu Numbers
(200120032009{2001, 2003, 2009})
111 no 814 OWL datu
tipa īpašībām
Lietotāja definētās funkcijas boolT lietošana, lai
transformētu 0/1false/true^^xsd:boolean
229 no 814 OWL datu
tipa īpašībām
Objektu īpašības attēlojuma izteiksme “->” (ārējāprimārā atslēga)
83 no 218 OWL objektu
īpašībām
Objektu īpašības attēlojuma izteiksme “=>”
(primārā-ārējā atslēga)
10 no 218 OWL objektu
īpašībām
Lietotas atsauces uz klases attēlojumiem, kas
saglabāti mainīgajos (namedRef=ClassMap)
26 gadījumi
34
RX=#iif(@N>0,substring(@X,N+1,L),@X)).
(#iif(@N>0
and isnumeric(LX)
andmedicīnas
charindex(‘.’,LX)=0
and convert(LX,int)=convert(@Y,int),RX,@X)
RDB2OWL
anotācijas
Latvijas
reģistru
piemēram: Traumu reģistra fragments
)
KermAnatomVieniba
avKermAnatVienGrupa
KermAnatVienGrupa
{DB:->} vgVienibasGrupasKods:integer {DB:VienibasGrupaID}
vgVienibasGrupasNos :integer {DB:Vienibas Grupa}
{DB:IDBVienibasGrupa {uri=("IDBVienibasGrupa", VienibasGrupaID)}}
tdKermAnatomiskaVienNos {DB:[[TraumasDetala2]]->}
avKermAnatVienNos:s tring {DB:Vieniba}
{DB:IDBVieniba {uri=("IDBVieniba", VienibaID)}}
TraumasDetala
tdIrKreisaPuse:boolean {DB:[[TraumasDetala1]].is Equal( Pus eID, 1)}
tdIrLabaPus e:boolean {DB: [[TraumasDetala1]].isEqual(PuseID, 2)}
tdIrMugurpus e:boolean {DB: [[TraumasDetala1]].is Equal(Pus eID, 4)}
tdIrPrieks pus e:boolean {DB: [[TraumasDetala1]].is Equal(Pus eID, 4)}
{DB: TraumasDetala1=(IDBIevainojums Detalas T {uri=('
Traumas Detala',T.IevainojumsDetalasID)}) ?Out}
{DB: TraumasDetala2=(IDBIevainojums Detalas P T {uri=('
Traumas Detala',T.IevainojumsDetalasID)}) ?Out}
Persona
persDeklPas taInd:s tring {DB: DPastaIndeks s}
persDzimsanas Datums:dateTime {DB: Dzims anasDatums }
persMirs anasDatums:dateTime {DB: Mirsanas Datums }
persPers onasID:integer {DB: Personas ID}
{DB: XPersonas Karte {uri=('XPers onasKarte', Pers onasID)} }
trDetala {DB: =>[[TraumasDetala1]]}
Apdegums
{DB: IDBIevainojumsDetalas;
IevainojumaVeidsID IN (14,15,16,17) {uri=('
Traumas Detala', Ievainojums Detalas ID)} }
trPers ona {DB:->}
Trauma
trGrutnGestacijasNedela: integer {DB: Grutniecibas Nedela}
trIrAlkoholaReibums: boolean {DB: boolT(IrAlkohols)}
trIrGrutniece: boolean {DB: boolT(IrGrutniece )}
trIrNarkVieluReibums: boolean {DB: boolT(IrNarkotikas)}
trPacientaIerasanasLaiks: string {DB: DatumsIzrakstits }
trPacientaMedKartesNr: string {DB: removeIdLeft(DokumentaNr, IDNumurs )}
trTraumasGusanas Laiks: string {DB: convert(varchar, IevainojumaDatums,
102 ) + ' T ' + IevainojumaLaiks + ':00' }
{DB: IDBIevainojums {uri=('Trauma', IevainojumsID)} ?Out}
Luzums
luzIrDislokacija:boolean {DB: ( isOneOf2( SmagumaPakapeID, 21, 23) }
luzIrSlegts:boolean ( is OneOf2( SmagumaPakapeID, 20, 21) }
luzIrValejs:boolean ( is OneOf2( SmagumaPakapeID, 22, 23) }
luzNavDislokacija:boolean ( is OneOf2( SmagumaPakapeID, 20, 22) }
{DB:IDBIevainojumsDetalas; IevainojumaVeids ID=5 AND
SmagumaPakapeID>0 {uri=('TraumasDetala', IevainojumsDetalasID)} ?Out }
{DB:->} trNoluks
Apsaldejums
TraumasNoluks
apsIrAuduNekroze:boolean {DB:is Equal(SmagumaPakapeID, 19)}
apsNavAuduNekroze:boolean {DB:is Equal(SmagumaPakapeID, 18)} tnoNolukaKods :integer {DB: NoluksID}
tnoNolukaNos:s tring {DB: Noluks }
{DB:IDBIevainojumsDetalas; IevainojumaVeids ID=18
tnoNolukaNosEng:string {DB: Noluks Eng}
{uri=('TraumasDetala', IevainojumsDetalasID)} ?Out}
{DB:IDBNoluks
{uri=("IDBNoluks", NoluksID)} }
{DB:[SmagumaPakapeID]->} apdApdegumaPakape
ApdegumaPakape
35
apkApdegumaKods :integer {DB:Klas ifikatorsID }
apkApdegumaNos:string {DB:Vertiba}
{DB:IDBKlas ifikators; Lauks= 'SmagumaPakapeKods 1' {uri=("
IDBKlasifikators ", Klas ifikators ID)}}
Diagnoze
diagnKods:s tring {DB:SSKDgKods}
diagnNos :string {DB:SSKDg}
{DB:XSSKDg {uri=('XSSKDg', SSKDgKods)}}
{DB:[SSkDgKods2]->}
trBlakusdiagnoze
{DB:[SSkDgKods1]->}
trDiagnoze
RDB2OWL anotācijas Latvijas medicīnas reģistru piemēram: ontoloģijas anotācijas
<<Ontology annotations>>
DBRef(alias='M', dbname='preda_DB', jdbc_driver='com.microsoft.sqlserver.jdbc.SQLServerDriver',
connection_string='jdbc:sqlserver://GUNTARS-PC:1433;databaseName=preda_DB;user=preda;password=p',
schema='dbo', aux=0, default=1, public_table_prefix='preda_DB.dbo') ;
DBRef(alias='A', dbname='preda_aux_DB', jdbc_driver='com.microsoft.sqlserver.jdbc.SQLServerDriver',
connection_string='jdbc:sqlserver://GUNTARS-PC:1433;databaseName=preda_aux_DB;
user=preda_aux;password=p', schema='dbo', aux=1, default=0, init_script='RDB2OWL_Init.sql', public_
table_prefix='preda_aux_DB.dbo') ;
boolT(@x)=#iif(@x,'true','false')^^xsd:Boolean;
isEqual(@a, @b)=( CASE WHEN @[email protected] THEN 'true' ELSE 'false' END ) ^^xsd:boolean;
isOneOf2(@a, @b, @c)=( CASE WHEN @a IN ( @a, @b ) THEN 'true' ELSE 'false' END ) ^^xsd:boolean;
convert(@x, @type) = cast(@x AS @type);
split4(@X)=(Numbers;len(@X)<N*4).substring(@X,(N-1) *4,4);
removeIdLeft(@X,@Y)=
(;;
N=charindex(‘;’,@X),
L=Len(@X),
LX=#iif(@N>0,substring(@X,1,N-1),’’),
RX=#iif(@N>0,substring(@X,N+1,L),@X)).
(#iif(@N>0 and isnumeric(LX) and charindex(‘.’,LX)=0 and convert(LX,int)=convert(@Y,int),RX,@X)
)
KermAnatomVieniba
avKerm AnatVienNos:string {DB:Vieniba}
{DB:IDBVieniba {uri=("IDBVieniba", VienibaID)}}
36
avKerm AnatVienGrupa
KermAnatVienGrupa
vgVienibas GrupasKods :integer {DB:Vienibas GrupaID}
vgVienibas GrupasNos:integer {DB:Vienibas Grupa}
{DB:IDBVienibasGrupa {uri=("IDBVienibasGrupa", VienibasGrupaID)}}
Secinājumi
• Uzprojektēta RDB-RDF/OWL attēlojuma specificēšanas valoda RDB2OWL
ar akcentu uz lasāmību un pieraksta īsumu.
• Izveidots valodas RDB2OWL parseris.
• Izstrādāts RDB2OWL valodas rīks ontologijas anotāciju translācijai uz
RDB2OWL izpildes vidi (pašlaik atbalsts ir valodas apakškopai).
• Izveidots RDB2OWL valodas izpildes vides rīks mērķa ontoloģijai atbilstošo
RDF trijnieku ģenerēšanai no izejas RDB datiem. RDB-OWL/RDF atbilstību
informācija tiek glabāta relāciju DB shēmā.
• RDB2OWL attēlojuma valodā tika anotēta Latvijas medicīnas reģistru
ontoloģija, pārliecinoties par valodas pielietojamību praktiskā industrijas
piemērā, izsakot atbilstību starp izejas datu bāzi un domēna ontoloģiju.
• RDB2OWL izpildes vides tika pārbaudīta Latvijas medicīnas reģistru
semantiskā re-inženierijā, ģenerējot 42 miljonus RDF trijniekus 18,5 minūtēs
(bez eksporta teksta failā). Tādējādi tika pārbaudīta realizācijas efektivitāte.
37
Nākotnes apsvērumi
• Ir nākotnes apsvērumi par RDB2OWL valodas realizāciju
dinamiskai lietošanai (angl. “on-the-fly”), translējot atsevišķas
attēlojumu izteiksmes.
• Ir nākotnes ideja par kompilatora izveidi no RDB2OWL valodas
uz citām RDB-OWL/RDF attēlojumu valodām, lai izmantotu tos
atbalstošos rīkus.
38
Paldies!
Jautājumi?

similar documents