Put SPARQL in Your Code: Building Applications with Oracle Semantic Technologies. Xavier Lopez, Ph.D. Zhe Wu, Ph.D. Souripriya Das, Ph.D.

Similar documents
The Semantic Web for Application Developers. Oracle New England Development Center Zhe Wu, Ph.D. 1

Application of OASIS Integrated Collaboration Object Model (ICOM) with Oracle Database 11g Semantic Technologies

Semantic and Data Mining Technologies. Simon See, Ph.D.,

Semantic Data Management. Xavier Lopez, Ph.D., Director, Spatial & Semantic Technologies

Graph Database Performance: An Oracle Perspective

Mining Big Data with RDF Graph Technology:

Semantic Stored Procedures Programming Environment and performance analysis

RDF Support in Oracle Oracle USA Inc.

How To Use An Orgode Database With A Graph Graph (Robert Kramer)

Oracle Spatial and Graph

Introduction to Ontologies

Semantic Modeling with RDF. DBTech ExtWorkshop on Database Modeling and Semantic Modeling Lili Aunimo

Geospatial Platforms For Enabling Workflows

Geospatial Technology Innovations and Convergence

A collaborative platform for knowledge management

Big Data for Official Statistics Processing Big and Fast Data Optimizing Results with a Multi-Model Database

Geospatial Platforms For Enabling Workflows

Big Data, Cloud Computing, Spatial Databases Steven Hagan Vice President Server Technologies

An Ontological Approach to Oracle BPM

Design and Implementation of a Semantic Web Solution for Real-time Reservoir Management

Semantic Web Success Story

BUSINESS VALUE OF SEMANTIC TECHNOLOGY

Oracle Warehouse Builder 10g

Smart Cities require Geospatial Data Providing services to citizens, enterprises, visitors...

Comparison of Triple Stores

Performance Analysis, Data Sharing, Tools Integration: New Approach based on Ontology

<Insert Picture Here> Extending Hyperion BI with the Oracle BI Server

Tips and Tricks for Using Oracle TimesTen In-Memory Database in the Application Tier

ORACLE DATABASE 10G ENTERPRISE EDITION

DBMS / Business Intelligence, SQL Server

Oracle Data Miner (Extension of SQL Developer 4.0)

1 File Processing Systems

Semantic Interoperability

ORACLE OLAP. Oracle OLAP is embedded in the Oracle Database kernel and runs in the same database process

E6895 Advanced Big Data Analytics Lecture 4:! Data Store

Oracle 10g PL/SQL Training

Oracle Database 12c Plug In. Switch On. Get SMART.

Publishing Linked Data Requires More than Just Using a Tool

Optimizing the Performance of the Oracle BI Applications using Oracle Datawarehousing Features and Oracle DAC

Visualizing Large-Scale RDF Data Using Subsets, Summaries, and Sampling in Oracle

AV-005: Administering and Implementing a Data Warehouse with SQL Server 2014

Oracle Database 12c: Introduction to SQL Ed 1.1

Databases for 3D Data Management: From Point Cloud to City Model

<Insert Picture Here> Oracle SQL Developer 3.0: Overview and New Features

An Oracle White Paper February Managing Unstructured Data with Oracle Database 11g

LINKED DATA EXPERIENCE AT MACMILLAN Building discovery services for scientific and scholarly content on top of a semantic data model

news from Tom Bacon about Monday's lecture

Scalable End-User Access to Big Data HELLENIC REPUBLIC National and Kapodistrian University of Athens

Deploying a Geospatial Cloud

ABSTRACT 1. INTRODUCTION. Kamil Bajda-Pawlikowski

Oracle Database 11g Comparison Chart

SPARQL UniProt.RDF. Get these slides! Tutorial plan. Everyone has had some introduction slash knowledge of RDF.

MDM and Data Warehousing Complement Each Other

D B M G Data Base and Data Mining Group of Politecnico di Torino

Big Data, Fast Data, Complex Data. Jans Aasman Franz Inc

Oracle Graph: Graph Features of Oracle Database

Integrating Open Sources and Relational Data with SPARQL

DISCOVERING RESUME INFORMATION USING LINKED DATA

Network Graph Databases, RDF, SPARQL, and SNA

Oracle Database: SQL and PL/SQL Fundamentals

Relational Databases for the Business Analyst

Big Data Analytics Nokia

A generic approach for data integration using RDF, OWL and XML

Revealing Trends and Insights in Online Hiring Market Using Linking Open Data Cloud: Active Hiring a Use Case Study

Oracle Database: Program with PL/SQL

Oracle Database 10g: Introduction to SQL

Oracle Database: SQL and PL/SQL Fundamentals NEW

Oracle Advanced Analytics 12c & SQLDEV/Oracle Data Miner 4.0 New Features

Data Integration and ETL with Oracle Warehouse Builder: Part 1

Ontology based ranking of documents using Graph Databases: a Big Data Approach

Benchmarking the Performance of Storage Systems that expose SPARQL Endpoints

MOC 20461C: Querying Microsoft SQL Server. Course Overview

LDIF - Linked Data Integration Framework

SAP InfiniteInsight Explorer Analytical Data Management v7.0

Oracle Data Integrator 11g New Features & OBIEE Integration. Presented by: Arun K. Chaturvedi Business Intelligence Consultant/Architect

Course ID#: W 35 Hrs. Course Content

Accelerate Data Loading for Big Data Analytics Attunity Click-2-Load for HP Vertica

The basic data mining algorithms introduced may be enhanced in a number of ways.

Ganzheitliches Datenmanagement

Distributed Computing and Big Data: Hadoop and MapReduce

Comparing SQL and NOSQL databases

RDF y SPARQL: Dos componentes básicos para la Web de datos

Department of Defense. Enterprise Information Warehouse/Web (EIW) Using standards to Federate and Integrate Domains at DOD

D61830GC30. MySQL for Developers. Summary. Introduction. Prerequisites. At Course completion After completing this course, students will be able to:

Experiences from a Large Scale Ontology-Based Application Development

The Ontological Approach for SIEM Data Repository

Data Modeling in the Age of Big Data

Oracle BI EE Implementation on Netezza. Prepared by SureShot Strategies, Inc.

<Insert Picture Here> Oracle In-Memory Database Cache Overview

Transcription:

Put SPARQL in Your Code: Building Applications with Oracle Semantic Technologies Xavier Lopez, Ph.D. Zhe Wu, Ph.D. Souripriya Das, Ph.D.

Semantics at OOW 2009 - Sessions Date/Time Title Location Sunday, Oct. 11 10:30 a.m. 11:45 a.m. 2:30 p.m. 3:45 p.m. Build Better SQL and Document Queries with Oracle Semantic Technologies, Part 1 Build Better SQL and Document Queries with Oracle Semantic Technologies, Part 2 Dive into Semantic Technologies: Security, Document Index, and Change Management Put SPARQL in Your Code: Building Applications with Oracle Semantic Technologies Hilton Hotel Continental Parlor 1/2/3 Hilton Hotel Continental Parlor 1/2/3 Hilton Hotel Golden Gate 2 Hilton Hotel Golden Gate 2 Tuesday, Oct. 13 4:00 p.m. Turning the Database Inside-Out with Complex Event Processing Hilton Hotel Golden Gate 1

Semantics at OOW 2009 - Sessions Date/Time Title Location Wednesday, Oct. 14 10:15 a.m. Who s Who and What s What with Oracle Database Semantic Technologies Moscone South Room 270 DEMOgrounds Oracle Database Semantic Technologies - Moscone West, W-018

Agenda Intro to Semantic Web and Business Use Cases Semantic Technologies in Oracle Database 11gR2 Fundamentals: Storage and Query Enterprise RDF: Semantic indexing, Security, Versioning Inference Jena Adaptor for Oracle Database Utilities Performance 4

THE FOLLOWING IS INTENDED TO OUTLINE OUR GENERAL PRODUCT DIRECTION. IT IS INTENDED FOR INFORMATION PURPOSES ONLY, AND MAY NOT BE INCORPORATED INTO ANY CONTRACT. IT IS NOT A COMMITMENT TO DELIVER ANY MATERIAL, CODE, OR FUNCTIONALITY, AND SHOULD NOT BE RELIED UPON IN MAKING PURCHASING DECISION. THE DEVELOPMENT, RELEASE, AND TIMING OF ANY FEATURES OR FUNCTIONALITY DESCRIBED FOR ORACLE'S PRODUCTS REMAINS AT THE SOLE DISCRETION OF ORACLE. 5

