IMAS'08 obda plugin

Post on 02-Nov-2014

285 views 0 download

Tags:

description

Presentation of one of the first versions of the OBDA Plugin for Protege (now the ontopPro plugin)

Transcript of IMAS'08 obda plugin

Realizing Ontology Based Data Access

A Plugin for Protégé

Mariano Rodríguez-MuroLina Lubyte

Diego Calvanese

Free University of Bozen BolzanoKnowledge Representation meets Databases group

Bolzano, Italy

Thursday, August 8, 13

Ontologies

Thursday, August 8, 13

Ontologies

• What are Ontologies?

• Shared conceptualizations of a domain of discourse

Thursday, August 8, 13

Ontologies

• What are Ontologies?

• Shared conceptualizations of a domain of discourse

• Formal Semantics

Thursday, August 8, 13

Ontologies

• What are Ontologies?

• Shared conceptualizations of a domain of discourse

• Formal Semantics

• Allow us to perform complex inferencing

Thursday, August 8, 13

Ontologies

• What are Ontologies?

• Shared conceptualizations of a domain of discourse

• Formal Semantics

• Allow us to perform complex inferencing

• Description Logics!!

Thursday, August 8, 13

Reasoners

Thursday, August 8, 13

Reasoners

• Software systems that allow us to perform inferences over ontologies

Thursday, August 8, 13

Reasoners

• Software systems that allow us to perform inferences over ontologies

• Examples of reasoning services in DL reasoners:

• Subsumption checking, Instance checking, consistency checking

Thursday, August 8, 13

Wouldn’t it be nice if...

Data SourceData Source

Data Source

Data Layer

User Ontology

Semantic LayerUserQueries

SemanticMappings

Thursday, August 8, 13

Wouldn’t it be nice if...

Data SourceData Source

Data Source

Data Layer

User Ontology

Semantic LayerUserQueries

SemanticMappings

Data SourceData Source

Data Source

Data Layer

User Ontology

Semantic LayerUserQueries

SemanticMappings

Thursday, August 8, 13

Wouldn’t it be nice if...

RDBMs

Semantic Layer Data Layer

User

QueriesOntology RDBMs

Data Layer

Semantic

Mappings

OBDA-Enabled Reasoner

RDBMs

Semantic Layer Data Layer

User

QueriesOntology RDBMs

Data Layer

Semantic

Mappings

OBDA-Enabled Reasoner

Thursday, August 8, 13

Wouldn’t it be nice if...

Meet OBDA

RDBMs

Semantic Layer Data Layer

User

QueriesOntology RDBMs

Data Layer

Semantic

Mappings

OBDA-Enabled Reasoner

RDBMs

Semantic Layer Data Layer

User

QueriesOntology RDBMs

Data Layer

Semantic

Mappings

OBDA-Enabled Reasoner

Thursday, August 8, 13

Example

Scenario:Software consultant for financial institutions.Objective: Achieve better reusability and modularization of their software solutions.Preconditions: Requirements are fixed requirements that the users must meet.

Thursday, August 8, 13

Thursday, August 8, 13

StockBroker

Trader

StockExchangeMember

Investor

Dealer StockTrader

tradesOnBehalfOf

usesBroker

Person

1 .. *

<<ident>>financialInstrumentID: intFinancialInstrument

<<ident>listdate: dateStockExchangeList

<<ident>transactionID:inttransactionDate: Date

Transaction

amountOfShares: inttypeOfShares: Boolean

Stock 1 .. *0 .. *

listsStock

StockExchangeMemberisExecutedBy

1 .. 1

Company

involvesInstrument

isTradedIn

1 .. 1

0 .. 1

Acquisition Offer

isListedIn1 .. 1 0 .. *

hasStockbelongsToCompany

{disjoint}

InvestorisExecutedFor1 .. 1

companyName: StringmarketShares: IntegernetWorth: Real

Company

firstName: NamelastName: StringdateOfBirth: Datessn: String

PhysicalPersonLegalPerson

<<ident>personID: intPerson

<<ident>addressID: intinStreet: SringhasNumber: IntinCity: StringinState: StringinCountry: String

Address1 .. *

1 .. 1

hasAddress{disjoint}

Thursday, August 8, 13

StockBroker

Trader

StockExchangeMember

Investor

Dealer StockTrader

tradesOnBehalfOf

usesBroker

Person

1 .. *

<<ident>>financialInstrumentID: intFinancialInstrument

<<ident>listdate: dateStockExchangeList

<<ident>transactionID:inttransactionDate: Date

