Turn Your Data Into Decisive Knowledge

Build powerful, secure, and scalable Knowledge Graphs with the Virtuoso Data Spaces platform.

How It Works: An Overview

This page comprises embedded demonstrations of how the Virtuoso Data Spaces platform empowers your organization through its ability to create semantically rich Knowledge Graphs that breakdown data silos -- without compromising performance, scalability, or security.

Knowledge Graph from Various Document Types

From a Web Page

Instantly generate a knowledge graph from any webpage. Our tools extract structured data and entities automatically, no manual coding required.

Knowledge Graph from a website

From Email

Extract key information from email content and attachments, seamlessly adding it to your knowledge graph to uncover hidden connections.

From a Legal Document

Analyze complex legal documents by converting them into a structured knowledge graph, making contracts and filings easily searchable.

From Call Transcripts

Turn call transcripts into actionable intelligence by extracting entities and relationships, and adding them to your graph.

From a DoD Report

Convert dense government and defense reports into structured RDF, making them queryable and interoperable with other data.

Unleash the Power of AI with OPAL

The OpenLink AI Layer (OPAL) is a powerful middleware add-on for Virtuoso. It enables you to create and deploy AI Agents and Assistants that use natural language to interact with your data. These agents connect seamlessly with various LLMs, web services, and your data sources—whether they are databases, existing knowledge graphs, or documents on a file system.

OPAL Architecture

OPAL Architecture Diagram

Querying PostgreSQL with Claude

Querying PostgreSQL with AI

Agent-to-Agent Example

Virtual Knowledge Graph from CSV

Don't move your data. Virtualize it. Virtuoso can create a knowledge graph directly from your CSV files, allowing you to query them in place using SQL or SPARQL without a complex ETL process.

1. Custom Stored Procedure

Use this custom procedure to quickly map an entire directory of CSV files to a single virtual SQL table.

-- Install Custom Stored Procedure
-- for quickly mapping multiple
-- CSV documents to a virtual SQL Table.

CREATE PROCEDURE file_dirlist_full (IN a ANY) {
  DECLARE _inx integer;
  DECLARE F VARCHAR;
  DECLARE L INT;
  F := file_dirlist(a,1);
  L := length(F);
  _inx := 0;
  
  While(_inx < L) {
    DECLARE v any;
    F[_inx] := concat(a,'/',F[_inx]);
    _inx := _inx + 1;
  }
  return F;
};

CREATE PROCEDURE attach_from_csv_dir (
  IN tb VARCHAR, IN dir ANY, in delimiter VARCHAR, 
  in newline VARCHAR, in esc VARCHAR, 
  in skip_rows int, in pkey_columns any := null
) {
  declare f VARCHAR;
  f:= attach_from_csv(tb,file_dirlist_full(dir),
      delimiter,newline,esc,skip_rows,pkey_columns);
  return F;
};

2. Create Virtual & Physical Tables

Execute this script to attach your CSVs as virtual tables, and then optionally materialize them for high-performance queries.

-- Attach CSVs as Virtual Tables
ATTACH_FROM_CSV_DIR('demo.fint.account', 'fint/synthetic_data/accounts', ',', '\n', null, 1, VECTOR(1));
ATTACH_FROM_CSV_DIR('demo.fint.customer', 'fint/synthetic_data/customers', ',', '\n', null, 1, VECTOR(1));
ATTACH_FROM_CSV_DIR('demo.fint.transaction', 'fint/synthetic_data/transactions', ',', '\n', null, 1, VECTOR(1));
ATTACH_FROM_CSV_DIR('demo.fint.fraud_label', 'fint/synthetic_data/fraud_labels', ',', '\n', null, 1, VECTOR(1));

GRANT SELECT ON demo.fint.account to SPARQL_SELECT;
GRANT SELECT ON demo.fint.customer to SPARQL_SELECT;
GRANT SELECT ON demo.fint.transaction to SPARQL_SELECT;
GRANT SELECT ON demo.fint.fraud_label to SPARQL_SELECT;

-- Optionally, create physical tables for speed
CREATE TABLE demo.fint.account_physical
  AS SELECT * FROM demo.fint.account WITH DATA;
CREATE TABLE demo.fint.customer_physical
  AS SELECT * FROM demo.fint.customer WITH DATA;
...

Query Across All Your Data

Virtuoso's data federation capabilities let you run a single query across multiple, disparate data sources—whether they're other SQL databases or remote SPARQL endpoints. Unite your data silos without migrating anything.

Federate SQL Databases

Here, we attach tables from SQL Server and MySQL, then query them as if they were a single, local database.

Federated SQL Example

Federate Public Knowledge Graphs

This SPARQL-FED query seamlessly pulls data about Robert Downey Jr. from both DBpedia and Wikidata in real-time.

View Live Query

Secure Your Data with Fine-Grained Control

Virtuoso supports Attribute-Based Access Control (ABAC) to enforce sophisticated, policy-based security. In this example, access to a specific graph is restricted. Unauthenticated users receive no results, ensuring sensitive data remains private.

See ABAC in Action

ABAC Demo

The ACL Implementation Script

-- Make Named Graph Private
DB.DBA.RDF_GRAPH_GROUP_INS (
  'http://www.openlinksw.com/schemas/virtrdf#PrivateGraphs', 
  'urn:fint:private'
);

-- Add an ACL Rule to Grant Access
SPARQL
PREFIX  oplacl: <http://www.openlinksw.com/ontology/acl#> 
PREFIX     acl: <http://www.w3.org/ns/auth/acl#> 
INSERT INTO GRAPH <http://demo.openlinksw.com/acl/graph/rules/...> {
  <urn:fint:private:rule>  a             acl:Authorization ;
                         oplacl:hasAccessMode  oplacl:Read ;
                         acl:accessTo    <urn:fint:private> ;
                         acl:agent       <.../person/demo#this> ;
                         oplacl:hasScope oplacl:PrivateGraphs .
};

Go Beyond Data Retrieval with Reasoning

Virtuoso's reasoning and inference engine discovers new relationships in your data, enabling smarter queries and deeper insights. It can infer facts that aren't explicitly stated, turning your knowledge graph into a true reasoning system.

Built-In Reasoning and Inference

Leverage predefined reasoning and inference rules pegged to specific relationship types (e.g., subsumption, transitivity, symmetry, inversion, inverse-functionality, and equivalence). This allows Virtuoso to automatically understand hierarchical and logical relationships in your data.

Custom Reasoning and Inference

Define powerful, custom relationships that are derived dynamically using SPARQL CONSTRUCT as the rule language. This gives you the flexibility to implement complex business logic and domain-specific inference directly within the database.