Introduction to Semantic Web and Business Use Cases 6

Semantic Data Management Characteristics Discovery of data relationships across Structured data (database, apps, web services) Unstructured data (email, office documents) Multi-data types (graphs, spatial, text, sensors) Text Mining & Web Mining infrastructure Terabytes of structured & unstructured data Queries are not defined in advance Schemas are continuously evolving Associate more meaning (context) to enterprise data to enable its (re)use across applications Allow sharing and reuse of enterprise and web data. Built on open, industry W3C standards: SQL, XML, RDF, OWL, SPARQL 7

Case Study: National Intelligence Ontology Engineering Modeling Process Web Resources Information Extraction Categorization, Feature/ term Extraction RDF/OWL Processed Document Collection OWL Ontologies Domain Specific Knowledge Base News, Email, RSS SQL/SPARQL Query Content Mgmt. Systems Explore Browsing, Presentation, Reporting, Visualization, Query Analyst 8

Data Integration Platform in Health Informatics Enterprise Information Consumers (EICs) Access Patient Care Workforce Management Business Intelligence Clinical Analytics Run-Time Metadata Deploy Model Virtual Relate Integration Server (Semantic Knowledge base) Model Physical Access LIS CIS HTB HIS 9

Data Integration Platform in Health Informatics Enterprise Information Consumers (EICs) Access Patient Care Workforce Management Business Intelligence Clinical Analytics Run-Time Metadata Deploy Model Virtual Relate Integration Server (Semantic Knowledge base) Model Physical Access LIS CIS HTB HIS 9

Semantic Data Management Workflow Transaction Systems Edit & Transform Load, Query & Inference Applications & Analysis Unstructured Content RSS, email Other Data Formats Entity Extraction & Transform Ontology Engineering Categorization Custom Scripting RDF/OWL Data Management SQL & SPARQL Query Inferencing Semantic Rules Scalability & Security Graph Visualization Link Analysis Statistical Analysis Faceted Search Pattern Discovery Text Mining Data Sources Partners Partners 10

Oracle Database 11g RDF/OWL Graph Data Management Oracle database 11g is the leading commercial database with native RDF/ OWL data management Scalable & secure platform for widerange of semantic applications Readily scales to ultra-large repositories (billions of triples) Choice of SQL or SPARQL query Leverages Oracle Partitioning. RAC supported Growing ecosystem of 3 rd party tools partners Load / Storage Query Reasoning Key Capabilities: Native RDF graph data store Manages billions of triples Fast batch, bulk and incremental load SQL: SEM_Match SPARQL: via Jena plug-in Ontology assisted query of RDBMS data Forward chaining model OWLprime, OWL 2 RL, RDFS User defined rule base 11

Semantic Technology Partners Integrated Tools and Solution Providers: 12

Release 11.1 Semantic Technologies W3C standards: RDF, RDFS, OWL, SPARQL SQL & DML access to RDF/OWL data and ontologies Querying in SQL w/ SPARQL-like graph patterns Querying w/ SPARQL in Java through Jena adaptor Ontology-assisted querying of relational data Native Inferencing: RDFS/OWL & user-defined rules Persistent, scalable, ahead of queries, plugable reasoners Model level security Bulk and incremental loading of triples Up to 8 exabytes,1 million graphs w/ multi-graph querying Integral Oracle Partitioning and also table compression

Release 11.2 Semantic Technologies Strong security for Semantic Technologies Security policies and data classification for RDF data Semantic indexing of documents Semantic indexing of documents based on popular natural language tools Faster, more efficient reasoning to find new relationships Parallel and incremental inference, owl:sameas optimization Change management for collaboration Standards & open source support SPARQL query support for Filter, Union in SEM_MATCH table function OWL: union, intersection, OWL 2 property chains, disjoint properties Pellet OWL DL reasoner Integration Jena v2.6, ARQ 2.7.0 Java SDK for SPARQL for 3rd party integration e.g., Sesame W3C Simple Knowledge Organization System (SKOS) & SNOMED ontology Utility to swap, rename, and merge model, rename entailment, remove duplicates

Background

Table of Family data: converting to RDF Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice sn = http:/www.socialnetwork.com

Children Table of Family data: converting to RDF Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice sn = http:/www.socialnetwork.com

Children Parents Table of Family data: converting to RDF Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice sn = http:/www.socialnetwork.com

Children Parents Table of Family data: converting to RDF Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice sn = http:/www.socialnetwork.com RDF

Children Parents RDF Table of Family data: converting to RDF Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice Subject Predicate Object sn:cathy hasfather sn:sammy sn:cathy hasmother sn:suzie sn:jack hasfather sn:sammy sn:jack hasmother sn:suzie sn:jack hassister sn:cathy sn = http:/www.socialnetwork.com

Children Parents RDF Table of Family data: converting to RDF Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice Subject Predicate Object sn:cathy hasfather sn:sammy sn:cathy hasmother sn:suzie sn:jack hasfather sn:sammy sn:jack hasmother sn:suzie sn:jack hassister sn:cathy From Row#1 sn = http:/www.socialnetwork.com

Children Parents RDF Table of Family data: converting to RDF Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice Subject Predicate Object sn:cathy hasfather sn:sammy sn:cathy hasmother sn:suzie sn:jack hasfather sn:sammy sn:jack hasmother sn:suzie sn:jack hassister sn:cathy From Row#1 From Row#2 sn = http:/www.socialnetwork.com

Table of Family data: inferring new data Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice sn = http:/www.socialnetwork.com

Children Table of Family data: inferring new data Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice sn = http:/www.socialnetwork.com

Children Parents Table of Family data: inferring new data Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice sn = http:/www.socialnetwork.com

Children Parents Table of Family data: inferring new data Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice sn:sammy sn:janice sn:martha sn:john sn = http:/www.socialnetwork.com

Children Parents Grand Parents Table of Family data: inferring new data Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice sn:sammy sn:janice sn:martha sn:john sn = http:/www.socialnetwork.com

Children Parents Grand Parents Spouses Table of Family data: inferring new data Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice sn:sammy sn:janice sn:martha sn:john sn = http:/www.socialnetwork.com

Table of Family data: inferring new data Children Parents Grand Parents Spouses Name hasfather hasmother hassister sn:cathy sn:sammy sn:suzie sn:jack sn:sammy sn:suzie sn:cathy sn:tom sn:matt sn:martha sn:cindy sn:matt sn:martha sn:suzie sn:john sn:janice sn:matt sn:john sn:janice sn:sammy sn:janice sn:martha sn:john Gender Female Female Male Male Female Female Male sn = http:/www.socialnetwork.com

SPARQL Query Language for RDF hasfather hasmother John Janice Sammy Suzie Matt Martha Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } hasfather hasmother John Janice Sammy Suzie Matt Martha Cathy Jack Tom Cindy

SPARQL Query Language for RDF 1 Querying RDF data Find pairs of siblings (same parents) SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } hasfather John Janice hasmother 1 Sammy Suzie Matt Martha Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 hasfather hasmother John 1 2 Janice Sammy Suzie Matt Martha Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 hasfather hasmother John 1 2 3 Janice Sammy Suzie Matt Martha Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 4 hasfather John Janice hasmother 1 2 3 4 Sammy Suzie Matt Martha Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 4 hasfather hasmother John Janice 1 2 3 4 Result (bindings)?x?y Sammy Suzie Matt Martha Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 4 hasfather hasmother John Janice 1 2 3 4 Result (bindings)?x?y Sammy Suzie Matt Martha Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 4 hasfather hasmother John Janice 1 2 3 4 Result (bindings)?x?y Suzie Matt Sammy Suzie Matt Martha Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 4 John Janice hasfather hasmother 1 2 3 4 Sammy Suzie Matt Martha Result (bindings)?x?y Suzie Matt Matt Suzie Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 4 John Janice hasfather hasmother 1 2 3 4 Sammy Suzie Matt Martha Result (bindings)?x?y Suzie Matt Matt Suzie Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 4 John Janice hasfather hasmother 1 2 3 4 Sammy Suzie Matt Martha Result (bindings)?x?y Suzie Matt Matt Suzie Cathy Jack Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 4 John Janice hasfather hasmother 1 2 3 4 Sammy Suzie Matt Martha Result (bindings)?x?y Suzie Matt Matt Suzie Cathy Jack Jack Cathy Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 4 John Janice hasfather hasmother 1 2 3 4 Sammy Suzie Matt Martha Result (bindings)?x?y Suzie Matt Matt Suzie Cathy Jack Jack Cathy Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 4 John Janice hasfather hasmother 1 2 3 4 Sammy Suzie Matt Martha Result (bindings)?x?y Suzie Matt Matt Suzie Cathy Jack Jack Cathy Tom Cindy Cathy Jack Tom Cindy