Transaction

amountOfShares: inttypeOfShares: Boolean

Stock 1 .. *0 .. *

listsStock

StockExchangeMemberisExecutedBy

1 .. 1

Company

involvesInstrument

isTradedIn

1 .. 1

0 .. 1

Acquisition Offer

isListedIn1 .. 1 0 .. *

hasStockbelongsToCompany

{disjoint}

InvestorisExecutedFor1 .. 1

companyName: StringmarketShares: IntegernetWorth: Real

Company

firstName: NamelastName: StringdateOfBirth: Datessn: String

PhysicalPersonLegalPerson

<<ident>personID: intPerson

<<ident>addressID: intinStreet: SringhasNumber: IntinCity: StringinState: StringinCountry: String

Address1 .. *

1 .. 1

hasAddress{disjoint}

MiFID

Thursday, August 8, 13

StockBroker

Trader

StockExchangeMember

Investor

Dealer StockTrader

tradesOnBehalfOf

usesBroker

Person

1 .. *

<<ident>>financialInstrumentID: intFinancialInstrument

<<ident>listdate: dateStockExchangeList

<<ident>transactionID:inttransactionDate: Date

Transaction

amountOfShares: inttypeOfShares: Boolean

Stock 1 .. *0 .. *

listsStock

StockExchangeMemberisExecutedBy

1 .. 1

Company

involvesInstrument

isTradedIn

1 .. 1

0 .. 1

Acquisition Offer

isListedIn1 .. 1 0 .. *

hasStockbelongsToCompany

{disjoint}

InvestorisExecutedFor1 .. 1

companyName: StringmarketShares: IntegernetWorth: Real

Company

firstName: NamelastName: StringdateOfBirth: Datessn: String

PhysicalPersonLegalPerson

<<ident>personID: intPerson

<<ident>addressID: intinStreet: SringhasNumber: IntinCity: StringinState: StringinCountry: String

Address1 .. *

1 .. 1

hasAddress{disjoint}

MiFID

Applications

Thursday, August 8, 13

StockBroker

Trader

StockExchangeMember

Investor

Dealer StockTrader

tradesOnBehalfOf

usesBroker

Person

1 .. *

<<ident>>financialInstrumentID: intFinancialInstrument

<<ident>listdate: dateStockExchangeList

<<ident>transactionID:inttransactionDate: Date

Transaction

amountOfShares: inttypeOfShares: Boolean

Stock 1 .. *0 .. *

listsStock

StockExchangeMemberisExecutedBy

1 .. 1

Company

involvesInstrument

isTradedIn

1 .. 1

0 .. 1

Acquisition Offer

isListedIn1 .. 1 0 .. *

hasStockbelongsToCompany

{disjoint}

InvestorisExecutedFor1 .. 1

companyName: StringmarketShares: IntegernetWorth: Real

Company

firstName: NamelastName: StringdateOfBirth: Datessn: String

PhysicalPersonLegalPerson

<<ident>personID: intPerson

<<ident>addressID: intinStreet: SringhasNumber: IntinCity: StringinState: StringinCountry: String

Address1 .. *

1 .. 1

hasAddress{disjoint}

Client

addressid

......

dateofbirth ssnid

...

lastname

...... ...

name

Broker

addressid

...... ...

name ssn

......

id

...

lastname dateofbirth

BrokerWorksFor

...... ...

brokerid companyid clientid

Company

...

addressid

...

id

...

name

...

networthmarketshares

...

Transaction

......

id

...... ...

brokerid forclientidtype forcompanyiddate stockid

... ...

StockBookList

date

...

stockid

...

Address

country

...

state

......

id

...

street

...

citynumber

...

StockInformation

...

companyid

...

sharetypeid

...

numberofshares

...

MiFIDNew Client

Applications

Thursday, August 8, 13

StockBroker

Trader

StockExchangeMember

Investor

Dealer StockTrader

tradesOnBehalfOf

usesBroker

Person

1 .. *

<<ident>>financialInstrumentID: intFinancialInstrument

<<ident>listdate: dateStockExchangeList

<<ident>transactionID:inttransactionDate: Date

Transaction

amountOfShares: inttypeOfShares: Boolean

Stock 1 .. *0 .. *

listsStock

StockExchangeMemberisExecutedBy

1 .. 1

Company

involvesInstrument

isTradedIn

1 .. 1

0 .. 1

Acquisition Offer

isListedIn1 .. 1 0 .. *

hasStockbelongsToCompany

{disjoint}

InvestorisExecutedFor1 .. 1

