Realizing Ontology
Based Data Access
A Plugin for Protégé
Mariano Rodríguez-Muro
Lina Lubyte
Diego Calvanese
Free University of Bozen Bolzano
Knowledge 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 Source
Data Source
Data Source
Data Layer
User Ontology
Semantic LayerUser
Queries
Semantic
Mappings
Thursday, August 8, 13
Wouldn’t it be nice if...
Data Source
Data Source
Data Source
Data Layer
User Ontology
Semantic LayerUser
Queries
Semantic
Mappings
Data Source
Data Source
Data Source
Data Layer
User Ontology
Semantic LayerUser
Queries
Semantic
Mappings
Thursday, August 8, 13
Wouldn’t it be nice if...
RDBMs
Semantic Layer Data Layer
User
Queries
Ontology RDBMs
Data Layer
Semantic
Mappings
OBDA-Enabled Reasoner
RDBMs
Semantic Layer Data Layer
User
Queries
Ontology 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
Queries
Ontology RDBMs
Data Layer
Semantic
Mappings
OBDA-Enabled Reasoner
RDBMs
Semantic Layer Data Layer
User
Queries
Ontology 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: int
FinancialInstrument
<<ident>listdate: date
StockExchangeList
<<ident>transactionID:int
transactionDate: Date
Transaction
amountOfShares: int
typeOfShares: Boolean
Stock 1 .. *0 .. *
listsStock
StockExchangeMember
isExecutedBy
1 .. 1
Company
involvesInstrument
isTradedIn
1 .. 1
0 .. 1
Acquisition Offer
isListedIn
1 .. 1 0 .. *
hasStock
belongsToCompany
{disjoint}
Investor
isExecutedFor1 .. 1
companyName: String
marketShares: Integer
netWorth: Real
Company
firstName: Name
lastName: String
dateOfBirth: Date
ssn: String
PhysicalPersonLegalPerson
<<ident>personID: int
Person
<<ident>addressID: int
inStreet: Sring
hasNumber: Int
inCity: String
inState: String
inCountry: String
Address
1 .. *
1 .. 1
hasAddress{disjoint}
Thursday, August 8, 13
StockBroker
Trader
StockExchangeMember
Investor
Dealer StockTrader
tradesOnBehalfOf
usesBroker
Person
1 .. *
<<ident>>financialInstrumentID: int
FinancialInstrument
<<ident>listdate: date
StockExchangeList
<<ident>transactionID:int
transactionDate: Date
Transaction
amountOfShares: int
typeOfShares: Boolean
Stock 1 .. *0 .. *
listsStock
StockExchangeMember
isExecutedBy
1 .. 1
Company
involvesInstrument
isTradedIn
1 .. 1
0 .. 1
Acquisition Offer
isListedIn
1 .. 1 0 .. *
hasStock
belongsToCompany
{disjoint}
Investor
isExecutedFor1 .. 1
companyName: String
marketShares: Integer
netWorth: Real
Company
firstName: Name
lastName: String
dateOfBirth: Date
ssn: String
PhysicalPersonLegalPerson
<<ident>personID: int
Person
<<ident>addressID: int
inStreet: Sring
hasNumber: Int
inCity: String
inState: String
inCountry: String
Address
1 .. *
1 .. 1
hasAddress{disjoint}
MiFID
Thursday, August 8, 13
StockBroker
Trader
StockExchangeMember
Investor
Dealer StockTrader
tradesOnBehalfOf
usesBroker
Person
1 .. *
<<ident>>financialInstrumentID: int
FinancialInstrument
<<ident>listdate: date
StockExchangeList
<<ident>transactionID:int
transactionDate: Date
Transaction
amountOfShares: int
typeOfShares: Boolean
Stock 1 .. *0 .. *
listsStock
StockExchangeMember
isExecutedBy
1 .. 1
Company
involvesInstrument
isTradedIn
1 .. 1
0 .. 1
Acquisition Offer
isListedIn
1 .. 1 0 .. *
hasStock
belongsToCompany
{disjoint}
Investor
isExecutedFor1 .. 1
companyName: String
marketShares: Integer
netWorth: Real
Company
firstName: Name
lastName: String
dateOfBirth: Date
ssn: String
PhysicalPersonLegalPerson
<<ident>personID: int
Person
<<ident>addressID: int
inStreet: Sring
hasNumber: Int
inCity: String
inState: String
inCountry: String
Address
1 .. *
1 .. 1
hasAddress{disjoint}
MiFID
Applications
Thursday, August 8, 13
StockBroker
Trader
StockExchangeMember
Investor
Dealer StockTrader
tradesOnBehalfOf
usesBroker
Person
1 .. *
<<ident>>financialInstrumentID: int
FinancialInstrument
<<ident>listdate: date
StockExchangeList
<<ident>transactionID:int
transactionDate: Date
Transaction
amountOfShares: int
typeOfShares: Boolean
Stock 1 .. *0 .. *
listsStock
StockExchangeMember
isExecutedBy
1 .. 1
Company
involvesInstrument
isTradedIn
1 .. 1
0 .. 1
Acquisition Offer
isListedIn
1 .. 1 0 .. *
hasStock
belongsToCompany
{disjoint}
Investor
isExecutedFor1 .. 1
companyName: String
marketShares: Integer
netWorth: Real
Company
firstName: Name
lastName: String
dateOfBirth: Date
ssn: String
PhysicalPersonLegalPerson
<<ident>personID: int
Person
<<ident>addressID: int
inStreet: Sring
hasNumber: Int
inCity: String
inState: String
inCountry: String
Address
1 .. *
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: int
FinancialInstrument
<<ident>listdate: date
StockExchangeList
<<ident>transactionID:int
transactionDate: Date
Transaction
amountOfShares: int
typeOfShares: Boolean
Stock 1 .. *0 .. *
listsStock
StockExchangeMember
isExecutedBy
1 .. 1
Company
involvesInstrument
isTradedIn
1 .. 1
0 .. 1
Acquisition Offer
isListedIn
1 .. 1 0 .. *
hasStock
belongsToCompany
{disjoint}
Investor
isExecutedFor1 .. 1
companyName: String
marketShares: Integer
netWorth: Real
Company
firstName: Name
lastName: String
dateOfBirth: Date
ssn: String
PhysicalPersonLegalPerson
<<ident>personID: int
Person
<<ident>addressID: int
inStreet: Sring
hasNumber: Int
inCity: String
inState: String
inCountry: String
Address
1 .. *
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: int
FinancialInstrument
<<ident>listdate: date
StockExchangeList
<<ident>transactionID:int
transactionDate: Date
Transaction
amountOfShares: int
typeOfShares: Boolean
Stock 1 .. *0 .. *
listsStock
StockExchangeMember
isExecutedBy
1 .. 1
Company
involvesInstrument
isTradedIn
1 .. 1
0 .. 1
Acquisition Offer
isListedIn
1 .. 1 0 .. *
hasStock
belongsToCompany
{disjoint}
Investor
isExecutedFor1 .. 1
companyName: String
marketShares: Integer
netWorth: Real
Company
firstName: Name
lastName: String
dateOfBirth: Date
ssn: String
PhysicalPersonLegalPerson
<<ident>personID: int
Person
<<ident>addressID: int
inStreet: Sring
hasNumber: Int
inCity: String
inState: String
inCountry: String
Address
1 .. *
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
Queries
Ontology RDBMs
Data Layer
Semantic
Mappings
OBDA-Enabled Reasoner
Thursday, August 8, 13
Components revised
RDBMs
Semantic Layer Data Layer
User
Queries
Ontology RDBMs
Data Layer
Semantic
Mappings
OBDA-Enabled Reasoner
Communication
Facilities
Thursday, August 8, 13
Components revised
RDBMs
Semantic Layer Data Layer
User
Queries
Ontology RDBMs
Data Layer
Semantic
Mappings
OBDA-Enabled Reasoner
Communication
Facilities
Reasoners need to
be extended with
new paradigm
Thursday, August 8, 13
Components revised
RDBMs
Semantic Layer Data Layer
User
Queries
Ontology 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 steps
Protégé
Protégé
OWLPlugin
OBDA
Plugin
SERVERSIDECLIENTSIDE
DIG 1.2 + OBDA
Extension
TBox
DS Info +
Mappings
QuOnto
DIG Server for
QuOnto
DS Info +
Mappings
TBox
RDBMS
Thursday, August 8, 13
First steps
Protégé
Protégé
OWLPlugin
OBDA
Plugin
SERVERSIDECLIENTSIDE
DIG 1.2 + OBDA
Extension
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 steps
Protégé
Protégé
OWLPlugin
OBDA
Plugin
SERVERSIDECLIENTSIDE
DIG 1.2 + OBDA
Extension
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 steps
Protégé
Protégé
OWLPlugin
OBDA
Plugin
SERVERSIDECLIENTSIDE
DIG 1.2 + OBDA
Extension
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: int
FinancialInstrument
<<ident>listdate: date
StockExchangeList
<<ident>transactionID:int
transactionDate: Date
Transaction
amountOfShares: int
typeOfShares: Boolean
Stock 1 .. *0 .. *
listsStock
StockExchangeMember
isExecutedBy
1 .. 1
Company
involvesInstrument
isTradedIn
1 .. 1
0 .. 1
Acquisition Offer
isListedIn
1 .. 1 0 .. *
hasStock
belongsToCompany
{disjoint}
Investor
isExecutedFor1 .. 1
companyName: String
marketShares: Integer
netWorth: Real
Company
firstName: Name
lastName: String
dateOfBirth: Date
ssn: String
PhysicalPersonLegalPerson
<<ident>personID: int
Person
<<ident>addressID: int
inStreet: Sring
hasNumber: Int
inCity: String
inState: String
inCountry: String
Address
1 .. *
1 .. 1
hasAddress{disjoint}
Thursday, August 8, 13
Demo, scenario 1
core 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: int
FinancialInstrument
<<ident>listdate: date
StockExchangeList
<<ident>transactionID:int
transactionDate: Date
Transaction
amountOfShares: int
typeOfShares: Boolean
Stock 1 .. *0 .. *
listsStock
StockExchangeMember
isExecutedBy
1 .. 1
Company
involvesInstrument
isTradedIn
1 .. 1
0 .. 1
Acquisition Offer
isListedIn
1 .. 1 0 .. *
hasStock
belongsToCompany
{disjoint}
Investor
isExecutedFor1 .. 1
companyName: String
marketShares: Integer
netWorth: Real
Company
firstName: Name
lastName: String
dateOfBirth: Date
ssn: String
PhysicalPersonLegalPerson
<<ident>personID: int
Person
<<ident>addressID: int
inStreet: Sring
hasNumber: Int
inCity: String
inState: String
inCountry: String
Address
1 .. *
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: date
Transaction_List1 .. *
0 .. *
Stock_TransactionList
descr: string
date: date
<<ident> id: int
Purchase
descr: string
date: date
<<ident> id: int
Sale
Purchase_Stock
0 .. *
descr: string
date: date
<<ident> id: int
Stock_Exchange_
Company
1 .. 1
Sale_Stock
0 .. 10 .. 1 1 .. 1
type: string
name: string
<<ident> id: int
Broker
name: string
<<ident> id: int
Share_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: date
Transaction_List1 .. *
0 .. *
Stock_TransactionList
descr: string
date: date
<<ident> id: int
Purchase
descr: string
date: date
<<ident> id: int
Sale
Purchase_Stock
0 .. *
descr: string
date: date
<<ident> id: int
Stock_Exchange_
Company
1 .. 1
Sale_Stock
0 .. 10 .. 1 1 .. 1
type: string
name: string
<<ident> id: int
Broker
name: string
<<ident> id: int
Share_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