SPARQL Query Language for RDF Querying RDF data Find pairs of siblings (same parents) 1 3 SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } 2 4 hasfather hasmother John Janice 1 2 3 4 Sammy Suzie Matt Martha Cathy Jack Tom Cindy Result (bindings)?x?y Suzie Matt Matt Suzie Cathy Jack Jack Cathy Tom Cindy Cindy Tom

SQL and graph query

SQL and graph query Querying RDF data Find pairs of siblings (same parents) SELECT?x?y FROM <rdf_graph> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) }

SQL and graph query Querying RDF data Find pairs of siblings (same parents) SELECT?x?y FROM <rdf_graph> g1, rdf_graph g2, rdf_graph g3, rdf_graph g4 WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) }

SQL and graph query Querying RDF data Find pairs of siblings (same parents) SELECT?x g1.subject?y x, g3.subject y FROM <rdf_graph> g1, rdf_graph g2, rdf_graph g3, rdf_graph g4 WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) }

SQL and graph query Querying RDF data Find pairs of siblings (same parents) SELECT?x g1.subject?y x, g3.subject y FROM <rdf_graph> g1, rdf_graph g2, rdf_graph g3, rdf_graph g4 WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } g1.subject!= g3.subject

SQL and graph query Querying RDF data Find pairs of siblings (same parents) SELECT?x g1.subject?y x, g3.subject y FROM <rdf_graph> g1, rdf_graph g2, rdf_graph g3, rdf_graph g4 WHERE { g1.predicate = hasfather AND?x g2.predicate hasfather?f = hasmother. AND?x g3.predicate hasmother =?m hasfather. AND?y g4.predicate hasfather?f = hasmother. AND?y g1.subject hasmother = g2.subject?m. AND /* variable?x */ g3.subject = g4.subject AND /* variable?y */ g1.object = g3.object AND /* variable?f */ g2.object = g4.object AND /* variable?m */ FILTER(?x!=?y) } g1.subject!= g3.subject

Oracle Database 11g R2 Semantic Technologies: Storage, Query, Enterprise RDF

Architectural Overview

Architectural Overview Oracle DB RDF/OWL Security: fine-grained RDF/OWL data and ontologies Versioning: Workspaces Rulebases: OWL, RDF/S, user-defined Inferred RDF/OWL data Semantic Indexes Enterprise (Relational) data

Architectural Overview Core functionality Bulk-Load LOAD Incr. DML OWL subsets INFER RDF/S User-def. QUERY (SQL-based SPARQL) Query RDF/ OWL data and ontologies Ontologyassisted Query of Enterprise Data Oracle DB RDF/OWL Security: fine-grained RDF/OWL data and ontologies Versioning: Workspaces Rulebases: OWL, RDF/S, user-defined Inferred RDF/OWL data Semantic Indexes Enterprise (Relational) data

Architectural Overview Programming Interface SPARQL (Jena) Java API support JDBC Java Programs SQL Interface SQLplus PL/SQL SQLdev. Core functionality Bulk-Load LOAD Incr. DML OWL subsets INFER RDF/S User-def. QUERY (SQL-based SPARQL) Query RDF/ OWL data and ontologies Ontologyassisted Query of Enterprise Data Oracle DB RDF/OWL Security: fine-grained RDF/OWL data and ontologies Versioning: Workspaces Rulebases: OWL, RDF/S, user-defined Inferred RDF/OWL data Semantic Indexes Enterprise (Relational) data

Architectural Overview Programming Interface Core functionality Oracle DB RDF/OWL SPARQL (Jena) Bulk-Load LOAD Java API support Incr. DML RDF/OWL data and ontologies JDBC OWL subsets Security: fine-grained INFER RDF/S Rulebases: OWL, RDF/S, user-defined Java Programs User-def. SQL Interface SQLplus Versioning: Workspaces Inferred RDF/OWL data PL/SQL Query RDF/ OWL data and ontologies Semantic Indexes SQLdev. QUERY (SQL-based SPARQL) Ontologyassisted Query of Enterprise Data Enterprise (Relational) data Reasoners: Pellet NLP Info. Extractor: Calais, GATE 3 rd -Party Callouts

Architectural Overview Programming Interface Core functionality Oracle DB RDF/OWL SPARQL (Jena) Bulk-Load LOAD Java API support Incr. DML RDF/OWL data and ontologies JDBC OWL subsets Security: fine-grained INFER RDF/S Rulebases: OWL, RDF/S, user-defined Java Programs User-def. SQL Interface SQLplus Versioning: Workspaces Inferred RDF/OWL data PL/SQL Query RDF/ OWL data and ontologies Semantic Indexes SQLdev. QUERY (SQL-based SPARQL) Ontologyassisted Query of Enterprise Data Enterprise (Relational) data Tools Visualizer (cytoscope) Reasoners: Pellet NLP Info. Extractor: Calais, GATE 3 rd -Party Callouts

Architectural Overview 3 rd -Party Tools Topbraid Composer SPARQL Endpoint (Joseki) Tools Programming Interface Core functionality Oracle DB RDF/OWL SPARQL (Jena) Bulk-Load LOAD Java API support Incr. DML RDF/OWL data and ontologies JDBC OWL subsets Security: fine-grained INFER RDF/S Rulebases: OWL, RDF/S, user-defined Java Programs User-def. SQL Interface SQLplus Versioning: Workspaces Inferred RDF/OWL data PL/SQL Query RDF/ OWL data and ontologies Semantic Indexes SQLdev. QUERY (SQL-based SPARQL) Ontologyassisted Query of Enterprise Data Enterprise (Relational) data Visualizer (cytoscope) Reasoners: Pellet NLP Info. Extractor: Calais, GATE 3 rd -Party Callouts

Core Entities in Oracle Database Semantic Store

Core Entities in Oracle Database Semantic Store Sem. Network Dictionary and data tables. New entities: models, rule bases, and rules indexes (entailments). OWL and RDFS rule bases are preloaded. Semantic Network (MDSYS)

Core Entities in Oracle Database Semantic Store Sem. Network Dictionary and data tables. New entities: models, rule bases, and rules indexes (entailments). OWL and RDFS rule bases are preloaded. Triples Semantic Network (MDSYS)

Core Entities in Oracle Database Semantic Store Sem. Network Dictionary and data tables. New entities: models, rule bases, and rules indexes (entailments). OWL and RDFS rule bases are preloaded. Triples Values Semantic Network (MDSYS)

Core Entities in Oracle Database Semantic Store Sem. Network Dictionary and data tables. New entities: models, rule bases, and rules indexes (entailments). OWL and RDFS rule bases are preloaded. Rulebases & Vocabularies OWL subset RDF / RDFS Triples Values Semantic Network (MDSYS)

Core Entities in Oracle Database Semantic Store Sem. Network Dictionary and data tables. New entities: models, rule bases, and rules indexes (entailments). OWL and RDFS rule bases are preloaded. SDO_RDF_TRIPLE_S A new object type for RDF. Rulebases & Vocabularies OWL subset RDF / RDFS Triples Values Semantic Network (MDSYS)

Core Entities in Oracle Database Semantic Store Sem. Network Dictionary and data tables. New entities: models, rule bases, and rules indexes (entailments). OWL and RDFS rule bases are preloaded. SDO_RDF_TRIPLE_S A new object type for RDF. Application Table Contains col of object type sdo_rdf_triple_s to allow loading and accessing RDF triples, and storing ancillary values. Application Tables scott herman scott A 1 A 2 R R A n R Rulebases & Vocabularies OWL subset RDF / RDFS Triples Values Semantic Network (MDSYS)