companyName: StringmarketShares: IntegernetWorth: Real

Company

firstName: NamelastName: StringdateOfBirth: Datessn: String

PhysicalPersonLegalPerson

<<ident>personID: intPerson

<<ident>addressID: intinStreet: SringhasNumber: IntinCity: StringinState: StringinCountry: String

Address1 .. *

1 .. 1

hasAddress{disjoint}

Client

addressid

......

dateofbirth ssnid

...

lastname

...... ...

name

Broker

addressid

...... ...

name ssn

......

id

...

lastname dateofbirth

BrokerWorksFor

...... ...

brokerid companyid clientid

Company

...

addressid

...

id

...

name

...

networthmarketshares

...

Transaction

......

id

...... ...

brokerid forclientidtype forcompanyiddate stockid

... ...

StockBookList

date

...

stockid

...

Address

country

...

state

......

id

...

street

...

citynumber

...

StockInformation

...

companyid

...

sharetypeid

...

numberofshares

...

Applications

MiFIDNew Client

Thursday, August 8, 13

StockBroker

Trader

StockExchangeMember

Investor

Dealer StockTrader

tradesOnBehalfOf

usesBroker

Person

1 .. *

<<ident>>financialInstrumentID: intFinancialInstrument

<<ident>listdate: dateStockExchangeList

<<ident>transactionID:inttransactionDate: Date

Transaction

amountOfShares: inttypeOfShares: Boolean

Stock 1 .. *0 .. *

listsStock

StockExchangeMemberisExecutedBy

1 .. 1

Company

involvesInstrument

isTradedIn

1 .. 1

0 .. 1

Acquisition Offer

isListedIn1 .. 1 0 .. *

hasStockbelongsToCompany

{disjoint}

InvestorisExecutedFor1 .. 1

companyName: StringmarketShares: IntegernetWorth: Real

Company

firstName: NamelastName: StringdateOfBirth: Datessn: String

PhysicalPersonLegalPerson

<<ident>personID: intPerson

<<ident>addressID: intinStreet: SringhasNumber: IntinCity: StringinState: StringinCountry: String

Address1 .. *

1 .. 1

hasAddress{disjoint}

Client

addressid

......

dateofbirth ssnid

...

lastname

...... ...

name

Broker

addressid

...... ...

name ssn

......

id

...

lastname dateofbirth

BrokerWorksFor

...... ...

brokerid companyid clientid

Company

...

addressid

...

id

...

name

...

networthmarketshares

...

Transaction

......

id

...... ...

brokerid forclientidtype forcompanyiddate stockid

... ...

StockBookList

date

...

stockid

...

Address

country

...

state

......

id

...

street

...

citynumber

...

StockInformation

...

companyid

...

sharetypeid

...

numberofshares

...

Semantic Mapping!

Applications

MiFIDNew Client

Thursday, August 8, 13

Components revised

RDBMs

Semantic Layer Data Layer

User

QueriesOntology RDBMs

Data Layer

Semantic

Mappings

OBDA-Enabled Reasoner

Thursday, August 8, 13

Components revised

RDBMs

Semantic Layer Data Layer

User

QueriesOntology RDBMs

Data Layer

Semantic

Mappings

OBDA-Enabled Reasoner

Communication Facilities

Thursday, August 8, 13

Components revised

RDBMs

Semantic Layer Data Layer

User

QueriesOntology RDBMs

Data Layer

Semantic

Mappings

OBDA-Enabled Reasoner

Communication Facilities

Reasoners need to be extended with

new paradigmThursday, August 8, 13

Components revised

RDBMs

Semantic Layer Data Layer

User

QueriesOntology RDBMs

Data Layer

Semantic

Mappings

OBDA-Enabled Reasoner

Communication Facilities

Reasoners need to be extended with

new paradigm

Design Tools!

Thursday, August 8, 13

First stepsProtégé

ProtégéOWLPlugin

OBDA Plugin

SE

RV

ER

SID

EC

LIE

NT

SID

E

DIG 1.2 + OBDAExtension

TBox

DS Info +Mappings

QuOnto

DIG Server for QuOnto

DS Info +Mappings

TBox

RDBMS

Thursday, August 8, 13

First stepsProtégé

ProtégéOWLPlugin

OBDA Plugin

SE

RV

ER

SID

EC

LIE

NT

SID

E

DIG 1.2 + OBDAExtension

TBox

DS Info +Mappings

QuOnto

DIG Server for QuOnto

DS Info +Mappings

TBox

RDBMS

