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