Core Entities in Oracle Database Semantic Store Sem. Network Dictionary and data tables. New entities: models, rule bases, and rules indexes (entailments). OWL and RDFS rule bases are preloaded. SDO_RDF_TRIPLE_S A new object type for RDF. Application Table Contains col of object type sdo_rdf_triple_s to allow loading and accessing RDF triples, and storing ancillary values. Model A model holds an RDF graph (set of S-P-O triples) and is associated with an sdo_rdf_triple_s column in an application table. Application Tables scott herman scott A 1 A 2 R R A n R Models M1 M2 Mn Rulebases & Vocabularies OWL subset RDF / RDFS Triples Values Semantic Network (MDSYS)

Core Entities in Oracle Database Semantic Store Sem. Network Dictionary and data tables. New entities: models, rule bases, and rules indexes (entailments). OWL and RDFS rule bases are preloaded. SDO_RDF_TRIPLE_S A new object type for RDF. Application Table Contains col of object type sdo_rdf_triple_s to allow loading and accessing RDF triples, and storing ancillary values. Model A model holds an RDF graph (set of S-P-O triples) and is associated with an sdo_rdf_triple_s column in an application table. Rulebase A rulebase is a set of rules used for inferencing. Application Tables scott herman scott A 1 A 2 R R A n R Models M1 M2 Mn Rulebases & Vocabularies OWL subset RDF / RDFS Triples Rule base m Values Semantic Network (MDSYS)

Core Entities in Oracle Database Semantic Store Sem. Network Dictionary and data tables. New entities: models, rule bases, and rules indexes (entailments). OWL and RDFS rule bases are preloaded. SDO_RDF_TRIPLE_S A new object type for RDF. Application Table Contains col of object type sdo_rdf_triple_s to allow loading and accessing RDF triples, and storing ancillary values. Model A model holds an RDF graph (set of S-P-O triples) and is associated with an sdo_rdf_triple_s column in an application table. Rulebase A rulebase is a set of rules used for inferencing. Entailments An entailment stores triples derived via inferencing. Application Tables scott herman scott A 1 A 2 R R A n R Models M1 M2 Mn Rulebases & Vocabularies OWL subset X1 RDF / RDFS X2 Xp Triples Rule base m Entailments Values Semantic Network (MDSYS)

Network Indexes Some B-tree indexes (including one for enforcing uniqueness constraint) are created automatically at sem. network creation time. The set of usable indexes can be manipulated using sem_apis.add_sem_index sem_apis.drop_sem_index sem_apis.alter_index_on_model sem_apis.alter_index_on_entailment Tip: when creating a network index, use the model_id column as part (usually, the last col) of the index key

Virtual Model Similar to simple database Views One may define a Virtual Model consisting of multiple sem. Models, and optionally the corresponding entailment. The relevant subprograms are sem_apis.create_virtual_model sem_apis.drop_virtual_model Benefits Allows ease and flexibility in specifying target models plus (optionally) the corresponding entailment Facilitates access control Query performance (esp. for queries against multi-model, or single/multi-model+entailment RDF data source)

Usage flow (via SQL interface) Create Application Table and model create table app_table(triple sdo_rdf_triple_s); exec sem_apis.create_sem_model ( family, app_table, triple ); Load data insert into app_table (triple) values(sdo_rdf_triple_s( family, )) Use sem_apis.bulk_load_from_staging_table() for large loads Collect statistics using: exec sem_apis.analyze_model( family ); Inference exec sem_apis.create_entailment ( family_owl_ent, sem_models( family ), sem_rulebases( owlprime )); Collect statistics using: exec sem_apis.analyze_rules_index( family_owl_ent ); Query select x, y from table(sem_match( {?x rdf:type?y}', sem_models ( family'), sem_rulebases( owlprime ), null, null));

SPARQL in SQL {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) }

SPARQL in SQL Querying RDF data Find pairs of siblings (same parents) SELECT x, y FROM {?x hasfather?f. WHERE?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) }

SPARQL in SQL Querying RDF data Find pairs of siblings (same parents) SELECT x, y FROM {?x hasfather?f. WHERE?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } Evaluates to

SPARQL in SQL Querying RDF data Find pairs of siblings (same parents) SELECT x, y FROM {?x hasfather?f. WHERE?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } Evaluates to x Suzie Matt Cathy Jack Tom Cindy y Matt Suzie Jack Cathy Cindy Tom

SPARQL in SQL Querying RDF data Find pairs of siblings (same parents) SELECT x, y FROM {?x hasfather?f. WHERE?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } Evaluates to x Suzie Matt Cathy Jack Tom Cindy y Matt Suzie Jack Cathy Cindy Tom Allows use of rich SQL constructs such as: aggregates, subqueries, analytical functions, expressions, etc. and joining with object-relational data (e.g., spatial).

Query performance: Rewrite to SQL Rewriting the SPARQL in SQL to SQL allows avoiding communication of data between SQL engine and non-sql engine, and making the whole query visible to the RDBMS optimizer as a single SQL query (thereby maximizing the possibility of getting the best execution plan chosen by the optimizer)

Query performance: Rewrite to SQL Rewriting the SPARQL in SQL to SQL allows avoiding communication of data between SQL engine and non-sql engine, and making the whole query visible to the RDBMS optimizer as a single SQL query (thereby maximizing the possibility of getting the best execution plan chosen by the optimizer) Querying RDF data Find pairs of siblings (same parents) SELECT x, y FROM WHERE

Query performance: Rewrite to SQL Rewriting the SPARQL in SQL to SQL allows avoiding communication of data between SQL engine and non-sql engine, and making the whole query visible to the RDBMS optimizer as a single SQL query (thereby maximizing the possibility of getting the best execution plan chosen by the optimizer) Querying RDF data Find pairs of siblings (same parents) SELECT x, y FROM WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) }

Query performance: Rewrite to SQL Rewriting the SPARQL in SQL to SQL allows avoiding communication of data between SQL engine and non-sql engine, and making the whole query visible to the RDBMS optimizer as a single SQL query (thereby maximizing the possibility of getting the best execution plan chosen by the optimizer) Querying RDF data Find pairs of siblings (same parents) SELECT x, y FROM WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } Replaced with

Query performance: Rewrite to SQL Rewriting the SPARQL in SQL to SQL allows avoiding communication of data between SQL engine and non-sql engine, and making the whole query visible to the RDBMS optimizer as a single SQL query (thereby maximizing the possibility of getting the best execution plan chosen by the optimizer) Querying RDF data Find pairs of siblings (same parents) SELECT x, y FROM WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } Replaced with SELECT FROM WHERE

