39
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

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

Embed Size (px)

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 Presentation

Citation preview

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

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); 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

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 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

Paldies!

Jautājumi?