relāciju datu bāzu informācijas pieejamība semantiskā tīmekļa tehnoloģijām
DESCRIPTION
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. 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 - PowerPoint PPT PresentationTRANSCRIPT
Guntars Būmans
20.06.2012.
Relāciju datu bāzu informācijas pieejamība semantiskā tīmekļa
tehnoloģijām
1
Darba vadītājs: Dr.sc.comp., profesors Kārlis Čerāns
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
3
• ontoloģijas parasti atbilst konceptuālam modelim.
• klasēm un īpašībām piešķir konceptuālus nosaukumus.
• var nodefinēt inversās īpašibas.
• Apakšklašu attiecība ir dabiska.
Divu modeļu atšķirības
• Relāciju shēmas atbilst implementācijas modelim.
• Relāciju shēmas elementiem ir tehniski nosaukumi.
• Nevar nodefinēt ārējai atslēgai inverso.
• Apakšklašu attiecībai nav atbalsts.
OWL RDB
4
• Ī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.)
...divu modeļu atšķirības
• 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
OWL RDB
5
• 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
Nepieciešamība pēc attēlojumu risinājumiem no RDB uz RDF/OWL
• 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ā.
Attēlojuma risinājumi RDB<->RDF/OWL
6
Relāciju DB shēma
atbilst
DB tabulu raksti
OWL ontoloģija
atbilst
RDF dati (trijnieki)
attēlojuma risinājums
• 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.
Esošie tiešā attēlojuma risinājumi
7
• 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.
Esošie attēlojumu valodas risinājumi
8
• 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)
...esošie attēlojumu valodas risinājumi
9
• 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.).
Esošajos attēlojuma risinājumos mazāk risinātie jautājumi
10
• 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.
Pētījuma mērķis
11
• 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ā.
Darba galvenie rezultāti
12
• 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ā.
RDB2OWL valodas uzdevumi
13
• 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.
RDB2OWL valodas līmeņi
14
RDB2OWL raupjā attēlojuma metamodelisOWL metamodel (fragment)RDB MM (fragment)
OWL EntitylocalName: String[0..1]entityURI:String[1]
OWL OntologyontologyURI: StringbaseURI: String
RefItem
PropertyMap
DatabasedbName: Stringconnection: String
TabletName:String
TableReftName:String
ColumncolName: String
SQL DatatypetypeName: String
ObjectPropertyMapsrcUriPattern:ValueExpression [0..1]trgUriPattern:ValueExpression [0..1]
XSD ReftypeName:String
OWL Class
OWL ObjectProperty
OWL DatatypeProperty
OWL Property
XSD datatypetypeName:String
ContextReftext:{<>,<s>,<t>}
ExprRefalias: String [0..1]
TableExpressionfilter: FilterExpression
DatatypePropertyMapexpr: ValueExpressionuriPattern:ValueExpression[0..1]
ClassMapuriPattern: ValueExpression
* 1
*
1subclassOf * *
*
1
range
*
0..1
1
/source
*
0..1
datatype
*
1
/ref 1
*
{ordered} *
1
1
0..1 *
1
domain *
0..1
/ref
1
*
range
*
1
*
1
/target
* 0..1
default *
1
15
Izteiksmju un filtru metamodelis
Raupjā RDB2OWL izteiksmes: rakstu filtrācijai un tabulu saitēm.
ColumnRefcolName: String/ref: Column
ValueExpression/datatype: SQL Datatype [0..1]
FilterItemopName: {true, false, =,<,>,<>,<=, >=, like, is null, is not null}
ConstantcValue: String
Compound Expression
FunctionfName:String
CompoundFiltercond: {AND,OR,NOT} FunctionExpr
SQL Function
QualifiedColumnExprprefix: String
ColumnExpr
BinaryExpressionopName: {=,<,>,<>,<=, >=,+,-,*,/,div,mod}
FilterExpression
{ordered}1..2
{ordered} 0..2
1
{ordered} 1..* 1
16
Raupjā RDB2OWL semantika
17
TableExpressionfilter: FilterExpression
ClassMapuriPattern: ValueExpressionisVirtual: Boolean=false
OWLEntitylocalName: String[0..1]entityURI:String[1]
OWLClass
* 0..1
<val(x.uriPattern), ‘rdf:type’, c.entityURI>Izteiksmju aprēķināšana notiek izejas RDB
filtrs
OWL klašu instanču RDF trijnieki
Raupjā RDB2OWL semantika
18
<val(x.uriPattern), p.entityURI, val(y.uriPattern)>
filtrs
OWLEntitylocalName: String[0..1]entityURI:String[1]
ClassMapuriPattern: ValueExpressionisVirtual: Boolean=false
OWLObjectProperty
ObjectPropertyMap
source
*
1 target
*
* 1
OWL objektu īpašību vērtību RDF trijnieki
Attēlojuma piemērs: raupjais RDB2OWL
{disjoint}
Teacher{DB: TEACHER {uri=('Teacher', teacher_id)} !No}
Optional Course{DB: COURSE; required=0 {uri=('Course', course_id)}}
Person IDIDValue:String {DB: (TEACHER {uri=('PersonID',IDCode)}).IDCode} {DB: (STUDENT {uri=('PersonID',IDCode)}).IDCode} {DB: TEACHER {uri=('PersonID',IDCode)}}{DB: STUDENT {uri=('PersonID',IDCode)}}
Professor{DB: TEACHER;level='Professor' {uri=('Teacher', teacher_id)}}
Mandatory Course< isTaughtBy only Professor{DB: COURSE; required=1 {uri=('Course', course_id)}}
Thing
PersonpersonName:String {DB: (TEACHER {uri=('Teacher', teacher_id)}).name} {DB: (STUDENT {uri=('Student', student_id)}).name}
{disjoint}{complete}
{disjoint}
{complete}
Student{DB:STUDENT {uri=('Student', student_id)}}
CoursecourseName:String {DB: name}{DB: COURSE {uri=('Course', course_id)} !No}
Assistant{DB: TEACHER; level='Assistant' {uri=('Teacher', teacher_id)}}
Associate Professor{DB: TEACHER; level='AssocProf' {uri=('Teacher', teacher)}}
Academic ProgramprogramName:String {DB: name}{DB: PROGRAM {uri=('Program', program_id)}}
teaches
{DB: <s>.teacher_id=<t>.teacher_id }
isTaughtBy
personID {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}
person 0..1
enrolled {DB: <s>.program_id=<t>.program_id}
belongsTo
{DB: program_id=<t>.program_id}
includes
takes
{<>teaches}
{DB: <s>,REGISTRATION R,<t>; <s>.student_id=R.student_id AND R.course_id=<t>.course_id }
isTakenBy
19 Pilnīgi nospecificēts RDB2OWL attēlojums , lietojot OWLGrEd redaktoru
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
22
{disjoint}
Teacher{DB: Teacher}
Optional Course{DB: [[Course]]; isRequired=0}
Associate Professor
{DB: [[Teacher]]; Level='AssocProf'}
Person IDIDValue:String {DB: [[T]].IDCode} {DB: [[S]].IDCode} {DB: T=Teacher {uri=('Person_Id',IDCode)}}{DB: S=Student {uri=('Person_Id',IDCode)}}
Assistant{DB: [[Teacher]]; Level='Assistant'}
Professor{DB: [[Teacher]]; Level='Professor'}
Mandatory Course< isTaughtBy only Professor{DB: [[Course]]; isRequired=1}
ThingPerson
personName:String {DB: [[Teacher]].Name} {DB: [[Student]].Name}
CoursecourseName:String {DB: Name}{DB: Course}
{disjoint}{complete}
{disjoint}
{complete}
Academic ProgramprogramName:String {DB: Name}{DB: Program}
Student{DB:Student}
enrolled {DB: -> }
belongsTo {DB: ->}
includes takes {DB: =>Registration-> }
isTakenBy
personID {DB: [[Teacher]][teacher_id]->[[T]]}{DB: [[Student]][student_id]->[[S]]} person 0..1
teaches {DB: =>}
isTaughtBy
Vairāku klašu konceptualizācija
RDF trijnieks <x,’rdf:type’,A> jāģenerē tikai tad, ja eksistē cits trijnieks <x,p,y>, kam p.domain=A.
Klases attēlojuma īsais pieraksts ir bez gariem filtra nosacījumiem:T {uri=(...)} !Out
23
Vienai DB tabulai atbilst vairākas OWL klases un vēl vairāk īpašības.
Katram DB tabulas rakstam: klases instance tiek radīta tikai tad, ja tai eksistē “izejoša īpašība”, t.i.,
Ptype
type
x
Ay
A
Tabulas raksti
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
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); c.teacher_id=@cId;
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
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; code=@x ).description
Izsaukums:
CountryName(‘lv’) ‘Latvia’
data
28
Agregātfunkcijas
Kredītpunkti, ko student izvēlējies
SUM(=>XRegistration->XCourse.credits)
Kredītpunkti, ko students apmaksājis
SUM(=>XRegistration:isPaid=1->XCourse.credits)
DB Ontoloģija
StudentcreditsTaken: IntegercreditsPaid: Integer
PersonpersonName:String
29
xx.owl ar atēlojuma anotācijām
RDB2OWL sintakses
MM
instances
RDB2OWL pilnais
semantiskais MM
Transformācijas definīcija (lua,lQuery valoda)
Transformāciju izpildeImports (java) + parseris (javacc)
RDB2OWL attēlojuma
shēma
attēlojuma dati
Metamodeļu repozitorijs MII REP
Relāciju DB
MII REP java API + jdbc
RDB2OWL samazinātais semantiskais
MM
instances instances
RDB2OWL implementācija
30
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
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 OWL klases
17 no 106 DB tabulām,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/1false/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
TraumatrGrutnGestacijasNedela: integer {DB: GrutniecibasNedela}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)}trTraumasGusanasLaiks: string {DB: convert(varchar, IevainojumaDatums, 102 ) + ' T ' + IevainojumaLaiks + ':00' }{DB: IDBIevainojums {uri=('Trauma', IevainojumsID)} ?Out}
TraumasDetalatdIrKreisaPuse:boolean {DB:[[TraumasDetala1]].isEqual( PuseID, 1)}tdIrLabaPuse:boolean {DB: [[TraumasDetala1]].isEqual(PuseID, 2)}tdIrMugurpuse:boolean {DB: [[TraumasDetala1]].isEqual(PuseID, 4)}tdIrPriekspuse:boolean {DB: [[TraumasDetala1]].isEqual(PuseID, 4)}{DB: TraumasDetala1=(IDBIevainojumsDetalas T {uri=('TraumasDetala',T.IevainojumsDetalasID)}) ?Out}{DB: TraumasDetala2=(IDBIevainojumsDetalasP T {uri=('TraumasDetala',T.IevainojumsDetalasID)}) ?Out}
TraumasNolukstnoNolukaKods:integer {DB: NoluksID}tnoNolukaNos:s tring {DB: Noluks}tnoNolukaNosEng:string {DB: NoluksEng}{DB:IDBNoluks {uri=("IDBNoluks", NoluksID)} }
PersonapersDeklPastaInd:s tring {DB: DPastaIndekss}persDzimsanasDatums:dateTime {DB: DzimsanasDatums }persMirsanasDatums:dateTime {DB: MirsanasDatums }persPersonasID:integer {DB: PersonasID}{DB: XPersonasKarte {uri=('XPersonasKarte', PersonasID)} }
Apdegums{DB: IDBIevainojumsDetalas; IevainojumaVeidsID IN (14,15,16,17) {uri=('TraumasDetala', IevainojumsDetalasID)} }
ApsaldejumsapsIrAuduNekroze:boolean {DB:isEqual(SmagumaPakapeID, 19)}apsNavAuduNekroze:boolean {DB:isEqual(SmagumaPakapeID, 18)}{DB:IDBIevainojumsDetalas; IevainojumaVeidsID=18 {uri=('TraumasDetala', IevainojumsDetalasID)} ?Out}
LuzumsluzIrDislokacija:boolean {DB: ( isOneOf2( SmagumaPakapeID, 21, 23) }luzIrSlegts:boolean ( isOneOf2( SmagumaPakapeID, 20, 21) }luzIrValejs:boolean ( isOneOf2( SmagumaPakapeID, 22, 23) }luzNavDislokacija:boolean ( isOneOf2( SmagumaPakapeID, 20, 22) }{DB:IDBIevainojumsDetalas; IevainojumaVeidsID=5 AND SmagumaPakapeID>0 {uri=('TraumasDetala', IevainojumsDetalasID)} ?Out }
ApdegumaPakapeapkApdegumaKods:integer {DB:Klas ifikatorsID }apkApdegumaNos:string {DB:Vertiba}{DB:IDBKlas ifikators; Lauks= 'SmagumaPakapeKods1' {uri=("IDBKlasifikators", Klas ifikators ID)}}
DiagnozediagnKods:s tring {DB:SSKDgKods}diagnNos:string {DB:SSKDg}{DB:XSSKDg {uri=('XSSKDg', SSKDgKods)}}
KermAnatomVienibaavKermAnatVienNos:s tring {DB:Vieniba}{DB:IDBVieniba {uri=("IDBVieniba", VienibaID)}}
KermAnatVienGrupavgVienibasGrupasKods:integer {DB:VienibasGrupaID}vgVienibasGrupasNos:integer {DB:VienibasGrupa}{DB:IDBVienibasGrupa {uri=("IDBVienibasGrupa", VienibasGrupaID)}}
<<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 @a=@b 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))
trDetala {DB: =>[[TraumasDetala1]]}
trNoluks {DB:->}
trPersona {DB:->}
apdApdegumaPakape {DB:[SmagumaPakapeID]->}
trDiagnoze {DB:[SSkDgKods1]->}
trBlakusdiagnoze {DB:[SSkDgKods2]->}
tdKermAnatomiskaVienNos {DB:[[TraumasDetala2]]->}
avKermAnatVienGrupa {DB:->}
RDB2OWL anotācijas Latvijas medicīnas reģistru piemēram: Traumu reģistra fragments
35
RDB2OWL anotācijas Latvijas medicīnas reģistru piemēram: ontoloģijas anotācijas
36
KermAnatomVienibaavKermAnatVienNos:string {DB:Vieniba}{DB:IDBVieniba {uri=("IDBVieniba", VienibaID)}}
KermAnatVienGrupavgVienibasGrupasKods:integer {DB:VienibasGrupaID}vgVienibasGrupasNos:integer {DB:VienibasGrupa}{DB:IDBVienibasGrupa {uri=("IDBVienibasGrupa", VienibasGrupaID)}}
<<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 @a=@b 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))
avKermAnatVienGrupa
• 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.
Secinājumi
37
• 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.
Nākotnes apsvērumi
38