Querying RDF data in SQL using SEM_MATCH Querying RDF data Find pairs of siblings (same parents) SELECT?x?y FROM <family> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } Querying RDF data in Oracle 11g Find pairs of siblings (same parents) SELECT x, y FROM TABLE(SEM_MATCH( {?x :hasfather?f.?x :hasmother?m.?y :hasfather?f.?y :hasmother?m. FILTER(?x!=?y) }, sem_models( family ),null, sem_aliases(sem_alias(, http://f.com/ )), null)) ;

Querying RDF data in SQL using SEM_MATCH SEM_MATCH rewritable table function Querying RDF data Find pairs of siblings (same parents) SELECT?x?y FROM <family> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } Querying RDF data in Oracle 11g Find pairs of siblings (same parents) SELECT x, y FROM TABLE(SEM_MATCH( {?x :hasfather?f.?x :hasmother?m.?y :hasfather?f.?y :hasmother?m. FILTER(?x!=?y) }, sem_models( family ),null, sem_aliases(sem_alias(, http://f.com/ )), null)) ;

Querying RDF data in SQL using SEM_MATCH SEM_MATCH rewritable table function SELECT FROM TABLE(SEM_MATCH( pattern,models,rulebases, aliases ) t WHERE Querying RDF data Find pairs of siblings (same parents) SELECT?x?y FROM <family> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } Querying RDF data in Oracle 11g Find pairs of siblings (same parents) SELECT x, y FROM TABLE(SEM_MATCH( {?x :hasfather?f.?x :hasmother?m.?y :hasfather?f.?y :hasmother?m. FILTER(?x!=?y) }, sem_models( family ),null, sem_aliases(sem_alias(, http://f.com/ )), null)) ;

Querying RDF data in SQL using SEM_MATCH SEM_MATCH rewritable table function SELECT FROM TABLE(SEM_MATCH( pattern,models,rulebases, aliases ) t WHERE SPARQL graph pattern embedded in SQL query Querying RDF data Find pairs of siblings (same parents) SELECT?x?y FROM <family> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } Querying RDF data in Oracle 11g Find pairs of siblings (same parents) SELECT x, y FROM TABLE(SEM_MATCH( {?x :hasfather?f.?x :hasmother?m.?y :hasfather?f.?y :hasmother?m. FILTER(?x!=?y) }, sem_models( family ),null, sem_aliases(sem_alias(, http://f.com/ )), null)) ;

Querying RDF data in SQL using SEM_MATCH SEM_MATCH rewritable table function SELECT FROM TABLE(SEM_MATCH( pattern,models,rulebases, aliases ) t WHERE SPARQL graph pattern embedded in SQL query Matches specified graph pattern against stored data Querying RDF data Find pairs of siblings (same parents) SELECT?x?y FROM <family> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } Querying RDF data in Oracle 11g Find pairs of siblings (same parents) SELECT x, y FROM TABLE(SEM_MATCH( {?x :hasfather?f.?x :hasmother?m.?y :hasfather?f.?y :hasmother?m. FILTER(?x!=?y) }, sem_models( family ),null, sem_aliases(sem_alias(, http://f.com/ )), null)) ;

Querying RDF data in SQL using SEM_MATCH SEM_MATCH rewritable table function SELECT FROM TABLE(SEM_MATCH( pattern,models,rulebases, aliases ) t WHERE SPARQL graph pattern embedded in SQL query Matches specified graph pattern against stored data Returns a table of results: Each result row is values for selected columns corresponding to mappings for the graph pattern variables Querying RDF data Find pairs of siblings (same parents) SELECT?x?y FROM <family> WHERE {?x hasfather?f.?x hasmother?m.?y hasfather?f.?y hasmother?m. FILTER(?x!=?y) } Querying RDF data in Oracle 11g Find pairs of siblings (same parents) SELECT x, y FROM TABLE(SEM_MATCH( {?x :hasfather?f.?x :hasmother?m.?y :hasfather?f.?y :hasmother?m. FILTER(?x!=?y) }, sem_models( family ),null, sem_aliases(sem_alias(, http://f.com/ )), null)) ;

HINT framework: Aliases

HINT framework: Aliases SELECT e, loc FROM TABLE(SEM_MATCH( {?e rdf:type :SoftwareEngineer.?e :worksfor?company.?company :headquarterloc?loc}, SEM_Models( emp, gmap ), SEM_Rulebases( OWLPRIME ), SEM_ALIASES(SEM_ALIAS('', 'http://example.org/')),null));

HINT framework: Aliases SELECT e, loc FROM TABLE(SEM_MATCH( {?e rdf:type :SoftwareEngineer.?e :worksfor?company.?company :headquarterloc?loc}, SEM_Models( emp, gmap ), SEM_Rulebases( OWLPRIME ), SEM_ALIASES(SEM_ALIAS('', 'http://example.org/')),null)); t0

HINT framework: Aliases SELECT e, loc FROM TABLE(SEM_MATCH( {?e rdf:type :SoftwareEngineer.?e :worksfor?company.?company :headquarterloc?loc}, SEM_Models( emp, gmap ), SEM_Rulebases( OWLPRIME ), SEM_ALIASES(SEM_ALIAS('', 'http://example.org/')),null)); t0 t1

HINT framework: Aliases SELECT e, loc FROM TABLE(SEM_MATCH( {?e rdf:type :SoftwareEngineer.?e :worksfor?company.?company :headquarterloc?loc}, SEM_Models( emp, gmap ), SEM_Rulebases( OWLPRIME ), SEM_ALIASES(SEM_ALIAS('', 'http://example.org/')),null)); t0 t1 t2

HINT framework: Aliases SELECT e, loc FROM TABLE(SEM_MATCH( {?e rdf:type :SoftwareEngineer.?e :worksfor?company.?company :headquarterloc?loc}, SEM_Models( emp, gmap ), SEM_Rulebases( OWLPRIME ), SEM_ALIASES(SEM_ALIAS('', 'http://example.org/')),null)); t0 t1 t2

HINT framework: Aliases SELECT e, loc FROM TABLE(SEM_MATCH( {?e rdf:type :SoftwareEngineer.?e :worksfor?company.?company :headquarterloc?loc}, SEM_Models( emp, gmap ), SEM_Rulebases( OWLPRIME ), SEM_ALIASES(SEM_ALIAS('', 'http://example.org/')),null)); t0 t1 t2 Aliases for the tables involved in the Join (in translated SQL query) For the 3 triple patterns: t0, t1, t2 aliases for RDF Model For the 3 distinct variables:?e,?company,?loc aliases for RDF_VALUE$

HINT framework: Aliases SELECT e, loc FROM TABLE(SEM_MATCH( {?e rdf:type :SoftwareEngineer.?e :worksfor?company.?company :headquarterloc?loc}, SEM_Models( emp, gmap ), SEM_Rulebases( OWLPRIME ), SEM_ALIASES(SEM_ALIAS('', 'http://example.org/')),null)); t0 t1 t2 Aliases for the tables involved in the Join (in translated SQL query) For the 3 triple patterns: t0, t1, t2 aliases for RDF Model For the 3 distinct variables:?e,?company,?loc aliases for RDF_VALUE$ 6-way Join query: t0 x t1 x t2 x?e x?company x?loc

HINT framework: Aliases SELECT e, loc FROM TABLE(SEM_MATCH( {?e rdf:type :SoftwareEngineer.?e :worksfor?company.?company :headquarterloc?loc}, SEM_Models( emp, gmap ), SEM_Rulebases( OWLPRIME ), SEM_ALIASES(SEM_ALIAS('', 'http://example.org/')),null)); t0 t1 t2 Aliases for the tables involved in the Join (in translated SQL query) For the 3 triple patterns: t0, t1, t2 aliases for RDF Model For the 3 distinct variables:?e,?company,?loc aliases for RDF_VALUE$ 6-way Join query: t0 x t1 x t2 x?e x?company x?loc Use of projection optimization reduces it to a 5-way join query since columns for only the?e and?loc variables are referred in containing SQL query: t0 x t1 x t2 x?e x?loc

Hint specification HINTS in SEM_MATCH query Similar to SQL hints Join order: LEADING( ), ORDERED Join type: USE_HASH( ), USE_NL( ), Access path: INDEX( ), Aliases are a bit different Variable names:?e,?company,?loc, Pattern ordinal based: t0, t1, t2,

Hint specification SELECT e, loc FROM TABLE(SEM_MATCH( {?e rdf:type :SoftwareEngineer.?e :worksfor?company.?company :headquarterloc?loc}, SEM_Models( emp, gmap ), SEM_Rulebases( OWLPRIME ), SEM_ALIASES(SEM_ALIAS('', 'http://example.org/')),null,null, HINT0 = { LEADING(t0 t1 t2) USE_NL(t1)} )); HINTS in SEM_MATCH query Similar to SQL hints Join order: LEADING( ), ORDERED Join type: USE_HASH( ), USE_NL( ), Access path: INDEX( ), Aliases are a bit different Variable names:?e,?company,?loc, Pattern ordinal based: t0, t1, t2,

Hint specification SELECT e, loc FROM TABLE(SEM_MATCH( {?e rdf:type :SoftwareEngineer. t0?e :worksfor?company. t1?company :headquarterloc?loc}, t2 SEM_Models( emp, gmap ), SEM_Rulebases( OWLPRIME ), SEM_ALIASES(SEM_ALIAS('', 'http://example.org/')),null,null, HINT0 = { LEADING(t0 t1 t2) USE_NL(t1)} )); HINTS in SEM_MATCH query Similar to SQL hints Join order: LEADING( ), ORDERED Join type: USE_HASH( ), USE_NL( ), Access path: INDEX( ), Aliases are a bit different Variable names:?e,?company,?loc, Pattern ordinal based: t0, t1, t2,

Hint specification SELECT e, loc FROM TABLE(SEM_MATCH( {?e rdf:type :SoftwareEngineer. t0?e :worksfor?company. t1?company :headquarterloc?loc}, t2 SEM_Models( emp, gmap ), SEM_Rulebases( OWLPRIME ), SEM_ALIASES(SEM_ALIAS('', 'http://example.org/')),null,null, HINT0 = { LEADING(t0 t1 t2) USE_NL(t1)} )); HINTS in SEM_MATCH query Similar to SQL hints Join order: LEADING( ), ORDERED Join type: USE_HASH( ), USE_NL( ), Access path: INDEX( ), Aliases are a bit different Variable names:?e,?company,?loc, Pattern ordinal based: t0, t1, t2,

Ontology-assisted Query using SQL Operators Upper_Extremity_Fracture rdfs:subclassof rdfs:subclassof Arm_Fracture rdfs:subclassof Forearm_Fracture Elbow_Fracture Hand_Fracture rdfs:subclassof ID DIAGNOSIS Finger_Fracture Find all entries in diagnosis column that are related to Upper_Extremity_Fracture Patients 1 Hand_Fracture 2 Rheumatoid_Arthritis Syntactic match returns no rows: SELECT p_id, diagnosis FROM Patients WHERE diagnosis = Upper_Extremity_Fracture;

Ontology-assisted Query using SQL Operators Upper_Extremity_Fracture rdfs:subclassof rdfs:subclassof Arm_Fracture rdfs:subclassof Forearm_Fracture Elbow_Fracture Hand_Fracture Patients ID DIAGNOSIS 1 Hand_Fracture 2 Rheumatoid_Arthritis rdfs:subclassof SELECT Finger_Fracture p_id, diagnosis FROM Patients Find all entries in diagnosis WHERE SEM_RELATED column that ( are related to diagnosis, Upper_Extremity_Fracture rdfs:subclassof, Upper_Extremity_Fracture, SELECT p_id, diagnosis FROM sem_models( Medical_ontology ), Patients WHERE diagnosis = sem_rulebases( RDFS ) Upper_Extremity_Fracture; ) = 1; Syntactic match returns no rows:

Ontology-assisted Query using SQL Operators Upper_Extremity_Fracture rdfs:subclassof rdfs:subclassof Arm_Fracture rdfs:subclassof Forearm_Fracture Patients ID Elbow_Fracture DIAGNOSIS 1 Hand_Fracture 2 Rheumatoid_Arthritis Hand_Fracture rdfs:subclassof SELECT p_id, diagnosis SELECT FROM Finger_Fracture Patients p_id, diagnosis FROM WHERE Patients SEM_RELATED Find all entries ( in diagnosis WHERE diagnosis, SEM_RELATED column that ( are related to rdfs:subclassof, diagnosis, Upper_Extremity_Fracture Upper_Extremity_Fracture, rdfs:subclassof, Upper_Extremity_Fracture, SELECT p_id, diagnosis FROM sem_models( Medical_ontology ), sem_models( Medical_ontology ), Patients WHERE diagnosis = Upper_Extremity_Fracture; sem_rulebases( RDFS ) ) = 1; 123) = 1 AND SEM_DISTANCE(123) <= 2; Syntactic match returns no rows:

Semantic Indexing of Documents 11.2 doci d Newsfeed table Article 1 Indiana authorities filed felony charges and a court issued an arrest warrant for a financial manager who apparently tried to fake his death by crashing his airplane in a Florida swamp. Marcus Schrenker, 38 Source CNN 2 Major dealers and investors NW....

Semantic Indexing of Documents 11.2 CREATE INDEX ArticleIndex ON NewsFeed (Article) INDEXTYPE IS SemContext PARAMETERS ( gate_nlp ) doci d Newsfeed table Article 1 Indiana authorities filed felony charges and a court issued an arrest warrant for a financial manager who apparently tried to fake his death by crashing his airplane in a Florida swamp. Marcus Schrenker, 38 Source CNN 2 Major dealers and investors NW....

Semantic Indexing of Documents 11.2 CREATE INDEX ArticleIndex ON NewsFeed (Article) INDEXTYPE IS SemContext PARAMETERS ( gate_nlp ) doci d Newsfeed table Article 1 Indiana authorities filed felony charges and a court issued an arrest warrant for a financial manager who apparently tried to fake his death by crashing his airplane in a Florida swamp. Marcus Schrenker, 38 Source CNN 2 Major dealers and investors NW....

doci d Semantic Indexing of Documents 11.2 CREATE INDEX ArticleIndex ON NewsFeed (Article) INDEXTYPE IS SemContext PARAMETERS ( gate_nlp ) Newsfeed table Article 1 Indiana authorities filed felony charges and a court issued an arrest warrant for a financial manager who apparently tried to fake his death by crashing his airplane in a Florida swamp. Marcus Schrenker, 38 Source CNN 2 Major dealers and investors NW.... Triples table with rowid references Subject Property Object rid p:marcus rdf:type rc::person r1 p:marcus :hasname Marcus ^^ r1 p:marcus :hasage 38 ^^xsd:.. r1 SemContext index on Article column

doci d Semantic Indexing of Documents 11.2 CREATE INDEX ArticleIndex ON NewsFeed (Article) INDEXTYPE IS SemContext PARAMETERS ( gate_nlp ) Newsfeed table Article 1 Indiana authorities filed felony charges and a court issued an arrest warrant for a financial manager who apparently tried to fake his death by crashing his airplane in a Florida swamp. Marcus Schrenker, 38 Source CNN 2 Major dealers and investors NW.... Triples table with rowid references Subject Property Object rid p:marcus rdf:type rc::person r1 p:marcus :hasname Marcus ^^ r1 p:marcus :hasage 38 ^^xsd:.. r1 SemContext index on Article column SELECT docid FROM Newsfeed WHERE SEM_CONTAINS (Article, {?x rdf:type rc:person.?x :hasage?age. FILTER(?age >= 35)} )=1

doci d Semantic Indexing of Documents 11.2 CREATE INDEX ArticleIndex ON NewsFeed (Article) INDEXTYPE IS SemContext PARAMETERS ( gate_nlp ) Newsfeed table Article 1 Indiana authorities filed felony charges and a court issued an arrest warrant for a financial manager who apparently tried to fake his death by crashing his airplane in a Florida swamp. Marcus Schrenker, 38 Source CNN 2 Major dealers and investors NW.... Triples table with rowid references Subject Property Object rid p:marcus rdf:type rc::person r1 p:marcus :hasname Marcus ^^ r1 p:marcus :hasage 38 ^^xsd:.. r1 SemContext index on Article column SELECT docid FROM Newsfeed WHERE SEM_CONTAINS (Article, {?x rdf:type rc:person.?x :hasage?age. FILTER(?age >= 35)} )=1 AND Source = CNN

doci d Semantic Indexing of Documents 11.2 CREATE INDEX ArticleIndex ON NewsFeed (Article) INDEXTYPE IS SemContext PARAMETERS ( gate_nlp ) Newsfeed table Article 1 Indiana authorities filed felony charges and a court issued an arrest warrant for a financial manager who apparently tried to fake his death by crashing his airplane in a Florida swamp. Marcus Schrenker, 38 Source CNN 2 Major dealers and investors NW.... Triples table with rowid references Subject Property Object rid p:marcus rdf:type rc::person r1 p:marcus :hasname Marcus ^^ r1 p:marcus :hasage 38 ^^xsd:.. r1 SemContext index on Article column SELECT docid FROM Newsfeed WHERE SEM_CONTAINS (Article, {?x rdf:type rc:person.?x :hasage?age. FILTER(?age >= 35)} )=1 AND Source = CNN Analytical Queries On Graph Data

Enterprise Security for Semantic Data [VPD] Access control policies on semantic data 11.2

Enterprise Security for Semantic Data [VPD] Access control policies on semantic data 11.2 Policy user can only access active projects Match pattern {?x rdf:type :Project } Apply pattern {?x :hasstatus :Active }

Enterprise Security for Semantic Data [VPD] Access control policies on semantic data 11.2 Policy user can only access active projects Match pattern {?x rdf:type :Project } Apply pattern {?x :hasstatus :Active } Query : Get the list of projects and their values SELECT?proj?val FROM ProjectsGraph WHERE {?proj :hasvalue?val }

Enterprise Security for Semantic Data [VPD] Access control policies on semantic data 11.2 Policy user can only access active projects Match pattern {?x rdf:type :Project } Apply pattern {?x :hasstatus :Active } Query : Get the list of projects and their values SELECT?proj?val FROM ProjectsGraph WHERE {?proj :hasvalue?val }?proj :hasstatus :Active }.

Enterprise Security for Semantic Data [VPD] Access control policies on semantic data 11.2 Policy user can access only access value active of projects s/he leads Match pattern {?x :hasvalue rdf:type :Project?v } } Apply pattern {?x :haslead :hasstatus sys_context( ) :Active } } Query : Get the list of projects and their values SELECT?proj?val FROM ProjectsGraph WHERE {?proj :hasvalue?val }

Enterprise Security for Semantic Data [VPD] Access control policies on semantic data 11.2 Policy user can access only access value active of projects s/he leads Match pattern {?x :hasvalue rdf:type :Project?v } } Apply pattern {?x :haslead :hasstatus sys_context( ) :Active } } Query : Get the list of projects and their values SELECT?proj?val FROM ProjectsGraph WHERE {?proj :hasvalue?val }?proj :haslead sys_context( ) }.

Enterprise Security for Semantic Data [VPD] Access control policies on semantic data 11.2 Policy user can access only access value active of projects s/he leads Match pattern {?x :hasvalue rdf:type :Project?v } } Apply pattern {?x :haslead :hasstatus sys_context( ) :Active } } Query : Get the list of projects and their values SELECT?proj?val FROM ProjectsGraph WHERE {?proj :hasvalue?val }

Enterprise Security for Semantic Data [OLS] Data classification labels for semantic data 11.2 Subject projecthls projecthls Predicate Organization Triples table Object N.America ContractValue 1000000 Row Label SE:HLS:US SE:HLS,FIN:US

Enterprise Security for Semantic Data [OLS] Data classification labels for semantic data 11.2 SELECT operation: Labels for triples are used to restrict access to the triples. Subject projecthls projecthls Predicate Organization Triples table Object N.America ContractValue 1000000 Row Label SE:HLS:US SE:HLS,FIN:US

Enterprise Security for Semantic Data [OLS] Data classification labels for semantic data 11.2 SELECT operation: Labels for triples are used to restrict access to the triples. Subject projecthls projecthls Predicate Organization Triples table Object N.America ContractValue 1000000 Row Label SE:HLS:US SE:HLS,FIN:US INSERT operation: Labels for resources to control their use as component of a triple during insertion. (Also, determines min. access label for inserted triple.)

Enterprise Security for Semantic Data [OLS] Data classification labels for semantic data 11.2 SELECT operation: Labels for triples are used to restrict access to the triples. Subject projecthls projecthls Predicate Organization Triples table Object N.America ContractValue 1000000 Row Label SE:HLS:US SE:HLS,FIN:US INSERT operation: Labels for resources to control their use as component of a triple during insertion. (Also, determines min. access label for inserted triple.) Position & Resource Row Label

Enterprise Security for Semantic Data [OLS] Data classification labels for semantic data 11.2 SELECT operation: Labels for triples are used to restrict access to the triples. Subject projecthls projecthls Predicate Organization Triples table Object N.America ContractValue 1000000 Row Label SE:HLS:US SE:HLS,FIN:US INSERT operation: Labels for resources to control their use as component of a triple during insertion. (Also, determines min. access label for inserted triple.) Position & Resource Row Label Subject: projecthls SE:HLS:US

Enterprise Security for Semantic Data [OLS] Data classification labels for semantic data 11.2 SELECT operation: Labels for triples are used to restrict access to the triples. Subject projecthls projecthls Predicate Organization Triples table Object N.America ContractValue 1000000 Row Label SE:HLS:US SE:HLS,FIN:US INSERT operation: Labels for resources to control their use as component of a triple during insertion. (Also, determines min. access label for inserted triple.) Position & Resource Row Label Subject: projecthls SE:HLS:US Predicate: hascontractvalue TS:FIN:

Enterprise Security for Semantic Data [OLS] Data classification labels for semantic data 11.2 SELECT operation: Labels for triples are used to restrict access to the triples. Subject projecthls projecthls Predicate Organization Triples table Object N.America ContractValue 1000000 Row Label SE:HLS:US SE:HLS,FIN:US INSERT operation: Labels for resources to control their use as component of a triple during insertion. (Also, determines min. access label for inserted triple.) Position & Resource Row Label Subject: projecthls SE:HLS:US Predicate: hascontractvalue TS:FIN:

Change Mgmt./Versioning for Sem. Data Manage public and private versions of semantic data in database workspaces (Workspace Manager) 11.2 An RDF Model is version-enabled by version-enabling the corresponding application table. exec DBMS_WM.enableVersioning (table_name => 'contracts_rdf_data'); RDF data modified within a workspace is private to the workspace until it is merged. SEM_MATCH queries on version-enabled models are version aware and only return relevant data. New versions created only for changed data Versioning is provisioned for inference

Inference, Jena Adaptor for Oracle Database, Utilities, and Performance 38

Inference 39

Infer Semantic Data Native inferencing in the database for RDF, RDFS, and a rich subset of OWL semantics (OWLSIF, OWLPRIME, RDFS++) User-defined rules Forward chaining. New relationships/triples are inferred and stored ahead of query time Removes on-the-fly reasoning and results in fast query times Proof generation Show one deduction path 40

Infer Semantic Data: APIs Recommended API for inference SEM_APIS.CREATE_ENTAILMENT( Index_name sem_models( GraphTBox, GraphABox, ), sem_rulebases( OWLPrime ), passes, Inf_components, Options ) Use PROOF=T to generate inference proof SEM_APIS.VALIDATE_ENTAILMENT( sem_models(( GraphTBox, GraphABox, ), sem_rulebases( OWLPrime ), Criteria, Max_conflicts, Options ) Java API: GraphOracleSem.performInference() Typical Usage: First load RDF/OWL data Call create_entailment to generate inferred graph Query both original graph and inferred data Inferred graph contains only new triples! Saves time & resources Typical Usage: First load RDF/OWL data Call create_entailment to generate inferred graph Call validate_entailment to find inconsistencies 41

New Release 11.2 Inference Features Richer semantics support including owl:intersectionof, unionof, oneof, W3C SKOS SNOMED OWL2 s owl:propertychainaxiom, owl:negativepropertyassertion, owl:haskey, owl:propertydisjointwith, Most OWL 2 RL/RDF rules Performance enhancement Large scale owl:sameas handling Parallel inference Incremental inference 42

New Release 11.2 Inference Components UNION: (OWL 1) owl:unionof INTERSECT & INTERSECTSCOH: (OWL 1) owl:intersectionof SNOMED: (OWL 2) Systematized Nomenclature of Medicine PROPDISJH: (OWL 2) interaction between owl:propertydisjointwith and rdfs:subpropertyof. CHAIN: (OWL 2) Supports chains of length 2 SKOSAXIOMS: most of the axioms defined in SKOS reference MBRLST: for any resource, every item in the list given as the value of the skos:memberlist property is also a value of the skos:member property. SVFH: capturing interaction between owl:somevaluesfrom and rdfs:subclassof THINGH & THINGSAM: any defined OWL class is a subclass of owl:thing & instances of owl:thing are equal to themselves 43

Enabling New Release 11.2 Inference Capabilities Enabling Parallel inference option EXECUTE sem_apis.create_entailment('m_idx',sem_models('m'), sem_rulebases('owlprime'), sem_apis.reach_closure, null, 'DOP=x'); Where x is the degree of parallelism (DOP) Enabling Incremental inference option EXECUTE sem_apis.create_entailment ('M_IDX',sem_models('M'), sem_rulebases('owlprime'),null,null, 'INC=T'); Enabling owl:sameas option to limit duplicates EXECUTE Sem_apis.create _entailment('m_idx',sem_models('m'), sem_rulebases('owlprime'),null,null,'opt_sameas=t'); Enabling compact data structures EXECUTE Sem_apis.create _entailment('m_idx',sem_models('m'), sem_rulebases('owlprime'),null,null, 'RAW8=T'); Enabling SKOS inference EXECUTE Sem_apis.create_entailment('M_IDX',sem_models('M'), sem_rulebases('skoscore'),null,null ); 44

Jena Adaptor for Oracle Database 11g Release 2 45

Jena Adaptor for Oracle Database 11g Release 1 Implements Jena s Graph/Model/BulkUpdateHandler/ APIs Proxy like design Data not cached in memory for scalability SPARQL query converted into SQL and executed inside DB A SPARQL with just conjunctive patterns is converted into a single SEM_MATCH query Allows various data loading Bulk/Batch/Incremental load RDF or OWL (in N3, RDF/XML, N-TRIPLE etc.) with strict syntax verification and long literal support Integrates Oracle Database release 11g RDF/OWL with tools including TopBraid Composer External complete DL reasoners (e.g. Pellet) 46 http://www.oracle.com/technology/tech/semantic_technologies/documentation/jenaadaptor2_readme.pdf

Programming Semantic Applications in Java Create an Oracle object oracle = new Oracle(oracleConnection); Create a GraphOracleSem Object graph = new GraphOracleSem(oracle, model_name, attachment); Load data graph.add(triple.create( )); // for incremental triple additions Collect statistics graph.analyze(); Run inference graph.performinference(); Collect statistics graph.analyzeinferredgraph(); Query QueryFactory.create( ); queryexec = QueryExecutionFactory.create(query, model); resultset = queryexec.execselect(); No need to create model manually! Important for performance! 47

Jena Adaptor for Oracle Database 11g Release 2 (1) SPARQL service endpoint supporting full SPARQL Protocol Integrated with Jena Joseki 3.4.0 (deployed in WLS 10.3) Utilizing J2EE data source for DB connection specification SPARQL Update (SPARUL) supported Tight integration with Jena ARQ 2.7.0 (2.8.0) for faster query performance Translate OPTIONAL, UNION, FILTER based queries into a single SEM_MATCH Translate Property Path queries into plain SQL Translate conjunctive pattern based queries into plain SQL Translate BGP + parallel OPTIONALS (no nesting) into plain SQL (result_cache enabled) Fall back to the original Jena ARQ in case of failure 48

Jena Adaptor for Oracle Database 11g Release 2 (2) Query management and execution control Timeout Query abort framework Including monitoring threads and a management servlet Designed for a J2EE cluster environment Hints allowed in SPARQL query syntax Parallel execution Support ARQ functions for projected variables fn:lower-case, upper-case, substring, Native, system provided functions can be used in SPARQL oext:lower-literal, oext:upper-literal, oext:build-uri-for-id, 49

Jena Adaptor for Oracle Database 11g Release 2 (3) Extensible user-defined functions in SPARQL Example PREFIX ouext: <http://oracle.com/semtech/jena-adaptor/ext/userdef-function#> SELECT?subject?object (ouext:my_strlen(?object) as?obj1) WHERE {?subject dc:title?object } User can implement the my_strlen functions in Oracle Database Connection Pooling through OraclePool java.util.properties prop = new java.util.properties(); prop.setproperty("initiallimit", "2"); // create 2 connections prop.setproperty("inactivitytimeout", "1800"); // seconds. OraclePool op = new OraclePool(szJdbcURL, szuser, szpasswd, prop, "OracleSemConnPool"); Oracle oracle = op.getoracle(); 50

Jena Adaptor for Oracle Database 11g Release 2 (4) API enhancements Parallel statistics collection Parallel and incremental inference Parallel application table index building Query just inferred data Transparent Virtual model support Shutdown hook logic disabled Basic compression enabled by default for application tables OracleUserRule now accepts filter parameter More utility functions 51

Semantic Technologies Utilities for Oracle Database 11g Release 2 52

Utility APIs SEM_APIS.remove_duplicates e.g. exec sem_apis.remove_duplicates( graph_model ); SEM_APIS.merge_models Can be used to clone model as well. e.g. exec sem_apis.merge_models( model1, model2 ); SEM_APIS.swap_names e.g. exec sem_apis.swap_names( production_model, prototype_model ); SEM_APIS.alter_model (entailment) e.g. sem_apis.alter_model( m1, MOVE, TBS_SLOWER ); SEM_APIS.rename_model/rename_entailment 53

Performance and Scalability Evaluation 54

Setup for Performance Use a balanced hardware system for database A single, huge physical disk for everything is not recommended. Multiple hard disks tied together through ASM is a good practice Make sure throughput of hardware components match up Component CPU core 1/2 Gbit HBA 16 port switch Fiber channel Disk controller GigE NIC (interconnect) Disk (spindle) MEM Hardware spec - 1/2 Gbit/s 8 * 2 Gbit/s 2 Gbit/s 2 Gbit/s 2 Gbit/s Sustained throughput 100-200 MB/s 100/200 MB/ s 1,200 MB/s 200 MB/s 200 MB/s 80 MB/s* 30-50 MB/s 2k-7k MB/s Some numbers are from Data Warehousing with 11g and RAC presentation More tips can be found at http://www.oracle.com/technology/tech/semantic_technologies/pdf/semtech09.pdf 55

Bulk Loader Performance on Desktop PC Ontology size bulk-load API [1] Time Time Sql*loader time range low [2] high [3] RDF Model: Data Indexes RDF Values: Data Indexes Space (in GB) Total: Data Index App Table: Data [4] Staging Table: Data [5] LUBM50 6.9 million 8 min 1min 4.3min 0.14 0.48 0.11 0.12 0.25 0.60 0.14 0.32 LUBM1000 138 million 3hr 25min 19min 1h 26m 2.75 9.32 2.30 2.33 5.05 11.65 2.77 6.39 LUBM8000 1,106 million 30hr 43min 2h 35m 11h 32m 21.98 74.15 18.62 19.45 40.60 93.60 22.10 51.66 UniProt (old) 207 million 4hr 40min 30m 1h 55m 4.06 13.86 1.44 2.18 5.50 16.04 4.04 7.69 Results collected on a single CPU PC (3GHz), 4GB RAM, 7200rpm SATA 3.0Gbps, 32 bit Linux. RDBMS 11.1.0.6 Empty network is assumed [1] Uses flags=>' VALUES_TABLE_INDEX_REBUILD ' [2] Less time for minimal syntax check. [3] More time is needed when RDF values used in N-Triple file are checked for correctness. [4] Application table has table compression enabled. [5] Staging table has table compression enabled. 56

Query Performance Ontology LUBM50 6.8 million & 5.4 million inferred LUBM Benchmark Queries Query Q1 Q2 Q3 Q4 Q5 Q6 Q7 # answers 4 130 6 34 719 519842 67 Complete? Y Y Y Y Y Y Y OWLPrime & new inference components Time (sec) 0.05 0.75 0.20 0.5 0.22 1.86 1.71 Query Q8 Q9 Q10 Q11 Q12 Q13 Q14 # answers 7790 13639 4 224 15 228 393730 Complete? Y Y Y Y Y Y Y Time (sec) 1.07 1.65 0.01 0.02 0.03 0.01 1.47 Setup: Intel Q6600 quad-core, 3 7200RPM SATA disks, 8GB DDR2 PC6400 RAM, No RAID. 64-bit Linux 2.6.18. Average of 3 warm runs 57

Query Performance - Running in Parallel LUBM1000 Query Performance Time (seconds) 100 75 50 25 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 LUBM Benchmark Query DOP=1 DOP=4 Setup: Server class machine with 16 cores, NAND based flash storage, 32GB RAM, Linux 64 bit, Average of 3 warm runs 58

11.1.0.7 Inference Performance hrs 3GHz single CPU Dual-core 2.33GHz CPU OWLPrime (11.1.0.7) inference performance scales really well with hardware. It is not a parallel inference engine though. 59

11.2 Inference Performance Parallel Inference (LUBM8000 1.06 billion triples + 860M inferred) Parallel Inference (LUBM25000 3.3 billion triples + 2.7 billion inferred) Incremental Inference (LUBM8000 1.06 billion triples + 860M inferred) Large scale owl:sameas Inference (UniProt 1 Million sample) Time to finish inference: 12 hrs. 3.3x faster compared to serial inference in release 11.1 Time to finish inference: 40 hrs. 30% faster than nearest competitor 1/5 cost of other hardware configurations Time to update inference: less than 30 seconds after adding 100 triples. At least 15x to 50x faster than a complete inference done with release 11.1 60% less disk space required 10x faster inference compared to release 11.1 Setup: Intel Q6600 quad-core, 3 7200RPM SATA disks, 8GB DDR2 PC6400 RAM, No RAID. 64-bit Linux 2.6.18. Assembly cost: less than USD 1,000 60

Summary Requirement to search and and derive greater business knowledge from enterprise databases and applications Oracle database 11g is the leading commercial database with native RDF/OWL data management Scalable & secure platform for wide-range of semantic applications Readily scales to ultra-large repositories (+10 billion) Choice of SQL/PLSQL APIs or Java APIs Leverages Oracle Partitioning and Compression. RAC supported Growing ecosystem of 3rd party tools partners 61

For More Information search.oracle.com Semantic Technologies or oracle.com