IMAS'08 obda plugin

  • 1.
    Realizing Ontology Based DataAccess A Plugin for Protégé Mariano Rodríguez-Muro Lina Lubyte Diego Calvanese Free University of Bozen Bolzano Knowledge Representation meets Databases group Bolzano, Italy Thursday, August 8, 13
  • 2.
  • 3.
    Ontologies • What areOntologies? • Shared conceptualizations of a domain of discourse Thursday, August 8, 13
  • 4.
    Ontologies • What areOntologies? • Shared conceptualizations of a domain of discourse • Formal Semantics Thursday, August 8, 13
  • 5.
    Ontologies • What areOntologies? • Shared conceptualizations of a domain of discourse • Formal Semantics • Allow us to perform complex inferencing Thursday, August 8, 13
  • 6.
    Ontologies • What areOntologies? • Shared conceptualizations of a domain of discourse • Formal Semantics • Allow us to perform complex inferencing • Description Logics!! Thursday, August 8, 13
  • 7.
  • 8.
    Reasoners • Software systemsthat allow us to perform inferences over ontologies Thursday, August 8, 13
  • 9.
    Reasoners • Software systemsthat allow us to perform inferences over ontologies • Examples of reasoning services in DL reasoners: • Subsumption checking, Instance checking, consistency checking Thursday, August 8, 13
  • 10.
    Wouldn’t it benice if... Data Source Data Source Data Source Data Layer User Ontology Semantic LayerUser Queries Semantic Mappings Thursday, August 8, 13
  • 11.
    Wouldn’t it benice if... Data Source Data Source Data Source Data Layer User Ontology Semantic LayerUser Queries Semantic Mappings Data Source Data Source Data Source Data Layer User Ontology Semantic LayerUser Queries Semantic Mappings Thursday, August 8, 13
  • 12.
    Wouldn’t it benice if... RDBMs Semantic Layer Data Layer User Queries Ontology RDBMs Data Layer Semantic Mappings OBDA-Enabled Reasoner RDBMs Semantic Layer Data Layer User Queries Ontology RDBMs Data Layer Semantic Mappings OBDA-Enabled Reasoner Thursday, August 8, 13
  • 13.
    Wouldn’t it benice if... Meet OBDA RDBMs Semantic Layer Data Layer User Queries Ontology RDBMs Data Layer Semantic Mappings OBDA-Enabled Reasoner RDBMs Semantic Layer Data Layer User Queries Ontology RDBMs Data Layer Semantic Mappings OBDA-Enabled Reasoner Thursday, August 8, 13
  • 14.
    Example Scenario:Software consultant forfinancial 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
  • 15.
  • 16.
    StockBroker Trader StockExchangeMember Investor Dealer StockTrader tradesOnBehalfOf usesBroker Person 1 ..* <<ident>>financialInstrumentID: int FinancialInstrument <<ident>listdate: date StockExchangeList <<ident>transactionID:int transactionDate: Date Transaction amountOfShares: int typeOfShares: Boolean Stock 1 .. *0 .. * listsStock StockExchangeMember isExecutedBy 1 .. 1 Company involvesInstrument isTradedIn 1 .. 1 0 .. 1 Acquisition Offer isListedIn 1 .. 1 0 .. * hasStock belongsToCompany {disjoint} Investor isExecutedFor1 .. 1 companyName: String marketShares: Integer netWorth: Real Company firstName: Name lastName: String dateOfBirth: Date ssn: String PhysicalPersonLegalPerson <<ident>personID: int Person <<ident>addressID: int inStreet: Sring hasNumber: Int inCity: String inState: String inCountry: String Address 1 .. * 1 .. 1 hasAddress{disjoint} Thursday, August 8, 13
  • 17.
    StockBroker Trader StockExchangeMember Investor Dealer StockTrader tradesOnBehalfOf usesBroker Person 1 ..* <<ident>>financialInstrumentID: int FinancialInstrument <<ident>listdate: date StockExchangeList <<ident>transactionID:int transactionDate: Date Transaction amountOfShares: int typeOfShares: Boolean Stock 1 .. *0 .. * listsStock StockExchangeMember isExecutedBy 1 .. 1 Company involvesInstrument isTradedIn 1 .. 1 0 .. 1 Acquisition Offer isListedIn 1 .. 1 0 .. * hasStock belongsToCompany {disjoint} Investor isExecutedFor1 .. 1 companyName: String marketShares: Integer netWorth: Real Company firstName: Name lastName: String dateOfBirth: Date ssn: String PhysicalPersonLegalPerson <<ident>personID: int Person <<ident>addressID: int inStreet: Sring hasNumber: Int inCity: String inState: String inCountry: String Address 1 .. * 1 .. 1 hasAddress{disjoint} MiFID Thursday, August 8, 13
  • 18.
    StockBroker Trader StockExchangeMember Investor Dealer StockTrader tradesOnBehalfOf usesBroker Person 1 ..* <<ident>>financialInstrumentID: int FinancialInstrument <<ident>listdate: date StockExchangeList <<ident>transactionID:int transactionDate: Date Transaction amountOfShares: int typeOfShares: Boolean Stock 1 .. *0 .. * listsStock StockExchangeMember isExecutedBy 1 .. 1 Company involvesInstrument isTradedIn 1 .. 1 0 .. 1 Acquisition Offer isListedIn 1 .. 1 0 .. * hasStock belongsToCompany {disjoint} Investor isExecutedFor1 .. 1 companyName: String marketShares: Integer netWorth: Real Company firstName: Name lastName: String dateOfBirth: Date ssn: String PhysicalPersonLegalPerson <<ident>personID: int Person <<ident>addressID: int inStreet: Sring hasNumber: Int inCity: String inState: String inCountry: String Address 1 .. * 1 .. 1 hasAddress{disjoint} MiFID Applications Thursday, August 8, 13
  • 19.
    StockBroker Trader StockExchangeMember Investor Dealer StockTrader tradesOnBehalfOf usesBroker Person 1 ..* <<ident>>financialInstrumentID: int FinancialInstrument <<ident>listdate: date StockExchangeList <<ident>transactionID:int transactionDate: Date Transaction amountOfShares: int typeOfShares: Boolean Stock 1 .. *0 .. * listsStock StockExchangeMember isExecutedBy 1 .. 1 Company involvesInstrument isTradedIn 1 .. 1 0 .. 1 Acquisition Offer isListedIn 1 .. 1 0 .. * hasStock belongsToCompany {disjoint} Investor isExecutedFor1 .. 1 companyName: String marketShares: Integer netWorth: Real Company firstName: Name lastName: String dateOfBirth: Date ssn: String PhysicalPersonLegalPerson <<ident>personID: int Person <<ident>addressID: int inStreet: Sring hasNumber: Int inCity: String inState: String inCountry: String Address 1 .. * 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
  • 20.
    StockBroker Trader StockExchangeMember Investor Dealer StockTrader tradesOnBehalfOf usesBroker Person 1 ..* <<ident>>financialInstrumentID: int FinancialInstrument <<ident>listdate: date StockExchangeList <<ident>transactionID:int transactionDate: Date Transaction amountOfShares: int typeOfShares: Boolean Stock 1 .. *0 .. * listsStock StockExchangeMember isExecutedBy 1 .. 1 Company involvesInstrument isTradedIn 1 .. 1 0 .. 1 Acquisition Offer isListedIn 1 .. 1 0 .. * hasStock belongsToCompany {disjoint} Investor isExecutedFor1 .. 1 companyName: String marketShares: Integer netWorth: Real Company firstName: Name lastName: String dateOfBirth: Date ssn: String PhysicalPersonLegalPerson <<ident>personID: int Person <<ident>addressID: int inStreet: Sring hasNumber: Int inCity: String inState: String inCountry: String Address 1 .. * 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
  • 21.
    StockBroker Trader StockExchangeMember Investor Dealer StockTrader tradesOnBehalfOf usesBroker Person 1 ..* <<ident>>financialInstrumentID: int FinancialInstrument <<ident>listdate: date StockExchangeList <<ident>transactionID:int transactionDate: Date Transaction amountOfShares: int typeOfShares: Boolean Stock 1 .. *0 .. * listsStock StockExchangeMember isExecutedBy 1 .. 1 Company involvesInstrument isTradedIn 1 .. 1 0 .. 1 Acquisition Offer isListedIn 1 .. 1 0 .. * hasStock belongsToCompany {disjoint} Investor isExecutedFor1 .. 1 companyName: String marketShares: Integer netWorth: Real Company firstName: Name lastName: String dateOfBirth: Date ssn: String PhysicalPersonLegalPerson <<ident>personID: int Person <<ident>addressID: int inStreet: Sring hasNumber: Int inCity: String inState: String inCountry: String Address 1 .. * 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
  • 22.
    Components revised RDBMs Semantic LayerData Layer User Queries Ontology RDBMs Data Layer Semantic Mappings OBDA-Enabled Reasoner Thursday, August 8, 13
  • 23.
    Components revised RDBMs Semantic LayerData Layer User Queries Ontology RDBMs Data Layer Semantic Mappings OBDA-Enabled Reasoner Communication Facilities Thursday, August 8, 13
  • 24.
    Components revised RDBMs Semantic LayerData Layer User Queries Ontology RDBMs Data Layer Semantic Mappings OBDA-Enabled Reasoner Communication Facilities Reasoners need to be extended with new paradigm Thursday, August 8, 13
  • 25.
    Components revised RDBMs Semantic LayerData Layer User Queries Ontology RDBMs Data Layer Semantic Mappings OBDA-Enabled Reasoner Communication Facilities Reasoners need to be extended with new paradigm Design Tools! Thursday, August 8, 13
  • 26.
    First steps Protégé Protégé OWLPlugin OBDA Plugin SERVERSIDECLIENTSIDE DIG 1.2+ OBDA Extension TBox DS Info + Mappings QuOnto DIG Server for QuOnto DS Info + Mappings TBox RDBMS Thursday, August 8, 13
  • 27.
    First steps Protégé Protégé OWLPlugin OBDA Plugin SERVERSIDECLIENTSIDE DIG 1.2+ OBDA Extension 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
  • 28.
    First steps Protégé Protégé OWLPlugin OBDA Plugin SERVERSIDECLIENTSIDE DIG 1.2+ OBDA Extension 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
  • 29.
    First steps Protégé Protégé OWLPlugin OBDA Plugin SERVERSIDECLIENTSIDE DIG 1.2+ OBDA Extension 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
  • 30.
    Demo, Ontology StockBroker Trader StockExchangeMember Investor Dealer StockTrader tradesOnBehalfOf usesBroker Person 1.. * <<ident>>financialInstrumentID: int FinancialInstrument <<ident>listdate: date StockExchangeList <<ident>transactionID:int transactionDate: Date Transaction amountOfShares: int typeOfShares: Boolean Stock 1 .. *0 .. * listsStock StockExchangeMember isExecutedBy 1 .. 1 Company involvesInstrument isTradedIn 1 .. 1 0 .. 1 Acquisition Offer isListedIn 1 .. 1 0 .. * hasStock belongsToCompany {disjoint} Investor isExecutedFor1 .. 1 companyName: String marketShares: Integer netWorth: Real Company firstName: Name lastName: String dateOfBirth: Date ssn: String PhysicalPersonLegalPerson <<ident>personID: int Person <<ident>addressID: int inStreet: Sring hasNumber: Int inCity: String inState: String inCountry: String Address 1 .. * 1 .. 1 hasAddress{disjoint} Thursday, August 8, 13
  • 31.
    Demo, scenario 1 coreservices 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
  • 32.
    Demo, Ontology StockBroker Trader StockExchangeMember Investor Dealer StockTrader tradesOnBehalfOf usesBroker Person 1.. * <<ident>>financialInstrumentID: int FinancialInstrument <<ident>listdate: date StockExchangeList <<ident>transactionID:int transactionDate: Date Transaction amountOfShares: int typeOfShares: Boolean Stock 1 .. *0 .. * listsStock StockExchangeMember isExecutedBy 1 .. 1 Company involvesInstrument isTradedIn 1 .. 1 0 .. 1 Acquisition Offer isListedIn 1 .. 1 0 .. * hasStock belongsToCompany {disjoint} Investor isExecutedFor1 .. 1 companyName: String marketShares: Integer netWorth: Real Company firstName: Name lastName: String dateOfBirth: Date ssn: String PhysicalPersonLegalPerson <<ident>personID: int Person <<ident>addressID: int inStreet: Sring hasNumber: Int inCity: String inState: String inCountry: String Address 1 .. * 1 .. 1 hasAddress{disjoint} Thursday, August 8, 13
  • 33.
  • 34.
    Mappings, populating attributes (datatypeproperties) Address(getAddressObj($address.id)), addressID(getAddressObj($address.id),$address.id) select * from address; Thursday, August 8, 13
  • 35.
    Mappings, populating roles (objectproperties) hasAddress(getPersonObj($broker.id),getAddressObj($broker.addressid)) select * from broker; Thursday, August 8, 13
  • 36.
    Scenario II, conceptual modelextraction Thursday, August 8, 13
  • 37.
    Scenario II, conceptual modelextraction shares: int <<ident> id: int Stock_Unit 1 .. 1 Stock_Company average: int <<ident>date: date Transaction_List1 .. * 0 .. * Stock_TransactionList descr: string date: date <<ident> id: int Purchase descr: string date: date <<ident> id: int Sale Purchase_Stock 0 .. * descr: string date: date <<ident> id: int Stock_Exchange_ Company 1 .. 1 Sale_Stock 0 .. 10 .. 1 1 .. 1 type: string name: string <<ident> id: int Broker name: string <<ident> id: int Share_Holder 1 .. 11 .. 1 Broker_SaleBroker_Purchase 1 .. * Share_Holder_Broker Thursday, August 8, 13
  • 38.
    Scenario II, conceptual modelextraction 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
  • 39.
    Scenario II, conceptual modelextraction 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
  • 40.
    Scenario II, conceptual modelextraction 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: date Transaction_List1 .. * 0 .. * Stock_TransactionList descr: string date: date <<ident> id: int Purchase descr: string date: date <<ident> id: int Sale Purchase_Stock 0 .. * descr: string date: date <<ident> id: int Stock_Exchange_ Company 1 .. 1 Sale_Stock 0 .. 10 .. 1 1 .. 1 type: string name: string <<ident> id: int Broker name: string <<ident> id: int Share_Holder 1 .. 11 .. 1 Broker_SaleBroker_Purchase 1 .. * Share_Holder_Broker Thursday, August 8, 13
  • 41.
    Final Remarks • Pluginand 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