<?xml version="1.0" encoding="ISO-8859-1"?><tells xmlns="http://dl.kr.org/dig/lang" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://wasp.cs.vu.nl/sekt/digtest/dig-1.1.xsd"> <clearKB/> <defconcept name="a"/> <impliesc> <catom name="a"/> <and> <not> <or> <catom name="b"/> <catom name="c"/> </or> </not> </and> </impliesc</tells>

Thursday, August 8, 13

First stepsProtégé

ProtégéOWLPlugin

OBDA Plugin

SE

RV

ER

SID

EC

LIE

NT

SID

E

DIG 1.2 + OBDAExtension

TBox

DS Info +Mappings

QuOnto

DIG Server for QuOnto

DS Info +Mappings

TBox

RDBMS

DIG Server for QuOnto

<?xml version="1.0" encoding="ISO-8859-1"?><tells xmlns="http://dl.kr.org/dig/lang" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://wasp.cs.vu.nl/sekt/digtest/dig-1.1.xsd"> <clearKB/> <defconcept name="a"/> <impliesc> <catom name="a"/> <and> <not> <or> <catom name="b"/> <catom name="c"/> </or> </not> </and> </impliesc</tells>

Thursday, August 8, 13

First stepsProtégé

ProtégéOWLPlugin

OBDA Plugin

SE

RV

ER

SID

EC

LIE

NT

SID

E

DIG 1.2 + OBDAExtension

TBox

DS Info +Mappings

QuOnto

DIG Server for QuOnto

DS Info +Mappings

TBox

RDBMS

DIG Server for QuOnto

OBDA Plugin for Protégé

<?xml version="1.0" encoding="ISO-8859-1"?><tells xmlns="http://dl.kr.org/dig/lang" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://wasp.cs.vu.nl/sekt/digtest/dig-1.1.xsd"> <clearKB/> <defconcept name="a"/> <impliesc> <catom name="a"/> <and> <not> <or> <catom name="b"/> <catom name="c"/> </or> </not> </and> </impliesc</tells>

Thursday, August 8, 13

Demo, Ontology

StockBroker

Trader

StockExchangeMember

Investor

Dealer StockTrader

tradesOnBehalfOf

usesBroker

Person

1 .. *

<<ident>>financialInstrumentID: intFinancialInstrument

<<ident>listdate: dateStockExchangeList

<<ident>transactionID:inttransactionDate: Date

Transaction

amountOfShares: inttypeOfShares: Boolean

Stock 1 .. *0 .. *

listsStock

StockExchangeMemberisExecutedBy

1 .. 1

Company

involvesInstrument

isTradedIn

1 .. 1

0 .. 1

Acquisition Offer

isListedIn1 .. 1 0 .. *

hasStockbelongsToCompany

{disjoint}

InvestorisExecutedFor1 .. 1

companyName: StringmarketShares: IntegernetWorth: Real

Company

firstName: NamelastName: StringdateOfBirth: Datessn: String

PhysicalPersonLegalPerson

<<ident>personID: intPerson

<<ident>addressID: intinStreet: SringhasNumber: IntinCity: StringinState: StringinCountry: String

Address1 .. *

1 .. 1

hasAddress{disjoint}

Thursday, August 8, 13

Demo, scenario 1core services

Client

addressid

......

dateofbirth ssnid

...

lastname

...... ...

name

Broker

addressid

...... ...

name ssn

......

id

...

lastname dateofbirth

BrokerWorksFor

...... ...

brokerid companyid clientid

Company

...

addressid

...

id

...

name

...

networthmarketshares

...

Transaction

......

id

...... ...

brokerid forclientidtype forcompanyiddate stockid

... ...

StockBookList

date

...

stockid

...

Address

country

...

state

......

id

...

street

...

citynumber

...

StockInformation

...

companyid

...

sharetypeid

...

numberofshares

...

Thursday, August 8, 13

Demo, Ontology

StockBroker

Trader

StockExchangeMember

Investor

Dealer StockTrader

tradesOnBehalfOf

usesBroker

Person

1 .. *

<<ident>>financialInstrumentID: intFinancialInstrument

<<ident>listdate: dateStockExchangeList

<<ident>transactionID:inttransactionDate: Date

Transaction

amountOfShares: inttypeOfShares: Boolean

Stock 1 .. *0 .. *

listsStock

StockExchangeMemberisExecutedBy

1 .. 1

Company

involvesInstrument

isTradedIn

1 .. 1

0 .. 1

Acquisition Offer

isListedIn1 .. 1 0 .. *

hasStockbelongsToCompany

{disjoint}

InvestorisExecutedFor1 .. 1

companyName: StringmarketShares: IntegernetWorth: Real

Company

firstName: NamelastName: StringdateOfBirth: Datessn: String

PhysicalPersonLegalPerson

<<ident>personID: intPerson

<<ident>addressID: intinStreet: SringhasNumber: IntinCity: StringinState: StringinCountry: String

Address1 .. *

1 .. 1

hasAddress{disjoint}

Thursday, August 8, 13

Mappings, populating concepts

Address(getAddressObj($address.id))

select * from address;

Thursday, August 8, 13

Mappings, populating attributes (datatype properties)

Address(getAddressObj($address.id)),addressID(getAddressObj($address.id),$address.id)

select * from address;

Thursday, August 8, 13

Mappings, populating roles (object properties)

hasAddress(getPersonObj($broker.id),getAddressObj($broker.addressid))

select * from broker;

Thursday, August 8, 13

Scenario II, conceptual model extraction

Thursday, August 8, 13

Scenario II, conceptual model extraction

shares: int<<ident> id: int

Stock_Unit

1 .. 1

Stock_Company

average: int<<ident>date: dateTransaction_List1 .. *

0 .. *

Stock_TransactionList

descr: string date: date<<ident> id: int

Purchase

descr: string date: date<<ident> id: int

SalePurchase_Stock

0 .. *

descr: string date: date<<ident> id: int

Stock_Exchange_Company

1 .. 1

Sale_Stock

0 .. 10 .. 1 1 .. 1

type: stringname: string<<ident> id: int

Broker

name: string<<ident> id: intShare_Holder

1 .. 11 .. 1 Broker_SaleBroker_Purchase

1 .. *

Share_Holder_Broker

Thursday, August 8, 13

Scenario II, conceptual model extraction

STOCK_UNIT

...... ...

company_idsharesid

PURCHASE

broker_id

......

stock_iddescr

......

date

...

id

SALE

broker_id

......

stock_iddescr

......

date

...

id

TRANSACTION_LIST

... ...

averagedate

...

stock_id

...

trans_date

STOCK_TRANSACTIONLISTSTOCK_EXCHANGE_COMPANY

shares

......... ...

networthnameid

BROKER

...... ...

typenameid

TRADER_CLIENT

...... ...

broker_idnameid

Thursday, August 8, 13

Scenario II, conceptual model extraction

STOCK_UNIT

...... ...

company_idsharesid

PURCHASE

broker_id

......

stock_iddescr

......

date

...

id

SALE

broker_id

......

stock_iddescr

......

date

...

id

TRANSACTION_LIST

... ...

averagedate

...

stock_id

...

trans_date

STOCK_TRANSACTIONLISTSTOCK_EXCHANGE_COMPANY

shares

......... ...

networthnameid

BROKER

...... ...

typenameid

TRADER_CLIENT

...... ...

broker_idnameid

Thursday, August 8, 13

Scenario II, conceptual model extraction

STOCK_UNIT

...... ...

company_idsharesid

PURCHASE

broker_id

......

stock_iddescr

......

date

...

id

SALE

broker_id

......

stock_iddescr

......

date

...

id

TRANSACTION_LIST

... ...

averagedate

...

stock_id

...

trans_date

STOCK_TRANSACTIONLISTSTOCK_EXCHANGE_COMPANY

shares

......... ...

networthnameid

BROKER

...... ...

typenameid

TRADER_CLIENT

...... ...

broker_idnameid

shares: int<<ident> id: int

Stock_Unit

1 .. 1

Stock_Company

average: int<<ident>date: dateTransaction_List1 .. *

0 .. *

Stock_TransactionList

descr: string date: date<<ident> id: int

Purchase

descr: string date: date<<ident> id: int

SalePurchase_Stock

0 .. *

descr: string date: date<<ident> id: int

Stock_Exchange_Company

1 .. 1

Sale_Stock

0 .. 10 .. 1 1 .. 1

type: stringname: string<<ident> id: int

Broker

name: string<<ident> id: intShare_Holder

1 .. 11 .. 1 Broker_SaleBroker_Purchase

1 .. *

Share_Holder_Broker

Thursday, August 8, 13

Final Remarks

• Plugin and server are now going trough extensive testing

• Public releases of both tools will happen by the end of april

• The software will be downloadable from

• http://www.inf.unibz.it/~rodriguez/obda/

• Future work: Explanations for all inferences and queries, Extending Protege/DIG with more expressivity regarding roles.

Thursday, August 8, 13