@prefix schema: <http://schema.org/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix sd: <http://www.w3.org/ns/sparql-service-description#> .
@prefix void: <http://rdfs.org/ns/void#> .

# Generated by scripts/build_ttl.py from references/catalog.json and references/talking-points.md. Do not edit by
# hand: change the app (then node scripts/build_catalog.mjs) or the talking points, and regenerate.

<> a schema:CreativeWork ;
    schema:about <#app> ;
    schema:name "Virtuoso Data Spaces: value proposition, showcases and instance profiles"@en ;
    schema:description "RDF description of the Virtuoso Data Spaces app: the capabilities it demonstrates, the claims and the live example behind each, the datasets and their state, every showcase query with its deep link, the OPAL agents, and the instance profiles that make the app portable across Virtuoso hosts."@en ;
    schema:encodingFormat "text/turtle"@en ;
    schema:dateCreated "2026-10-20T12:55:12Z"^^xsd:dateTime ;
    schema:dateModified "2026-10-20T12:55:12Z"^^xsd:dateTime ;
    schema:author <https://www.linkedin.com/in/kidehen#this> ;
    prov:wasGeneratedBy <https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/virtuoso-ai-value-prop#this> .

<https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/virtuoso-ai-value-prop#this> a schema:SoftwareSourceCode ;
    schema:name "virtuoso-ai-value-prop"@en ;
    schema:codeRepository <https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/virtuoso-ai-value-prop> ;
    schema:description "Agent skill that makes the case for Virtuoso in conversation, with live proof, and opens the Virtuoso Data Spaces app at the exact view."@en .

<#openlink> a schema:Organization ;
    schema:name "OpenLink Software"@en ;
    schema:url <https://www.openlinksw.com/> .

<#app> a schema:WebApplication ;
    schema:name "Virtuoso Data Spaces"@en ;
    schema:url <virtuoso-ai-value-prop.html> ;
    schema:description "Single-page app of live Virtuoso showcases: RDF Views over any ODBC- or JDBC-accessible DBMS queried by SQL over XMLA, SPASQL and SPARQL; Sponger graphs; faceted browsing; and OPAL agents."@en ;
    schema:applicationCategory "Data and AI showcase"@en ;
    schema:operatingSystem "Any modern web browser"@en ;
    schema:featureList "RDF Views"@en ,
        "Row hyperlinks as cross-platform super-keys"@en ,
        "SQL over XMLA"@en ,
        "SPASQL"@en ,
        "SPARQL over RDF Views"@en ,
        "Sponger"@en ,
        "Faceted browsing"@en ,
        "OPAL agents loosely coupled with Data Spaces"@en ,
        "Access control with the data"@en ,
        "Conversation deep links"@en ,
        "Ontology generation from SQL schemas"@en ,
        "Instance profiles"@en ;
    schema:about <#capabilities> ,
        <#claim-1> ,
        <#claim-2> ,
        <#claim-3> ,
        <#claim-4> ,
        <#claim-5> ,
        <#claim-6> ,
        <#claim-7> ,
        <#claim-8> ,
        <#claim-9> ,
        <#claim-10> ,
        <#claim-11> ;
    schema:hasPart <#section-overview> ,
        <#section-four-ways> ,
        <#section-how-it-works> ,
        <#section-ontologies> ,
        <#section-why-virtuoso> ,
        <#section-access-control> ,
        <#section-questions> ,
        <#section-get-started> ,
        <#section-rdf-views-playground> ,
        <#section-datasets> ,
        <#section-sponger-overview> ,
        <#section-sponger-examples> ,
        <#section-sponge-any-url> ,
        <#section-faceted-overview> ,
        <#section-explore-query> ,
        <#section-starting-points> ,
        <#section-opal-overview> ,
        <#section-how-opal-answers> ,
        <#section-agent-catalog> ,
        <#section-questions-to-try> ,
        <#section-widget-usage> ,
        <#section-protocols> ,
        <#section-ontology-overview> ,
        <#section-ontology-how> ,
        <#section-ontology-examples> ,
        <#section-ontology-make-your-own> ,
        <#section-sources-list> ;
    schema:mentions <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:publisher <#openlink> ;
    schema:isPartOf <https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/virtuoso-ai-value-prop#this> ;
    schema:isBasedOn <#source-1> ,
        <#source-2> ,
        <#source-3> ,
        <#source-4> ,
        <#source-5> ,
        <#source-6> ,
        <#source-7> ,
        <#source-8> ,
        <#source-9> ,
        <#source-10> ,
        <#source-11> ,
        <#source-12> ,
        <#source-13> ,
        <#source-14> ,
        <#source-15> .

<#capabilities> a schema:DefinedTermSet ;
    schema:name "Capabilities the app demonstrates"@en ;
    schema:hasDefinedTerm <#cap-rdf-views> ,
        <#cap-super-key> ,
        <#cap-sql-xmla> ,
        <#cap-spasql> ,
        <#cap-sparql> ,
        <#cap-sponger> ,
        <#cap-faceted-browse> ,
        <#cap-opal-agents> ,
        <#cap-access-control> ,
        <#cap-deep-links> ,
        <#cap-ontology-generation> ,
        <#cap-instance-profiles> .

<#cap-rdf-views> a schema:DefinedTerm ;
    schema:name "RDF Views"@en ;
    schema:description "Quad maps that present the tables of any ODBC- or JDBC-accessible DBMS as RDF without copying them; SPARQL is translated to SQL against the source tables at query time."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#cap-super-key> a schema:DefinedTerm ;
    schema:name "Row hyperlinks as cross-platform super-keys"@en ;
    schema:description "Every row gets its own hyperlink, which works as a cross-platform super-key: a key that keeps its meaning outside its own database and resolves to a description of the row."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#cap-sql-xmla> a schema:DefinedTerm ;
    schema:name "SQL over XMLA"@en ;
    schema:description "SQL sent to Virtuoso over the XML for Analysis SOAP protocol, from a browser, through the SPASQL Query Builder."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#cap-spasql> a schema:DefinedTerm ;
    schema:name "SPASQL"@en ;
    schema:description "SPARQL inside a SQL FROM clause, so the result of a SPARQL query behaves like a derived table in SQL."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#cap-sparql> a schema:DefinedTerm ;
    schema:name "SPARQL over RDF Views"@en ;
    schema:description "SPARQL queries over the same rows that SQL reads, following links instead of foreign-key columns."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#cap-sponger> a schema:DefinedTerm ;
    schema:name "Sponger"@en ;
    schema:description "Virtuoso Linked Data middleware: cartridges read a web resource and store RDF in a named graph whose IRI is the source URL."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#cap-faceted-browse> a schema:DefinedTerm ;
    schema:name "Faceted browsing"@en ;
    schema:description "The explore query lists every type in a named graph with a sample and a count; each type opens in a faceted browser."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#cap-opal-agents> a schema:DefinedTerm ;
    schema:name "OPAL agents loosely coupled with Data Spaces"@en ;
    schema:description "Agents hold instructions and a list of query functions, not a copy of the data; answers come from predefined SQL, SPARQL or SPASQL queries that can be inspected."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#cap-access-control> a schema:DefinedTerm ;
    schema:name "Access control with the data"@en ;
    schema:description "ABAC ACLs on the server decide who may run what: anonymous SPARQL, signed-in SQL and SPASQL, signed-in sponging and query-backed agent answers."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#cap-deep-links> a schema:DefinedTerm ;
    schema:name "Conversation deep links"@en ;
    schema:description "Every example, dataset, agent question and section has a link that opens the app on that exact view, so a conversation can hand over to the app."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#cap-ontology-generation> a schema:DefinedTerm ;
    schema:name "Ontology generation from SQL schemas"@en ;
    schema:description "Generating an RDF View also generates its ontology: a class per table, a typed datatype property per column, an object property per foreign key, each with its own IRI and a label naming the SQL source; the classes are then aligned with shared ontologies (rdfs:subClassOf, owl:equivalentClass) so one query in a shared vocabulary reaches every source."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#cap-instance-profiles> a schema:DefinedTerm ;
    schema:name "Instance profiles"@en ;
    schema:description "The hosts that serve each role (RDF Views data, linked data and Sponger, OPAL, widget, faceted browser, app) are configuration, with URIBurner as the default profile."@en ;
    schema:inDefinedTermSet <#capabilities> .

<#claim-1> a schema:Claim ;
    schema:name "Every row gets a hyperlink"@en ;
    schema:text "Each customer, order and product gets a hyperlink that opens a page describing it, and the link keeps its meaning outside its own database."@en ;
    schema:position "1"^^xsd:integer ;
    schema:about <#cap-super-key> ;
    schema:isBasedOn <#ex-nw-sparql-stock> ,
        <#ex-ss-sparql-customers> .

<#claim-2> a schema:Claim ;
    schema:name "Any ODBC or JDBC database"@en ;
    schema:text "Attach a DBMS over ODBC or JDBC and its tables appear inside Virtuoso, queryable in place."@en ;
    schema:position "2"^^xsd:integer ;
    schema:about <#cap-rdf-views> ;
    schema:isBasedOn <#ex-ss-sql-customers> ,
        <#ex-ss-sql-federated-join> .

<#claim-3> a schema:Claim ;
    schema:name "Nothing is copied"@en ;
    schema:text "SPARQL over an RDF View is translated to SQL and run against the source tables at that moment, so a change in the source shows in the next answer."@en ;
    schema:position "3"^^xsd:integer ;
    schema:about <#cap-rdf-views> ;
    schema:isBasedOn <#ex-ss-sparql-top-customers> ,
        <#ex-csv-sparql-quad-maps> .

<#claim-4> a schema:Claim ;
    schema:name "Three languages, one set of tables"@en ;
    schema:text "The same rows answer SQL over XMLA, SPASQL (SPARQL inside a SQL `FROM`) and SPARQL."@en ;
    schema:position "4"^^xsd:integer ;
    schema:about <#cap-spasql> ;
    schema:isBasedOn <#ex-nw-sql-customers> ,
        <#ex-nw-spasql-category-sales> ,
        <#ex-nw-sparql-category-sales> .

<#claim-5> a schema:Claim ;
    schema:name "Joins by reference across systems"@en ;
    schema:text "One SQL statement joins customers in SQL Server, orders in MySQL and employees in Virtuoso."@en ;
    schema:position "5"^^xsd:integer ;
    schema:about <#cap-sql-xmla> ;
    schema:isBasedOn <#ex-ss-sql-federated-join> .

<#claim-6> a schema:Claim ;
    schema:name "Web pages become graphs"@en ;
    schema:text "The Sponger reads a page or feed and stores a graph named by its URL, with entities linked to DBpedia."@en ;
    schema:position "6"^^xsd:integer ;
    schema:about <#cap-sponger> ;
    schema:isBasedOn <#ex-tm-headlines> ,
        <#ex-tm-entities> ,
        <#ex-gh-ai-agent-skills-types> .

<#claim-7> a schema:Claim ;
    schema:name "See before you query"@en ;
    schema:text "The explore query lists every type in a dataset with a sample and a count, and each type opens in a faceted browser."@en ;
    schema:position "7"^^xsd:integer ;
    schema:about <#cap-faceted-browse> ;
    schema:isBasedOn <#explore-northwind> ,
        <#explore-csv> .

<#claim-8> a schema:Claim ;
    schema:name "Agents answer from queries"@en ;
    schema:text "An OPAL agent answers by running a predefined SQL, SPARQL or SPASQL query you can inspect, so a number can be traced to its source."@en ;
    schema:position "8"^^xsd:integer ;
    schema:about <#cap-opal-agents> ;
    schema:isBasedOn <#agent-virtuoso-support> ,
        <#agent-data-twingler> .

<#claim-9> a schema:Claim ;
    schema:name "Loose coupling"@en ;
    schema:text "Agents hold instructions and a list of query functions, not a copy of the data, so the model, the agent or the Data Space can change independently."@en ;
    schema:position "9"^^xsd:integer ;
    schema:about <#cap-opal-agents> ;
    schema:isBasedOn <#section-how-opal-answers> .

<#claim-10> a schema:Claim ;
    schema:name "Access stays with the data"@en ;
    schema:text "ABAC ACLs on the server decide who may run what: anonymous SPARQL, signed-in SQL and SPASQL, signed-in sponging."@en ;
    schema:position "10"^^xsd:integer ;
    schema:about <#cap-access-control> ;
    schema:isBasedOn <#section-access-control> .

<#claim-11> a schema:Claim ;
    schema:name "Ontologies are generated, then shared"@en ;
    schema:text "Generating an RDF View also generates its ontology (a class per table, a typed property per column, a link per foreign key); aligned with FOAF, schema.org or DBpedia, it lets one question reach every source."@en ;
    schema:position "11"^^xsd:integer ;
    schema:about <#cap-ontology-generation> ;
    schema:isBasedOn <#ex-onto-nw-classes> ,
        <#ex-onto-shared-alignments> ,
        <#ex-onto-cross-source-people> .

<#dataset-northwind> a schema:Dataset, sd:NamedGraph ;
    schema:name "Virtuoso Northwind"@en ;
    schema:description "Virtuoso native tables (Demo.demo)"@en ;
    sd:name <http://demo.openlinksw.com/Northwind#> ;
    void:sparqlEndpoint <https://demo.openlinksw.com/sparql> ;
    void:vocabulary <http://demo.openlinksw.com/schemas/Northwind/> ;
    schema:isBasedOn <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:subjectOf <https://www.openlinksw.com/weblog/?post=northwind-dashboard-rdf-views-claude-3.html> ,
        <https://www.openlinksw.com/weblog/?post=claude-virtuoso-support-agent-skills-generated-northwind-knowledge-graph.html> ;
    prov:wasGeneratedBy <#cap-rdf-views> .

<#dataset-sqlserver> a schema:Dataset, sd:NamedGraph ;
    schema:name "SQL Server Northwind"@en ;
    schema:description "Microsoft SQL Server, attached as \"sqlserver\".\"northwind\".*"@en ;
    sd:name <http://demo.openlinksw.com/northwind-sqlserver#> ;
    void:sparqlEndpoint <https://demo.openlinksw.com/sparql> ;
    void:vocabulary <http://demo.openlinksw.com/schemas/northwind-sqlserver/> ;
    schema:isBasedOn <http://dbpedia.org/resource/Microsoft_SQL_Server> ;
    schema:subjectOf <https://www.openlinksw.com/weblog/?post=rdf-linked-data-views-sqlserver.html> ,
        <https://www.openlinksw.com/weblog/?post=virtuoso-turning-data-into-decisive-knowledge.html> ;
    prov:wasGeneratedBy <#cap-rdf-views> .

<#dataset-postgres> a schema:Dataset, sd:NamedGraph ;
    schema:name "PostgreSQL"@en ;
    schema:description "PostgreSQL, via JDBC through the OpenLink Multi-Tier driver (DSN postgres_jdbc_mt)"@en ;
    sd:name <http://demo.openlinksw.com/postgres_postgres_jdbc_mt_codex_20260403#> ;
    void:sparqlEndpoint <https://demo.openlinksw.com/sparql> ;
    void:vocabulary <http://demo.openlinksw.com/schemas/postgres_postgres_jdbc_mt_codex_20260403/> ;
    schema:isBasedOn <http://dbpedia.org/resource/PostgreSQL> ;
    schema:subjectOf <https://www.openlinksw.com/weblog/?post=postgres_postgres_jdbc_mt_codex_linked_data_infographic.html> ;
    prov:wasGeneratedBy <#cap-rdf-views> .

<#dataset-databricks> a schema:Dataset, sd:NamedGraph ;
    schema:name "Databricks Bakehouse"@en ;
    schema:description "Databricks (the bakehouse sample tables), attached over ODBC as databricks.bakehouse.*"@en ;
    sd:name <http://demo.openlinksw.com/databricks-bakehouse-r2rml#> ;
    void:sparqlEndpoint <https://demo.openlinksw.com/sparql> ;
    void:vocabulary <http://www.databricks.com/bakehouse#> ;
    schema:subjectOf <https://linkeddata.uriburner.com/weblog/?post=databricks-virtuoso-kg-deepseek_v4pro-1.html> ,
        <https://community.openlinksw.com/t/from-databricks-tables-to-a-virtual-knowledge-graph-with-virtuoso/6293> ;
    prov:wasGeneratedBy <#cap-rdf-views> .

<#dataset-snowflake> a schema:Dataset, sd:NamedGraph ;
    schema:name "Snowflake-style estate (ScaleKG)"@en ;
    schema:description "Eleven native Virtuoso SQL tables (ScaleKG.kidehen.*) holding 76 synthetic rows that model a graph-database estate fed by warehouse sources (Snowflake, Databricks and BigQuery): the SQL system of record that Neo4j Virtual Graph reads from Snowflake"@en ;
    sd:name <http://demo.openlinksw.com/ScaleKG#> ;
    void:sparqlEndpoint <https://demo.openlinksw.com/sparql> ;
    void:vocabulary <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    schema:subjectOf <https://linkeddata.uriburner.com/weblog/?post=neo4j-scale-ai-production-vs-virtuoso-agent-rdf-memory-meshup-claude_sonnet_5_5-1.html> ;
    prov:wasGeneratedBy <#cap-rdf-views> .

<#dataset-csv> a schema:Dataset, sd:NamedGraph ;
    schema:name "CSV Northwind (bonus)"@en ;
    schema:description "CSV files attached as tables"@en ;
    sd:name <urn:demo.csv:northwind:data> ;
    void:sparqlEndpoint <https://demo.openlinksw.com/sparql> ;
    void:vocabulary <http://demo.openlinksw.com/schemas/csv_northwind/> ;
    schema:isBasedOn <http://dbpedia.org/resource/Comma-separated_values> ;
    schema:subjectOf <https://www.openlinksw.com/weblog/?post=conceptual-data-virtualization-sql-rdf-deepseek_v4flash-1.html> ;
    prov:wasGeneratedBy <#cap-rdf-views> .

<#dataset-ontology> a schema:Dataset ;
    schema:name "Generated ontologies"@en ;
    schema:description "Ontologies generated from SQL schemas: the SQL schemas of native Virtuoso SQL tables, Microsoft SQL Server and CSV files"@en ;
    schema:hasPart <http://demo.openlinksw.com/schemas/Northwind/> ,
        <http://demo.openlinksw.com/schemas/northwind-sqlserver/> ,
        <http://demo.openlinksw.com/schemas/csv_northwind/> ;
    void:sparqlEndpoint <https://demo.openlinksw.com/sparql> ;
    prov:wasGeneratedBy <#cap-ontology-generation> .

<http://demo.openlinksw.com/schemas/Northwind/> a schema:DefinedTermSet ;
    schema:name "Ontology generated for Northwind"@en ;
    schema:isPartOf <#dataset-ontology> .

<http://demo.openlinksw.com/schemas/northwind-sqlserver/> a schema:DefinedTermSet ;
    schema:name "Ontology generated for northwind-sqlserver"@en ;
    schema:isPartOf <#dataset-ontology> .

<http://demo.openlinksw.com/schemas/csv_northwind/> a schema:DefinedTermSet ;
    schema:name "Ontology generated for csv_northwind"@en ;
    schema:isPartOf <#dataset-ontology> .

<#dataset-github> a schema:Dataset, sd:NamedGraph ;
    schema:name "Sponger graph of https://github.com/OpenLinkSoftware/ai-agent-skills"@en ;
    sd:name <https://github.com/OpenLinkSoftware/ai-agent-skills> ;
    schema:isBasedOn <https://github.com/OpenLinkSoftware/ai-agent-skills> ;
    void:sparqlEndpoint <https://linkeddata.uriburner.com/sparql> ;
    prov:wasGeneratedBy <#cap-sponger> .

<#dataset-techmeme> a schema:Dataset, sd:NamedGraph ;
    schema:name "Sponger graph of https://www.techmeme.com/feed.xml"@en ;
    sd:name <https://www.techmeme.com/feed.xml> ;
    schema:isBasedOn <https://www.techmeme.com/feed.xml> ;
    void:sparqlEndpoint <https://linkeddata.uriburner.com/sparql> ;
    prov:wasGeneratedBy <#cap-sponger> .

<#ex-nw-sql-customers> a schema:SoftwareSourceCode ;
    schema:identifier "nw-sql-customers"@en ;
    schema:name "Customers, straight from the table"@en ;
    schema:description "Plain SQL against the Northwind customers table, sent to Virtuoso over XMLA by the Query Builder."@en ;
    schema:programmingLanguage "SQL"@en ;
    schema:text "SELECT TOP 5 CustomerID, CompanyName, ContactName, Country FROM Demo.demo.Customers"@en ;
    schema:about <#dataset-northwind> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=nw-sql-customers> ;
    schema:exampleOfWork <#cap-sql-xmla> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-nw-sql-by-country> a schema:SoftwareSourceCode ;
    schema:identifier "nw-sql-by-country"@en ;
    schema:name "Customers by country"@en ;
    schema:description "An aggregate in SQL. The SPARQL examples below reach the same tables through the RDF View."@en ;
    schema:programmingLanguage "SQL"@en ;
    schema:text "SELECT Country, COUNT(*) AS n FROM Demo.demo.Customers GROUP BY Country ORDER BY 2 DESC"@en ;
    schema:about <#dataset-northwind> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=nw-sql-by-country> ;
    schema:exampleOfWork <#cap-sql-xmla> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-nw-sql-alfki-lines> a schema:SoftwareSourceCode ;
    schema:identifier "nw-sql-alfki-lines"@en ;
    schema:name "One customer's order lines (three-table join)"@en ;
    schema:description "The join an RDF View turns into links: customer → order → order line."@en ;
    schema:programmingLanguage "SQL"@en ;
    schema:text "SELECT TOP 5 c.CompanyName, o.OrderID, od.ProductID, od.Quantity, od.UnitPrice FROM Demo.demo.Customers c JOIN Demo.demo.Orders o ON c.CustomerID = o.CustomerID JOIN Demo.demo.\"Order_Details\" od ON o.OrderID = od.OrderID WHERE c.CustomerID = 'ALFKI'"@en ;
    schema:about <#dataset-northwind> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=nw-sql-alfki-lines> ;
    schema:exampleOfWork <#cap-sql-xmla> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-nw-spasql-category-sales> a schema:SoftwareSourceCode ;
    schema:identifier "nw-spasql-category-sales"@en ;
    schema:name "Sales by category, SPARQL inside SQL"@en ;
    schema:description "SPASQL: the RDF View is queried in SPARQL and the result is used as a SQL derived table, so SQL tools see ordinary rows."@en ;
    schema:programmingLanguage "SPASQL"@en ;
    schema:text """SELECT categoryName, totalSales, units
FROM (
  SPARQL
  PREFIX nw: <http://demo.openlinksw.com/schemas/Northwind/>
  SELECT ?categoryName
         (ROUND(SUM(?q * ?p * (1 - ?d))) AS ?totalSales)
         (SUM(?q) AS ?units)
  FROM <http://demo.openlinksw.com/Northwind#>
  WHERE {
    ?od a nw:Order_Details ;
        nw:quantity ?q ; nw:unitprice ?p ; nw:discount ?d ;
        nw:has_products ?product .
    ?product nw:has_categories ?cat .
    ?cat nw:categoryname ?categoryName .
  }
  GROUP BY ?categoryName
  ORDER BY DESC(?totalSales)
) AS x"""@en ;
    schema:about <#dataset-northwind> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=nw-spasql-category-sales> ;
    schema:exampleOfWork <#cap-spasql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-nw-spasql-stock> a schema:SoftwareSourceCode ;
    schema:identifier "nw-spasql-stock"@en ;
    schema:name "Products in stock, through the RDF View"@en ;
    schema:description "The outer WHERE product IS NOT NULL drops an empty row an RDF View can return under LIMIT."@en ;
    schema:programmingLanguage "SPASQL"@en ;
    schema:text """SELECT product, name, unitsInStock, unitPrice
FROM (
  SPARQL
  PREFIX nw: <http://demo.openlinksw.com/schemas/Northwind/>
  SELECT ?product ?name ?unitsInStock ?unitPrice
  FROM <http://demo.openlinksw.com/Northwind#>
  WHERE {
    ?product a nw:Products ;
             nw:productname ?name ;
             nw:unitsinstock ?unitsInStock ;
             nw:unitprice ?unitPrice .
  }
  ORDER BY DESC(?unitsInStock)
  LIMIT 10
) AS x
WHERE product IS NOT NULL"""@en ;
    schema:about <#dataset-northwind> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=nw-spasql-stock> ;
    schema:exampleOfWork <#cap-spasql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-nw-spasql-salesperformance> a schema:SoftwareSourceCode ;
    schema:identifier "nw-spasql-salesperformance"@en ;
    schema:name "The dashboard post's SalesPerformance query"@en ;
    schema:description "The original SPASQL from the dashboard post (abridged here), opened from the post's own short link. That link predates the presets, so the Query Builder may also ask for the user and password: use demo / demo."@en ;
    schema:programmingLanguage "SPASQL"@en ;
    schema:text """SELECT orderDetail, product, productId, categoryId, orderId,
       categoryName, totalSales, numberOfOrders, totalUnits, avgPrice
FROM (
  SPARQL
  SELECT ?orderDetail ?product ?category ?categoryId ?productId ?orderId ?categoryName
         (ROUND(SUM(?quantity * ?unitPrice * (1 - ?discount))) AS ?totalSales)
         (COUNT(DISTINCT ?orderId) AS ?numberOfOrders)
         (SUM(?quantity) AS ?totalUnits)
         (ROUND(AVG(?unitPrice)) AS ?avgPrice)
  FROM <http://demo.openlinksw.com/Northwind#>
  WHERE { … Order_Details, Products and Categories … }
  GROUP BY ?categoryName ?orderDetail ?product ?category ?categoryId ?productId ?orderId
  ORDER BY DESC(?totalSales)
) AS SalesPerformance"""@en ;
    schema:about <#dataset-northwind> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=nw-spasql-salesperformance> ;
    schema:exampleOfWork <#cap-spasql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en ;
    schema:subjectOf <https://tinyurl.com/25k2y9pr> .

<#ex-nw-sparql-stock> a schema:SoftwareSourceCode ;
    schema:identifier "nw-sparql-stock"@en ;
    schema:name "Most-stocked products"@en ;
    schema:description "Each product row has a hyperlink of its own; click one to see its description."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX nw: <http://demo.openlinksw.com/schemas/Northwind/>
SELECT ?product ?name ?unitsInStock ?unitPrice
FROM <http://demo.openlinksw.com/Northwind#>
WHERE {
  ?product a nw:Products ;
           nw:productname ?name ;
           nw:unitsinstock ?unitsInStock ;
           nw:unitprice ?unitPrice .
}
ORDER BY DESC(?unitsInStock)
LIMIT 10"""@en ;
    schema:about <#dataset-northwind> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=nw-sparql-stock&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-nw-sparql-category-sales> a schema:SoftwareSourceCode ;
    schema:identifier "nw-sparql-category-sales"@en ;
    schema:name "Sales by category"@en ;
    schema:description "Joins order lines to products to categories by following links, not foreign-key columns."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX nw: <http://demo.openlinksw.com/schemas/Northwind/>
SELECT ?categoryName
       (ROUND(SUM(?q * ?p * (1 - ?d))) AS ?totalSales)
       (SUM(?q) AS ?units)
FROM <http://demo.openlinksw.com/Northwind#>
WHERE {
  ?od a nw:Order_Details ;
      nw:quantity ?q ; nw:unitprice ?p ; nw:discount ?d ;
      nw:has_products ?product .
  ?product nw:has_categories ?cat .
  ?cat nw:categoryname ?categoryName .
}
GROUP BY ?categoryName
ORDER BY DESC(?totalSales)"""@en ;
    schema:about <#dataset-northwind> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=nw-sparql-category-sales&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-nw-sparql-entity-types> a schema:SoftwareSourceCode ;
    schema:identifier "nw-sparql-entity-types"@en ;
    schema:name "Entity types in the Demo.demo RDF View"@en ;
    schema:description "From the Entity Type & Sample Entities post: 8 types, with a sample of each. This is the shape of the Data Twingler T2 exploration template."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?entityType (SAMPLE(?entity) AS ?sampleEntity) (COUNT(DISTINCT ?entity) AS ?entityCount)
WHERE { GRAPH <http://demo.openlinksw.com/demo#> { ?entity rdf:type ?entityType ; ?predicate ?obj . } }
GROUP BY ?entityType ORDER BY DESC(?entityCount)"""@en ;
    schema:about <#dataset-northwind> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=nw-sparql-entity-types&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-nw-sparql-describe-chai> a schema:SoftwareSourceCode ;
    schema:identifier "nw-sparql-describe-chai"@en ;
    schema:name "Describe one product"@en ;
    schema:description "A DESCRIBE over the RDF View returns every triple about Chai. Run it here for the triples, or open it in the endpoint to see Turtle."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """DESCRIBE <http://demo.openlinksw.com/Northwind/products/ProductID/1#this>
FROM <http://demo.openlinksw.com/Northwind#>"""@en ;
    schema:about <#dataset-northwind> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=nw-sparql-describe-chai&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-ss-sql-federated-join> a schema:SoftwareSourceCode ;
    schema:identifier "ss-sql-federated-join"@en ;
    schema:name "Federated join: SQL Server + MySQL + Virtuoso"@en ;
    schema:description "From the Decisive Knowledge post: customers in SQL Server, orders in MySQL and employees in Virtuoso, joined in one SQL statement. The button opens it with the demo account preset; the post's original link is beside it."@en ;
    schema:programmingLanguage "SQL"@en ;
    schema:text """SELECT 
    A.CustomerID, 
    A.CompanyName,
    B.OrderID, 
    C.EmployeeID, 
    C.LastName, 
    C.FirstName 
FROM 
    "sqlserver"."northwind"."customers" A 
NATURAL JOIN 
    "mysql5"."northwind"."orders" B 
NATURAL JOIN    
    "Demo"."demo"."employees" C"""@en ;
    schema:about <#dataset-sqlserver> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=ss-sql-federated-join> ;
    schema:exampleOfWork <#cap-sql-xmla> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-ss-sql-customers> a schema:SoftwareSourceCode ;
    schema:identifier "ss-sql-customers"@en ;
    schema:name "SQL Server customers, queried in place"@en ;
    schema:description "The attached SQL Server table, read through Virtuoso without moving the data."@en ;
    schema:programmingLanguage "SQL"@en ;
    schema:text "SELECT TOP 10 CustomerID, CompanyName, Country FROM \"sqlserver\".\"northwind\".\"customers\""@en ;
    schema:about <#dataset-sqlserver> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=ss-sql-customers> ;
    schema:exampleOfWork <#cap-sql-xmla> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-ss-spasql-top-customers> a schema:SoftwareSourceCode ;
    schema:identifier "ss-spasql-top-customers"@en ;
    schema:name "Top customers by sales, SPARQL inside SQL"@en ;
    schema:description "The SQL Server RDF View, aggregated in SPARQL and handed back to SQL as rows."@en ;
    schema:programmingLanguage "SPASQL"@en ;
    schema:text """SELECT company_name, total_quantity, total_sales
FROM (
  SPARQL
  PREFIX ns: <http://demo.openlinksw.com/schemas/northwind-sqlserver/>
  SELECT ?company_name
         (SUM(?quantity) AS ?total_quantity)
         (ROUND(SUM(?quantity * ?unit_price)) AS ?total_sales)
  FROM <http://demo.openlinksw.com/northwind-sqlserver#>
  WHERE {
    ?customer a ns:customers ; ns:companyname ?company_name .
    ?order a ns:orders ; ns:has_customers ?customer ; ns:orderid ?order_id .
    ?order_detail a ns:order_details ; ns:orderid ?order_id ;
                  ns:unitprice ?unit_price ; ns:quantity ?quantity .
  }
  GROUP BY ?company_name
  ORDER BY DESC(?total_sales)
  LIMIT 10
) AS x"""@en ;
    schema:about <#dataset-sqlserver> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=ss-spasql-top-customers> ;
    schema:exampleOfWork <#cap-spasql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-ss-sparql-customers> a schema:SoftwareSourceCode ;
    schema:identifier "ss-sparql-customers"@en ;
    schema:name "Customers as entities"@en ;
    schema:description "Each SQL Server customer row, named by a hyperlink such as …/customers/CustomerID/ALFKI#this, the same kind of super-key that rows in native Virtuoso SQL tables and PostgreSQL get."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX ns: <http://demo.openlinksw.com/schemas/northwind-sqlserver/>
SELECT ?customer ?customer_id ?company_name
FROM <http://demo.openlinksw.com/northwind-sqlserver#>
WHERE {
  ?customer a ns:customers ;
            ns:customerid ?customer_id ;
            ns:companyname ?company_name .
}
ORDER BY ?customer_id
LIMIT 10"""@en ;
    schema:about <#dataset-sqlserver> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=ss-sparql-customers&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-ss-sparql-top-customers> a schema:SoftwareSourceCode ;
    schema:identifier "ss-sparql-top-customers"@en ;
    schema:name "Top customers by sales"@en ;
    schema:description "The dashboard post's query, grouped by company."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX ns: <http://demo.openlinksw.com/schemas/northwind-sqlserver/>
SELECT ?company_name
       (SUM(?quantity) AS ?total_quantity)
       (ROUND(SUM(?quantity * ?unit_price)) AS ?total_sales)
FROM <http://demo.openlinksw.com/northwind-sqlserver#>
WHERE {
  ?customer a ns:customers ; ns:companyname ?company_name .
  ?order a ns:orders ; ns:has_customers ?customer ; ns:orderid ?order_id .
  ?order_detail a ns:order_details ; ns:orderid ?order_id ;
                ns:unitprice ?unit_price ; ns:quantity ?quantity .
}
GROUP BY ?company_name
ORDER BY DESC(?total_sales)
LIMIT 10"""@en ;
    schema:about <#dataset-sqlserver> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=ss-sparql-top-customers&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-pg-sql-clients> a schema:SoftwareSourceCode ;
    schema:identifier "pg-sql-clients"@en ;
    schema:name "PostgreSQL clients, queried in place"@en ;
    schema:description "The attached PostgreSQL table, read through Virtuoso over XMLA without moving the data."@en ;
    schema:programmingLanguage "SQL"@en ;
    schema:text "SELECT TOP 10 clientid, clientname, clientgender, clientcountryid FROM \"postgres\".\"postgres_jdbc_mt\".\"clients\""@en ;
    schema:about <#dataset-postgres> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=pg-sql-clients> ;
    schema:exampleOfWork <#cap-sql-xmla> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-pg-spasql-entity-types> a schema:SoftwareSourceCode ;
    schema:identifier "pg-spasql-entity-types"@en ;
    schema:name "Entity types, SPARQL inside SQL"@en ;
    schema:description "The PostgreSQL RDF View profiled by type and returned to SQL as rows."@en ;
    schema:programmingLanguage "SPASQL"@en ;
    schema:text """SELECT type, n
FROM (
  SPARQL
  SELECT ?type (COUNT(?s) AS ?n)
  FROM <http://demo.openlinksw.com/postgres_postgres_jdbc_mt_codex_20260403#>
  WHERE { ?s a ?type }
  GROUP BY ?type
  ORDER BY DESC(?n)
) AS x"""@en ;
    schema:about <#dataset-postgres> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=pg-spasql-entity-types> ;
    schema:exampleOfWork <#cap-spasql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-pg-sparql-entity-types> a schema:SoftwareSourceCode ;
    schema:identifier "pg-sparql-entity-types"@en ;
    schema:name "Entity types in the PostgreSQL view"@en ;
    schema:description "16 entity types according to the post: clients, sales, shipments, suppliers and more."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?type (COUNT(?s) AS ?n)
FROM <http://demo.openlinksw.com/postgres_postgres_jdbc_mt_codex_20260403#>
WHERE { ?s a ?type }
GROUP BY ?type
ORDER BY DESC(?n)"""@en ;
    schema:about <#dataset-postgres> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=pg-sparql-entity-types&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-pg-sparql-describe-client> a schema:SoftwareSourceCode ;
    schema:identifier "pg-sparql-describe-client"@en ;
    schema:name "Describe client CLI001"@en ;
    schema:description "The post's DESCRIBE, with the # in the IRI encoded so the query is not cut off."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """DESCRIBE <http://demo.openlinksw.com/postgres_postgres_jdbc_mt_codex_20260403/clients/clientid/CLI001#this>
FROM <http://demo.openlinksw.com/postgres_postgres_jdbc_mt_codex_20260403#>"""@en ;
    schema:about <#dataset-postgres> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=pg-sparql-describe-client&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-db-sql-franchises> a schema:SoftwareSourceCode ;
    schema:identifier "db-sql-franchises"@en ;
    schema:name "Databricks franchises, queried in place"@en ;
    schema:description "The attached Databricks table, read through Virtuoso over XMLA. The rows stay in the Databricks warehouse."@en ;
    schema:programmingLanguage "SQL"@en ;
    schema:text "SELECT TOP 10 franchiseID, name, city, country, size FROM databricks.bakehouse.sales_franchises"@en ;
    schema:about <#dataset-databricks> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=db-sql-franchises> ;
    schema:exampleOfWork <#cap-sql-xmla> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-db-sql-revenue-by-city> a schema:SoftwareSourceCode ;
    schema:identifier "db-sql-revenue-by-city"@en ;
    schema:name "Revenue by city, in SQL"@en ;
    schema:description "A join and an aggregate over two attached Databricks tables. The SPARQL card \"Revenue by city\" below returns the same numbers through the RDF View."@en ;
    schema:programmingLanguage "SQL"@en ;
    schema:text """SELECT TOP 10 f.city, COUNT(*) AS orders, SUM(t.totalPrice) AS revenue
FROM databricks.bakehouse.sales_transactions t
JOIN databricks.bakehouse.sales_franchises f ON t.franchiseID = f.franchiseID
GROUP BY f.city
ORDER BY 3 DESC"""@en ;
    schema:about <#dataset-databricks> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=db-sql-revenue-by-city> ;
    schema:exampleOfWork <#cap-sql-xmla> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-db-spasql-revenue-by-city> a schema:SoftwareSourceCode ;
    schema:identifier "db-spasql-revenue-by-city"@en ;
    schema:name "Revenue by city, SPARQL inside SQL"@en ;
    schema:description "The Databricks RDF View, aggregated in SPARQL and handed back to SQL as rows."@en ;
    schema:programmingLanguage "SPASQL"@en ;
    schema:text """SELECT city, orders, revenue
FROM (
  SPARQL
  PREFIX : <http://www.databricks.com/bakehouse#>
  SELECT ?city
         (COUNT(DISTINCT ?transaction) AS ?orders)
         (SUM(?totalPrice) AS ?revenue)
  FROM <http://demo.openlinksw.com/databricks-bakehouse-r2rml#>
  WHERE {
    ?transaction a :Transaction ;
                 :franchise ?franchise ;
                 :totalPrice ?totalPrice .
    ?franchise :city ?city .
  }
  GROUP BY ?city
  ORDER BY DESC(?revenue)
  LIMIT 10
) AS x"""@en ;
    schema:about <#dataset-databricks> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=db-spasql-revenue-by-city> ;
    schema:exampleOfWork <#cap-spasql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-db-sparql-entity-types> a schema:SoftwareSourceCode ;
    schema:identifier "db-sparql-entity-types"@en ;
    schema:name "Entity types in the Databricks view"@en ;
    schema:description "Five R2RML triples maps, five classes: transactions, customers, reviews, franchises and suppliers."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?type (COUNT(?s) AS ?n)
FROM <http://demo.openlinksw.com/databricks-bakehouse-r2rml#>
WHERE { ?s a ?type }
GROUP BY ?type
ORDER BY DESC(?n)"""@en ;
    schema:about <#dataset-databricks> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=db-sparql-entity-types&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-db-sparql-revenue-by-city> a schema:SoftwareSourceCode ;
    schema:identifier "db-sparql-revenue-by-city"@en ;
    schema:name "Revenue by city"@en ;
    schema:description "The post's query, scoped to the RDF View's graph on demo.openlinksw.com. Transactions reach their city by following the franchise link, not a foreign-key column."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX : <http://www.databricks.com/bakehouse#>
SELECT ?city
       (COUNT(DISTINCT ?transaction) AS ?orders)
       (SUM(?totalPrice) AS ?revenue)
FROM <http://demo.openlinksw.com/databricks-bakehouse-r2rml#>
WHERE {
  ?transaction a :Transaction ;
               :franchise ?franchise ;
               :totalPrice ?totalPrice .
  ?franchise :city ?city .
}
GROUP BY ?city
ORDER BY DESC(?revenue)
LIMIT 10"""@en ;
    schema:about <#dataset-databricks> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=db-sparql-revenue-by-city&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-db-sparql-top-customers> a schema:SoftwareSourceCode ;
    schema:identifier "db-sparql-top-customers"@en ;
    schema:name "Top customers by lifetime value"@en ;
    schema:description "Each Databricks customer row is named by a hyperlink such as …/bakehouse/customer-2000112#this, a super-key you can click."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX : <http://www.databricks.com/bakehouse#>
SELECT ?customer ?firstName ?lastName
       (COUNT(?transaction) AS ?purchases)
       (SUM(?totalPrice) AS ?lifetimeValue)
FROM <http://demo.openlinksw.com/databricks-bakehouse-r2rml#>
WHERE {
  ?transaction a :Transaction ;
               :customer ?customer ;
               :totalPrice ?totalPrice .
  ?customer :firstName ?firstName ;
            :lastName ?lastName .
}
GROUP BY ?customer ?firstName ?lastName
ORDER BY DESC(?lifetimeValue)
LIMIT 10"""@en ;
    schema:about <#dataset-databricks> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=db-sparql-top-customers&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-db-sparql-describe-franchise> a schema:SoftwareSourceCode ;
    schema:identifier "db-sparql-describe-franchise"@en ;
    schema:name "Describe one franchise"@en ;
    schema:description "The franchise the post uses as its example, with every transaction and review that links to it."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """DESCRIBE <http://demo.openlinksw.com/databricks/bakehouse/franchise-3000046#this>
FROM <http://demo.openlinksw.com/databricks-bakehouse-r2rml#>"""@en ;
    schema:about <#dataset-databricks> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=db-sparql-describe-franchise&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-sk-sql-snowflake-tables> a schema:SoftwareSourceCode ;
    schema:identifier "sk-sql-snowflake-tables"@en ;
    schema:name "Warehouse tables from the Snowflake source"@en ;
    schema:description "Plain SQL over two of the estate's tables: the warehouse tables whose source is Snowflake, largest first."@en ;
    schema:programmingLanguage "SQL"@en ;
    schema:text """SELECT ws.src_name, wt.table_name, wt.row_count
FROM ScaleKG.kidehen.warehouse_table wt
JOIN ScaleKG.kidehen.warehouse_source ws ON ws.src_id = wt.src_id
WHERE ws.src_name = 'Snowflake'
ORDER BY wt.row_count DESC"""@en ;
    schema:about <#dataset-snowflake> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=sk-sql-snowflake-tables> ;
    schema:exampleOfWork <#cap-sql-xmla> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-sk-spasql-db-limit> a schema:SoftwareSourceCode ;
    schema:identifier "sk-spasql-db-limit"@en ;
    schema:name "The article's databases-per-GB rule, as SQL over SPARQL"@en ;
    schema:description "From the post: SPARQL counts databases per cluster and passes each cluster's hyperlink through as a column; SQL then applies the article's rule of 5 databases per GB of RAM, capped at 100 in preview and 250 at general availability."@en ;
    schema:programmingLanguage "SPASQL"@en ;
    schema:text """SELECT c, cluster_name, ram_gb, dbs,
       ram_gb * 5 AS by_ram,
       CASE WHEN ram_gb * 5 > 100 THEN 100 ELSE ram_gb * 5 END - dbs AS headroom_preview,
       CASE WHEN ram_gb * 5 > 250 THEN 250 ELSE ram_gb * 5 END - dbs AS headroom_ga
FROM (SPARQL
  PREFIX skg: <http://demo.openlinksw.com/schemas/ScaleKG/>
  PREFIX schema: <http://schema.org/>
  SELECT ?c ?cluster_name ?ram_gb (COUNT(?db) AS ?dbs)
  FROM <http://demo.openlinksw.com/ScaleKG#>
  WHERE {
    ?c a skg:Cluster ; schema:name ?cluster_name ; skg:ramGb ?ram_gb .
    OPTIONAL { ?db skg:hostedOn ?c }
  }
  GROUP BY ?c ?cluster_name ?ram_gb
) AS x
ORDER BY dbs DESC"""@en ;
    schema:about <#dataset-snowflake> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=sk-spasql-db-limit> ;
    schema:exampleOfWork <#cap-spasql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-sk-spasql-billed-seconds> a schema:SoftwareSourceCode ;
    schema:identifier "sk-spasql-billed-seconds"@en ;
    schema:name "Graph walk joined to a native SQL table"@en ;
    schema:description "From the post: SPARQL walks tenant → owned database in the RDF View, and SQL joins those rows to the analytics_job table to sum billed seconds per tenant, keeping each tenant's hyperlink beside its name."@en ;
    schema:programmingLanguage "SPASQL"@en ;
    schema:text """SELECT t.tenant_iri, t.tenant, COUNT(*) AS jobs, SUM(j.billed_seconds) AS billed_seconds
FROM (SPARQL
  PREFIX skg: <http://demo.openlinksw.com/schemas/ScaleKG/>
  PREFIX schema: <http://schema.org/>
  SELECT ?tenant_iri ?tenant ?db_name
  FROM <http://demo.openlinksw.com/ScaleKG#>
  WHERE {
    ?tenant_iri a skg:Tenant ; schema:name ?tenant .
    ?db skg:ownedBy ?tenant_iri ; schema:name ?db_name .
  }
) AS t
JOIN ScaleKG.kidehen.graph_database d ON d.db_name = t.db_name
JOIN ScaleKG.kidehen.analytics_job j ON j.db_id = d.db_id
GROUP BY t.tenant_iri, t.tenant
ORDER BY billed_seconds DESC"""@en ;
    schema:about <#dataset-snowflake> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=sk-spasql-billed-seconds> ;
    schema:exampleOfWork <#cap-spasql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Runs in the SPASQL Query Builder on demo.openlinksw.com after sign-in: user name demo, password demo (or vdb / vdb); the instance is protected by ABAC ACLs."@en .

<#ex-sk-sparql-three-hops> a schema:SoftwareSourceCode ;
    schema:identifier "sk-sparql-three-hops"@en ;
    schema:name "Three hops from tenant to warehouse table"@en ;
    schema:description "Tenant → workload → warehouse table → source, followed as links. The Snowflake tables show up with the workloads that read them."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX skg: <http://demo.openlinksw.com/schemas/ScaleKG/>
PREFIX schema: <http://schema.org/>
SELECT ?tenantIri ?tenant ?workloadIri ?workload ?tableIri ?tableName ?source
FROM <http://demo.openlinksw.com/ScaleKG#>
WHERE {
  ?tenantIri a skg:Tenant ; schema:name ?tenant .
  ?workloadIri skg:forTenant ?tenantIri ; schema:name ?workload ; skg:readsFrom ?tableIri .
  ?tableIri schema:name ?tableName ; skg:inSource ?sourceIri .
  ?sourceIri schema:name ?source .
}
ORDER BY ?tenant ?workload ?tableName"""@en ;
    schema:about <#dataset-snowflake> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=sk-sparql-three-hops&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-sk-sparql-dbs-per-cluster> a schema:SoftwareSourceCode ;
    schema:identifier "sk-sparql-dbs-per-cluster"@en ;
    schema:name "Databases per cluster"@en ;
    schema:description "The graph side of the per-GB rule: each cluster, its RAM and how many databases it hosts."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX skg: <http://demo.openlinksw.com/schemas/ScaleKG/>
PREFIX schema: <http://schema.org/>
SELECT ?clusterIri ?cluster ?ramGb (COUNT(?db) AS ?databases)
FROM <http://demo.openlinksw.com/ScaleKG#>
WHERE {
  ?clusterIri a skg:Cluster ; schema:name ?cluster ; skg:ramGb ?ramGb .
  OPTIONAL { ?db skg:hostedOn ?clusterIri }
}
GROUP BY ?clusterIri ?cluster ?ramGb
ORDER BY DESC(?databases)"""@en ;
    schema:about <#dataset-snowflake> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=sk-sparql-dbs-per-cluster&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-sk-sparql-replication> a schema:SoftwareSourceCode ;
    schema:identifier "sk-sparql-replication"@en ;
    schema:name "Replication topology and the access-control gap"@en ;
    schema:description "Each replication link with its source and target regions, sync mode and whether access-control settings travel with the data."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX skg: <http://demo.openlinksw.com/schemas/ScaleKG/>
PREFIX schema: <http://schema.org/>
SELECT ?linkIri ?sourceDb ?fromRegion ?targetDb ?toRegion ?syncMode ?rbacReplicated
FROM <http://demo.openlinksw.com/ScaleKG#>
WHERE {
  ?linkIri a skg:ReplicationLink ;
           skg:replicatesFrom ?sourceIri ; skg:replicatesTo ?targetIri ;
           skg:syncMode ?syncMode ; skg:rbacReplicated ?rbacReplicated .
  ?sourceIri schema:name ?sourceDb ; skg:hostedOn/skg:inRegion/schema:name ?fromRegion .
  ?targetIri schema:name ?targetDb ; skg:hostedOn/skg:inRegion/schema:name ?toRegion .
}
ORDER BY ?sourceDb"""@en ;
    schema:about <#dataset-snowflake> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=sk-sparql-replication&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-sk-sparql-entailment> a schema:SoftwareSourceCode ;
    schema:identifier "sk-sparql-entailment"@en ;
    schema:name "Entailment: what is a data asset?"@en ;
    schema:description "With the ScaleKG inference rules on, graph databases and warehouse tables both answer as skg:DataAsset, a class no table declares."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """DEFINE input:inference "urn:scalekg:inference"
PREFIX skg: <http://demo.openlinksw.com/schemas/ScaleKG/>
PREFIX schema: <http://schema.org/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?kindIri ?kind (COUNT(DISTINCT ?assetIri) AS ?assets)
FROM <http://demo.openlinksw.com/ScaleKG#>
FROM <http://demo.openlinksw.com/schemas/ScaleKG/>
WHERE {
  ?assetIri a skg:DataAsset ; a ?kindIri .
  ?kindIri rdfs:label ?kind .
  FILTER(?kindIri IN (skg:DataAsset, skg:GraphDatabase, skg:WarehouseTable))
}
GROUP BY ?kindIri ?kind
ORDER BY DESC(?assets)"""@en ;
    schema:about <#dataset-snowflake> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=sk-sparql-entailment&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-sk-sparql-property-hierarchy> a schema:SoftwareSourceCode ;
    schema:identifier "sk-sparql-property-hierarchy"@en ;
    schema:name "The property hierarchy, read from the TBox"@en ;
    schema:description "Joins the ontology graph to find every property declared a sub-property of skg:dependsOn and follows it from each workload."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX skg: <http://demo.openlinksw.com/schemas/ScaleKG/>
PREFIX schema: <http://schema.org/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?workloadIri ?workload ?relation ?dependencyIri ?dependency
FROM <http://demo.openlinksw.com/ScaleKG#>
FROM <http://demo.openlinksw.com/schemas/ScaleKG/>
WHERE {
  ?workloadIri a skg:Workload ; schema:name ?workload ; ?relationIri ?dependencyIri .
  ?relationIri rdfs:subPropertyOf skg:dependsOn ; rdfs:label ?relation .
  ?dependencyIri schema:name ?dependency .
}"""@en ;
    schema:about <#dataset-snowflake> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=sk-sparql-property-hierarchy&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-csv-sparql-customers> a schema:SoftwareSourceCode ;
    schema:identifier "csv-sparql-customers"@en ;
    schema:name "Customers from CSV files"@en ;
    schema:description "The same RDF View technique over flat files."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX nw: <http://demo.openlinksw.com/schemas/csv_northwind/>
SELECT ?org ?id ?name ?city ?country
FROM <urn:demo.csv:northwind:data>
WHERE {
  ?org a nw:customers ;
       nw:customerid ?id ;
       nw:companyname ?name ;
       nw:city ?city ;
       nw:country ?country .
}
LIMIT 10"""@en ;
    schema:about <#dataset-csv> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=csv-sparql-customers&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-csv-sparql-quad-maps> a schema:SoftwareSourceCode ;
    schema:identifier "csv-sparql-quad-maps"@en ;
    schema:name "Which SQL table feeds which predicate"@en ;
    schema:description "RDF Views describe themselves: the quad maps are queryable, so you can see the SQL table behind each predicate."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX virtrdf: <http://www.openlinksw.com/schemas/virtrdf#>
SELECT DISTINCT ?s1 AS ?quadMap ?s3 AS ?rdfPredicate ?s2 AS ?sqlTable
WHERE {
  ?s1 a virtrdf:QuadMap .
  ?s1 virtrdf:qmTableName ?s2 .
  ?s1 virtrdf:qmPredicateRange-rvrFixedValue ?s3 .
  FILTER (! contains(str(?s2), "/csv"))
  FILTER (! contains(str(?s2), 'csv.'))
  FILTER (contains(str(?s2), "supplier"))
}
LIMIT 200"""@en ;
    schema:about <#dataset-csv> ;
    schema:url <virtuoso-ai-value-prop.html#/rdf-views?ex=csv-sparql-quad-maps&run=1> ;
    schema:exampleOfWork <#cap-sparql> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-onto-nw-classes> a schema:SoftwareSourceCode ;
    schema:identifier "onto-nw-classes"@en ;
    schema:name "Classes generated from the Northwind tables"@en ;
    schema:description "Every table became a class, labelled with the table it came from, with a property for each column."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?class ?sqlTable (COUNT(DISTINCT ?property) AS ?properties)
WHERE {
  ?class a ?kind ;
         rdfs:label ?sqlTable .
  FILTER(?kind IN (owl:Class, rdfs:Class))
  OPTIONAL { ?property rdfs:domain ?class }
  FILTER(STRSTARTS(STR(?class), "http://demo.openlinksw.com/schemas/Northwind/"))
}
GROUP BY ?class ?sqlTable
ORDER BY ?class"""@en ;
    schema:about <#dataset-ontology> ;
    schema:url <virtuoso-ai-value-prop.html#/ontologies?ex=onto-nw-classes&run=1> ;
    schema:exampleOfWork <#cap-ontology-generation> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-onto-nw-products-properties> a schema:SoftwareSourceCode ;
    schema:identifier "onto-nw-products-properties"@en ;
    schema:name "Columns become typed properties, foreign keys become links"@en ;
    schema:description "The generated Products class: datatype properties typed from the SQL columns, and object properties for its foreign keys to Categories and Suppliers."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?property ?column ?kind ?range
WHERE {
  ?property rdfs:domain <http://demo.openlinksw.com/schemas/Northwind/Products> ;
            a ?kind .
  FILTER(?kind IN (owl:DatatypeProperty, owl:ObjectProperty))
  OPTIONAL { ?property rdfs:label ?column }
  OPTIONAL { ?property rdfs:range ?range }
}
ORDER BY ?kind ?property"""@en ;
    schema:about <#dataset-ontology> ;
    schema:url <virtuoso-ai-value-prop.html#/ontologies?ex=onto-nw-products-properties&run=1> ;
    schema:exampleOfWork <#cap-ontology-generation> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-onto-ss-classes> a schema:SoftwareSourceCode ;
    schema:identifier "onto-ss-classes"@en ;
    schema:name "The same, generated from SQL Server"@en ;
    schema:description "The SQL Server Northwind tables, attached over ODBC, generated their own classes, labelled sqlserver.northwind.*."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT DISTINCT ?class ?sqlTable
WHERE {
  ?class a ?kind ;
         rdfs:label ?sqlTable .
  FILTER(?kind IN (owl:Class, rdfs:Class))
  FILTER(STRSTARTS(STR(?class), "http://demo.openlinksw.com/schemas/northwind-sqlserver/"))
  FILTER(CONTAINS(?sqlTable, "."))
}
ORDER BY ?class"""@en ;
    schema:about <#dataset-ontology> ;
    schema:url <virtuoso-ai-value-prop.html#/ontologies?ex=onto-ss-classes&run=1> ;
    schema:exampleOfWork <#cap-ontology-generation> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-onto-shared-alignments> a schema:SoftwareSourceCode ;
    schema:identifier "onto-shared-alignments"@en ;
    schema:name "Generated classes aligned with shared ontologies"@en ;
    schema:description "Across the ontologies on the server, locally minted classes are declared subclasses of shared ones from DBpedia, schema.org, FOAF and others."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT DISTINCT ?generatedClass ?sharedClass
WHERE {
  ?generatedClass rdfs:subClassOf ?sharedClass .
  FILTER(STRSTARTS(STR(?generatedClass), "http://demo.openlinksw.com/schemas/"))
  FILTER(!STRSTARTS(STR(?sharedClass), "http://demo.openlinksw.com/"))
}
ORDER BY ?sharedClass ?generatedClass
LIMIT 25"""@en ;
    schema:about <#dataset-ontology> ;
    schema:url <virtuoso-ai-value-prop.html#/ontologies?ex=onto-shared-alignments&run=1> ;
    schema:exampleOfWork <#cap-ontology-generation> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-onto-foaf-employees> a schema:SoftwareSourceCode ;
    schema:identifier "onto-foaf-employees"@en ;
    schema:name "Ask in a shared vocabulary"@en ;
    schema:description "A question in FOAF terms (foaf:Person) answered by the Northwind employees table, with names from the generated properties."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX nw: <http://demo.openlinksw.com/schemas/Northwind/>
SELECT ?person ?firstName ?lastName ?title
FROM <http://demo.openlinksw.com/Northwind#>
WHERE {
  ?person a foaf:Person ;
          nw:firstname ?firstName ;
          nw:lastname ?lastName ;
          nw:title ?title .
}
ORDER BY ?lastName"""@en ;
    schema:about <#dataset-ontology> ;
    schema:url <virtuoso-ai-value-prop.html#/ontologies?ex=onto-foaf-employees&run=1> ;
    schema:exampleOfWork <#cap-ontology-generation> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-onto-cross-source-people> a schema:SoftwareSourceCode ;
    schema:identifier "onto-cross-source-people"@en ;
    schema:name "One shared class, two different sources"@en ;
    schema:description "People from CSV files and from Virtuoso SQL tables in one answer: the query follows each generated class up to foaf:Person."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?source ?generatedClass (COUNT(DISTINCT ?person) AS ?people) (SAMPLE(?person) AS ?example)
WHERE {
  ?generatedClass rdfs:subClassOf foaf:Person .
  { GRAPH <urn:demo.csv:northwind:data> { ?person a ?generatedClass } BIND("CSV files" AS ?source) }
  UNION
  { GRAPH <http://demo.openlinksw.com/Northwind#> { ?person a ?generatedClass } BIND("Virtuoso SQL tables (Demo.demo)" AS ?source) }
}
GROUP BY ?source ?generatedClass
ORDER BY ?source"""@en ;
    schema:about <#dataset-ontology> ;
    schema:url <virtuoso-ai-value-prop.html#/ontologies?ex=onto-cross-source-people&run=1> ;
    schema:exampleOfWork <#cap-ontology-generation> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

<#ex-tm-headlines> a schema:SoftwareSourceCode ;
    schema:identifier "tm-headlines"@en ;
    schema:name "Latest Techmeme headlines"@en ;
    schema:description "The Sponger reads the RSS feed and turns each story into a schema:DataFeedItem with a title, publication time and links. This is the pattern the opml-rss-reader skill and the OPML and RSS News Reader agent query."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX schema: <http://schema.org/>
SELECT ?published ?title ?link
FROM <https://www.techmeme.com/feed.xml>
WHERE {
  ?item a schema:DataFeedItem ;
        schema:title ?title ;
        schema:datePublished ?published ;
        schema:seeAlso ?link .
}
ORDER BY DESC(?published)
LIMIT 15"""@en ;
    schema:about <#dataset-techmeme> ;
    schema:url <virtuoso-ai-value-prop.html#/sponger?ex=tm-headlines&run=1> ;
    schema:exampleOfWork <#cap-sponger> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Reads the graph the Sponger already holds anonymously; refreshing it (DEFINE get:soft \"replace\") needs a signed-in session on the linked-data host."@en .

<#ex-tm-entities> a schema:SoftwareSourceCode ;
    schema:identifier "tm-entities"@en ;
    schema:name "Entities in the news, linked to DBpedia"@en ;
    schema:description "Its entity extraction finds the companies, products and publications the headlines mention, links each to DBpedia with owl:sameAs, and scores how relevant it is. Click an entity to see its description."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX attr: <http://www.openlinksw.com/schema/attribution#>
PREFIX oplbase: <http://www.openlinksw.com/schemas/oplbase#>
SELECT ?label (SAMPLE(?dbpedia) AS ?entity) (MAX(?score) AS ?relevance)
FROM <https://www.techmeme.com/feed.xml>
WHERE {
  ?e a attr:NamedEntity ;
     rdfs:label ?label ;
     owl:sameAs ?dbpedia ;
     oplbase:hasRelevanceScore ?score .
  FILTER(STRSTARTS(STR(?dbpedia), "http://dbpedia.org/resource/"))
}
GROUP BY ?label
ORDER BY DESC(?relevance)
LIMIT 15"""@en ;
    schema:about <#dataset-techmeme> ;
    schema:url <virtuoso-ai-value-prop.html#/sponger?ex=tm-entities&run=1> ;
    schema:exampleOfWork <#cap-sponger> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Reads the graph the Sponger already holds anonymously; refreshing it (DEFINE get:soft \"replace\") needs a signed-in session on the linked-data host."@en .

<#ex-tm-companies-people> a schema:SoftwareSourceCode ;
    schema:identifier "tm-companies-people"@en ;
    schema:name "Companies and people, with background"@en ;
    schema:description "The extracted entities carry DBpedia types and abstracts, so the feed can be filtered by kind of thing. Here: companies and people."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX bibo: <http://purl.org/ontology/bibo/>
SELECT ?type ?label (SAMPLE(?dbpedia) AS ?entity) (SAMPLE(?abstract) AS ?about)
FROM <https://www.techmeme.com/feed.xml>
WHERE {
  VALUES ?type { dbo:Company dbo:Person }
  ?e a ?type ;
     rdfs:label ?label ;
     owl:sameAs ?dbpedia .
  OPTIONAL { ?e bibo:abstract ?abstract }
  FILTER(STRSTARTS(STR(?dbpedia), "http://dbpedia.org/resource/"))
}
GROUP BY ?type ?label
ORDER BY ?type ?label"""@en ;
    schema:about <#dataset-techmeme> ;
    schema:url <virtuoso-ai-value-prop.html#/sponger?ex=tm-companies-people&run=1> ;
    schema:exampleOfWork <#cap-sponger> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Reads the graph the Sponger already holds anonymously; refreshing it (DEFINE get:soft \"replace\") needs a signed-in session on the linked-data host."@en .

<#ex-tm-type-profile> a schema:SoftwareSourceCode ;
    schema:identifier "tm-type-profile"@en ;
    schema:name "The whole graph, profiled by type"@en ;
    schema:description "Data Twingler template T2: a sample entity and a count for every type in the graph. A good first query for anything the Sponger has read."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT (SAMPLE(?s) AS ?EntityID) (COUNT(*) AS ?count) (?o AS ?EntityTypeID)
WHERE { GRAPH <https://www.techmeme.com/feed.xml> { ?s a ?o } }
GROUP BY ?o
ORDER BY DESC(?count)
LIMIT 15"""@en ;
    schema:about <#dataset-techmeme> ;
    schema:url <virtuoso-ai-value-prop.html#/sponger?ex=tm-type-profile&run=1> ;
    schema:exampleOfWork <#cap-sponger> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Reads the graph the Sponger already holds anonymously; refreshing it (DEFINE get:soft \"replace\") needs a signed-in session on the linked-data host."@en .

<#ex-gh-ai-agent-skills-types> a schema:SoftwareSourceCode ;
    schema:identifier "gh-ai-agent-skills-types"@en ;
    schema:name "GitHub: the ai-agent-skills repository"@en ;
    schema:description "The Sponger reads a GitHub repository page into a graph named by the repository URL: page metadata, extracted entities and annotations, and provenance for the load. The query below reads what is already there; Re-sponge sends the full query, which starts with DEFINE get:soft \"replace\" so the repository page is fetched again first."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT DISTINCT (?o AS ?EntityType) (SAMPLE(?s) AS ?sampleEntity) (COUNT (*) AS ?EntityCount)
FROM <https://github.com/OpenLinkSoftware/ai-agent-skills>
WHERE {
        ?s a ?o.
}
GROUP BY ?o
ORDER BY DESC (?EntityCount)"""@en ;
    schema:about <#dataset-github> ;
    schema:url <virtuoso-ai-value-prop.html#/sponger?ex=gh-ai-agent-skills-types&run=1> ;
    schema:exampleOfWork <#cap-sponger> ;
    schema:targetProduct <http://dbpedia.org/resource/Virtuoso_Universal_Server> ;
    schema:conditionsOfAccess "Reads the graph the Sponger already holds anonymously; refreshing it (DEFINE get:soft \"replace\") needs a signed-in session on the linked-data host."@en .

<#explore-northwind> a schema:SoftwareSourceCode ;
    schema:identifier "explore-northwind"@en ;
    schema:name "Explore: Virtuoso Northwind (RDF View over Demo.demo)"@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?type (SAMPLE(?s) AS ?sampleEntity) (SAMPLE(?label) AS ?sampleLabel) (COUNT(?s) AS ?entityCount)
WHERE {
  GRAPH <http://demo.openlinksw.com/Northwind#> {
    ?s rdf:type ?type .
    OPTIONAL { ?s rdfs:label ?label }
  }
}
GROUP BY ?type
ORDER BY DESC(?entityCount)"""@en ;
    schema:about <#dataset-northwind> ;
    schema:url <virtuoso-ai-value-prop.html#/explore?ds=northwind> ;
    schema:exampleOfWork <#cap-faceted-browse> .

<#explore-sqlserver> a schema:SoftwareSourceCode ;
    schema:identifier "explore-sqlserver"@en ;
    schema:name "Explore: SQL Server Northwind (RDF View)"@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?type (SAMPLE(?s) AS ?sampleEntity) (SAMPLE(?label) AS ?sampleLabel) (COUNT(?s) AS ?entityCount)
WHERE {
  GRAPH <http://demo.openlinksw.com/northwind-sqlserver#> {
    ?s rdf:type ?type .
    OPTIONAL { ?s rdfs:label ?label }
  }
}
GROUP BY ?type
ORDER BY DESC(?entityCount)"""@en ;
    schema:about <#dataset-sqlserver> ;
    schema:url <virtuoso-ai-value-prop.html#/explore?ds=sqlserver> ;
    schema:exampleOfWork <#cap-faceted-browse> .

<#explore-postgres> a schema:SoftwareSourceCode ;
    schema:identifier "explore-postgres"@en ;
    schema:name "Explore: PostgreSQL (RDF View)"@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?type (SAMPLE(?s) AS ?sampleEntity) (SAMPLE(?label) AS ?sampleLabel) (COUNT(?s) AS ?entityCount)
WHERE {
  GRAPH <http://demo.openlinksw.com/postgres_postgres_jdbc_mt_codex_20260403#> {
    ?s rdf:type ?type .
    OPTIONAL { ?s rdfs:label ?label }
  }
}
GROUP BY ?type
ORDER BY DESC(?entityCount)"""@en ;
    schema:about <#dataset-postgres> ;
    schema:url <virtuoso-ai-value-prop.html#/explore?ds=postgres> ;
    schema:exampleOfWork <#cap-faceted-browse> .

<#explore-databricks> a schema:SoftwareSourceCode ;
    schema:identifier "explore-databricks"@en ;
    schema:name "Explore: Databricks Bakehouse (R2RML RDF View)"@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?type (SAMPLE(?s) AS ?sampleEntity) (SAMPLE(?label) AS ?sampleLabel) (COUNT(?s) AS ?entityCount)
WHERE {
  GRAPH <http://demo.openlinksw.com/databricks-bakehouse-r2rml#> {
    ?s rdf:type ?type .
    OPTIONAL { ?s rdfs:label ?label }
  }
}
GROUP BY ?type
ORDER BY DESC(?entityCount)"""@en ;
    schema:about <#dataset-databricks> ;
    schema:url <virtuoso-ai-value-prop.html#/explore?ds=databricks> ;
    schema:exampleOfWork <#cap-faceted-browse> .

<#explore-snowflake> a schema:SoftwareSourceCode ;
    schema:identifier "explore-snowflake"@en ;
    schema:name "Explore: Snowflake-style estate: ScaleKG (RDF View over synthetic tables)"@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?type (SAMPLE(?s) AS ?sampleEntity) (COUNT(?s) AS ?entityCount)
WHERE {
  GRAPH <http://demo.openlinksw.com/ScaleKG#> {
    ?s rdf:type ?type .
  }
}
GROUP BY ?type
ORDER BY DESC(?entityCount)"""@en ;
    schema:about <#dataset-snowflake> ;
    schema:url <virtuoso-ai-value-prop.html#/explore?ds=snowflake> ;
    schema:exampleOfWork <#cap-faceted-browse> .

<#explore-csv> a schema:SoftwareSourceCode ;
    schema:identifier "explore-csv"@en ;
    schema:name "Explore: CSV Northwind (RDF View over CSV files)"@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?type (SAMPLE(?s) AS ?sampleEntity) (SAMPLE(?label) AS ?sampleLabel) (COUNT(?s) AS ?entityCount)
WHERE {
  GRAPH <urn:demo.csv:northwind:data> {
    ?s rdf:type ?type .
    OPTIONAL { ?s rdfs:label ?label }
  }
}
GROUP BY ?type
ORDER BY DESC(?entityCount)"""@en ;
    schema:about <#dataset-csv> ;
    schema:url <virtuoso-ai-value-prop.html#/explore?ds=csv> ;
    schema:exampleOfWork <#cap-faceted-browse> .

<#explore-techmeme> a schema:SoftwareSourceCode ;
    schema:identifier "explore-techmeme"@en ;
    schema:name "Explore: Sponged: Techmeme RSS feed"@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?type (SAMPLE(?s) AS ?sampleEntity) (SAMPLE(?label) AS ?sampleLabel) (COUNT(?s) AS ?entityCount)
WHERE {
  GRAPH <https://www.techmeme.com/feed.xml> {
    ?s rdf:type ?type .
    OPTIONAL { ?s rdfs:label ?label }
  }
}
GROUP BY ?type
ORDER BY DESC(?entityCount)"""@en ;
    schema:about <#dataset-techmeme> ;
    schema:url <virtuoso-ai-value-prop.html#/explore?ds=techmeme> ;
    schema:exampleOfWork <#cap-faceted-browse> .

<#explore-github> a schema:SoftwareSourceCode ;
    schema:identifier "explore-github"@en ;
    schema:name "Explore: Sponged: GitHub ai-agent-skills repository"@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text """SELECT ?type (SAMPLE(?s) AS ?sampleEntity) (SAMPLE(?label) AS ?sampleLabel) (COUNT(?s) AS ?entityCount)
WHERE {
  GRAPH <https://github.com/OpenLinkSoftware/ai-agent-skills> {
    ?s rdf:type ?type .
    OPTIONAL { ?s rdfs:label ?label }
  }
}
GROUP BY ?type
ORDER BY DESC(?entityCount)"""@en ;
    schema:about <#dataset-github> ;
    schema:url <virtuoso-ai-value-prop.html#/explore?ds=github> ;
    schema:exampleOfWork <#cap-faceted-browse> .

<#agent-virtuoso-support> a schema:SoftwareApplication ;
    schema:name "Virtuoso Support Agent"@en ;
    schema:identifier "virtuoso-support-assistant-config"@en ;
    schema:applicationCategory "OPAL agent"@en ;
    schema:url <virtuoso-ai-value-prop.html#/agents?agent=virtuoso-support> ;
    schema:isPartOf <#cap-opal-agents> .

<#agent-uda-support> a schema:SoftwareApplication ;
    schema:name "ODBC & JDBC Support Agent"@en ;
    schema:identifier "uda-support-assistant-config"@en ;
    schema:applicationCategory "OPAL agent"@en ;
    schema:url <virtuoso-ai-value-prop.html#/agents?agent=uda-support> ;
    schema:isPartOf <#cap-opal-agents> .

<#prompt-1> a schema:Question ;
    schema:text "What is a Virtuoso RDF View, and how does it differ from loading data into the quad store?"@en ;
    schema:about <#agent-virtuoso-support> ;
    schema:url <virtuoso-ai-value-prop.html#/agents?agent=virtuoso-support&ask=What%20is%20a%20Virtuoso%20RDF%20View%2C%20and%20how%20does%20it%20differ%20from%20loading%20data%20into%20the%20quad%20store%3F> .

<#prompt-2> a schema:Question ;
    schema:text "How do I create an RDF View over a SQL Server table that is attached to Virtuoso?"@en ;
    schema:about <#agent-virtuoso-support> ;
    schema:url <virtuoso-ai-value-prop.html#/agents?agent=virtuoso-support&ask=How%20do%20I%20create%20an%20RDF%20View%20over%20a%20SQL%20Server%20table%20that%20is%20attached%20to%20Virtuoso%3F> .

<#prompt-3> a schema:Question ;
    schema:text "Define the term SPASQL"@en ;
    schema:about <#agent-virtuoso-support> ;
    schema:url <virtuoso-ai-value-prop.html#/agents?agent=virtuoso-support&ask=Define%20the%20term%20SPASQL> .

<#prompt-4> a schema:Question ;
    schema:text "Which OpenLink drivers connect an application to PostgreSQL over ODBC or JDBC?"@en ;
    schema:about <#agent-uda-support> ;
    schema:url <virtuoso-ai-value-prop.html#/agents?agent=uda-support&ask=Which%20OpenLink%20drivers%20connect%20an%20application%20to%20PostgreSQL%20over%20ODBC%20or%20JDBC%3F> .

<#prompt-5> a schema:Question ;
    schema:text "How do I attach a PostgreSQL table to Virtuoso through a JDBC data source?"@en ;
    schema:about <#agent-uda-support> ;
    schema:url <virtuoso-ai-value-prop.html#/agents?agent=uda-support&ask=How%20do%20I%20attach%20a%20PostgreSQL%20table%20to%20Virtuoso%20through%20a%20JDBC%20data%20source%3F> .

<#prompt-6> a schema:Question ;
    schema:text "How do I map Databricks tables attached to Virtuoso with R2RML?"@en ;
    schema:about <#agent-virtuoso-support> ;
    schema:url <virtuoso-ai-value-prop.html#/agents?agent=virtuoso-support&ask=How%20do%20I%20map%20Databricks%20tables%20attached%20to%20Virtuoso%20with%20R2RML%3F> .

<#faq-1> a schema:Question ;
    schema:name "Does Virtuoso generate an ontology from my database?"@en ;
    schema:acceptedAnswer <#faq-1-answer> ;
    schema:isPartOf <#section-questions> .

<#faq-1-answer> a schema:Answer ;
    schema:text "Yes. Generating an RDF View also generates its ontology: a class for every table, a typed datatype property for every column, and an object property for every foreign key, each with its own IRI and a label naming the SQL source. You can then align those classes with shared ontologies such as FOAF, schema.org or DBpedia, and query every source in the shared terms. The Ontologies page shows both on the live server."@en .

<#faq-2> a schema:Question ;
    schema:name "Which databases does this work with?"@en ;
    schema:acceptedAnswer <#faq-2-answer> ;
    schema:isPartOf <#section-questions> .

<#faq-2-answer> a schema:Answer ;
    schema:text "Any DBMS that Virtuoso can reach over ODBC or JDBC. Its tables are linked into Virtuoso and can then be exposed through an RDF View, so every row gets its own hyperlink. The showcases on this site use Microsoft SQL Server, PostgreSQL, Databricks and native Virtuoso SQL tables as examples, plus a synthetic Snowflake-style warehouse estate. The Databricks view is mapped with R2RML, the W3C mapping language, which Virtuoso turns into quad maps."@en .

<#faq-3> a schema:Question ;
    schema:name "What is an RDF View?"@en ;
    schema:acceptedAnswer <#faq-3-answer> ;
    schema:isPartOf <#section-questions> .

<#faq-3-answer> a schema:Answer ;
    schema:text "A mapping, written as quad maps, that presents the tables of any ODBC- or JDBC-accessible DBMS as RDF without copying them. Each row gets a hyperlink of its own that works as a cross-platform super-key, columns become properties and foreign keys become links. SPARQL queries are translated to SQL against the source tables at query time."@en .

<#faq-4> a schema:Question ;
    schema:name "What does SQL over XMLA mean here?"@en ;
    schema:acceptedAnswer <#faq-4-answer> ;
    schema:isPartOf <#section-questions> .

<#faq-4-answer> a schema:Answer ;
    schema:text "XMLA (XML for Analysis) is a SOAP protocol for sending SQL to a server over HTTP. The SPASQL Query Builder posts your SQL to Virtuoso's /XMLA endpoint with the data source DSN=Local_Instance, so a browser can run SQL without an ODBC driver. Each SQL card can show the request it sends."@en .

<#faq-5> a schema:Question ;
    schema:name "What is SPASQL?"@en ;
    schema:acceptedAnswer <#faq-5-answer> ;
    schema:isPartOf <#section-questions> .

<#faq-5-answer> a schema:Answer ;
    schema:text "SPARQL inside SQL. A SPARQL query is placed in a SQL FROM clause, written FROM (SPARQL …) AS alias, and its result behaves like a derived table. Any SQL client can then use graph data, and SQL can filter or join it further."@en .

<#faq-6> a schema:Question ;
    schema:name "Why do SQL and SPASQL ask me to sign in?"@en ;
    schema:acceptedAnswer <#faq-6-answer> ;
    schema:isPartOf <#section-questions> .

<#faq-6-answer> a schema:Answer ;
    schema:text "The demo instance is protected by ABAC ACLs. SPARQL is open to anonymous users, while SQL and SPASQL need a session. Sign in with user name demo and password demo, or vdb and vdb. The Query Builder links on this site already preset the demo account for the query itself."@en .

<#faq-7> a schema:Question ;
    schema:name "What is the Sponger?"@en ;
    schema:acceptedAnswer <#faq-7-answer> ;
    schema:isPartOf <#section-questions> .

<#faq-7-answer> a schema:Answer ;
    schema:text "Virtuoso's Linked Data middleware. Cartridges turn web resources such as HTML pages, feeds, repositories and social posts into RDF, stored in a graph named by the source URL. Adding DEFINE get:soft \"replace\" to a query fetches or refreshes that graph."@en .

<#faq-8> a schema:Question ;
    schema:name "Why do the Sponger cards run without the DEFINE pragma?"@en ;
    schema:acceptedAnswer <#faq-8-answer> ;
    schema:isPartOf <#section-questions> .

<#faq-8-answer> a schema:Answer ;
    schema:text "Fetching new content needs a signed-in session on URIBurner. The graphs the Sponger has already built can be read by anyone, so the cards query those, and the Re-sponge link adds the pragma for a fresh fetch."@en .

<#faq-9> a schema:Question ;
    schema:name "How are OPAL agents “loosely coupled” with Data Spaces?"@en ;
    schema:acceptedAnswer <#faq-9-answer> ;
    schema:isPartOf <#section-questions> .

<#faq-9-answer> a schema:Answer ;
    schema:text "An agent holds instructions and a list of query functions, not a copy of the data. At answer time the model picks a function and Virtuoso runs a predefined SQL, SPARQL or SPASQL query against whichever Data Space the function names. You can change the model, the agent or the data without rebuilding the others."@en .

<#faq-10> a schema:Question ;
    schema:name "Can I put the chat widget on my own site?"@en ;
    schema:acceptedAnswer <#faq-10-answer> ;
    schema:isPartOf <#section-questions> .

<#faq-10-answer> a schema:Answer ;
    schema:text "Yes. Load opal.js and auth.js, then create new Opal(...) with your host, callbacks and an agent module, as the Widget usage section shows. Register your own API key on URIBurner, or sign users in with Solid OIDC."@en .

<#faq-11> a schema:Question ;
    schema:name "What is the faceted browser?"@en ;
    schema:acceptedAnswer <#faq-11-answer> ;
    schema:isPartOf <#section-questions> .

<#faq-11-answer> a schema:Answer ;
    schema:text "A single-page app in the style of Virtuoso's FCT service. It narrows a set of entities by text, type, property and value, pivots along relationships, and keeps the whole view in its URL so any view can be shared."@en .

<#section-overview> a schema:WebPageElement ;
    schema:name "Your SQL tables, answering as a knowledge graph. Without moving a single row."@en ;
    schema:url <virtuoso-ai-value-prop.html#overview> ;
    schema:isPartOf <#app> .

<#section-four-ways> a schema:WebPageElement ;
    schema:name "One Data Space. Four ways in."@en ;
    schema:url <virtuoso-ai-value-prop.html#four-ways> ;
    schema:isPartOf <#app> .

<#section-how-it-works> a schema:WebPageElement ;
    schema:name "Three steps from any ODBC or JDBC database to a knowledge graph"@en ;
    schema:url <virtuoso-ai-value-prop.html#how-it-works> ;
    schema:isPartOf <#app> .

<#section-ontologies> a schema:WebPageElement ;
    schema:name "Your schema becomes an ontology. Shared ontologies make it travel."@en ;
    schema:url <virtuoso-ai-value-prop.html#ontologies> ;
    schema:isPartOf <#app> .

<#section-why-virtuoso> a schema:WebPageElement ;
    schema:name "Three facts worth knowing before you choose"@en ;
    schema:url <virtuoso-ai-value-prop.html#why-virtuoso> ;
    schema:isPartOf <#app> .

<#section-access-control> a schema:WebPageElement ;
    schema:name "Your data stays where it lives. So do the rules."@en ;
    schema:url <virtuoso-ai-value-prop.html#access-control> ;
    schema:isPartOf <#app> .

<#section-questions> a schema:WebPageElement ;
    schema:name "The questions people ask first"@en ;
    schema:url <virtuoso-ai-value-prop.html#questions> ;
    schema:isPartOf <#app> .

<#section-get-started> a schema:WebPageElement ;
    schema:name "Run your first query. Most answer in under a second."@en ;
    schema:url <virtuoso-ai-value-prop.html#get-started> ;
    schema:isPartOf <#app> .

<#section-rdf-views-playground> a schema:WebPageElement ;
    schema:name "The same tables, asked three ways"@en ;
    schema:url <virtuoso-ai-value-prop.html#rdf-views-playground> ;
    schema:isPartOf <#app> .

<#section-datasets> a schema:WebPageElement ;
    schema:name "Pick a database, then a language"@en ;
    schema:url <virtuoso-ai-value-prop.html#datasets> ;
    schema:isPartOf <#app> .

<#section-sponger-overview> a schema:WebPageElement ;
    schema:name "Point it at a web page. Get back a graph."@en ;
    schema:url <virtuoso-ai-value-prop.html#sponger-overview> ;
    schema:isPartOf <#app> .

<#section-sponger-examples> a schema:WebPageElement ;
    schema:name "Five live examples from two sources"@en ;
    schema:url <virtuoso-ai-value-prop.html#sponger-examples> ;
    schema:isPartOf <#app> .

<#section-sponge-any-url> a schema:WebPageElement ;
    schema:name "Try it on a page of your own"@en ;
    schema:url <virtuoso-ai-value-prop.html#sponge-any-url> ;
    schema:isPartOf <#app> .

<#section-faceted-overview> a schema:WebPageElement ;
    schema:name "See what is in a dataset before you write a query"@en ;
    schema:url <virtuoso-ai-value-prop.html#faceted-overview> ;
    schema:isPartOf <#app> .

<#section-explore-query> a schema:WebPageElement ;
    schema:name "Run the explore query on one dataset"@en ;
    schema:url <virtuoso-ai-value-prop.html#explore-query> ;
    schema:isPartOf <#app> .

<#section-starting-points> a schema:WebPageElement ;
    schema:name "Open this dataset in the faceted browser"@en ;
    schema:url <virtuoso-ai-value-prop.html#starting-points> ;
    schema:isPartOf <#app> .

<#section-opal-overview> a schema:WebPageElement ;
    schema:name "An assistant that answers from live queries"@en ;
    schema:url <virtuoso-ai-value-prop.html#opal-overview> ;
    schema:isPartOf <#app> .

<#section-how-opal-answers> a schema:WebPageElement ;
    schema:name "How a question becomes an answer"@en ;
    schema:url <virtuoso-ai-value-prop.html#how-opal-answers> ;
    schema:isPartOf <#app> .

<#section-agent-catalog> a schema:WebPageElement ;
    schema:name "Agents published on URIBurner"@en ;
    schema:url <virtuoso-ai-value-prop.html#agent-catalog> ;
    schema:isPartOf <#app> .

<#section-questions-to-try> a schema:WebPageElement ;
    schema:name "Ask about the data on this site"@en ;
    schema:url <virtuoso-ai-value-prop.html#questions-to-try> ;
    schema:isPartOf <#app> .

<#section-widget-usage> a schema:WebPageElement ;
    schema:name "The same widget as virtuoso.openlinksw.com"@en ;
    schema:url <virtuoso-ai-value-prop.html#widget-usage> ;
    schema:isPartOf <#app> .

<#section-protocols> a schema:WebPageElement ;
    schema:name "Other ways to reach the same agents"@en ;
    schema:url <virtuoso-ai-value-prop.html#protocols> ;
    schema:isPartOf <#app> .

<#section-ontology-overview> a schema:WebPageElement ;
    schema:name "Ontologies generated from your SQL schema, then reused with shared ones"@en ;
    schema:url <virtuoso-ai-value-prop.html#ontology-overview> ;
    schema:isPartOf <#app> .

<#section-ontology-how> a schema:WebPageElement ;
    schema:name "What gets generated"@en ;
    schema:url <virtuoso-ai-value-prop.html#ontology-how> ;
    schema:isPartOf <#app> .

<#section-ontology-examples> a schema:WebPageElement ;
    schema:name "See it on the live server"@en ;
    schema:url <virtuoso-ai-value-prop.html#ontology-examples> ;
    schema:isPartOf <#app> .

<#section-ontology-make-your-own> a schema:WebPageElement ;
    schema:name "Generate one for your own database"@en ;
    schema:url <virtuoso-ai-value-prop.html#ontology-make-your-own> ;
    schema:isPartOf <#app> .

<#section-sources-list> a schema:WebPageElement ;
    schema:name "Where every example comes from"@en ;
    schema:url <virtuoso-ai-value-prop.html#sources-list> ;
    schema:isPartOf <#app> .

<#source-1> a schema:CreativeWork ;
    schema:name "Customer Sales Performance Dashboard (SQL Server Northwind)"@en ;
    schema:url <https://www.openlinksw.com/weblog/?post=rdf-linked-data-views-sqlserver.html> ;
    schema:description "Graph and ontology of the SQL Server RDF View; the sales query, as a working variant."@en .

<#source-2> a schema:CreativeWork ;
    schema:name "Turn Your Data Into Decisive Knowledge"@en ;
    schema:url <https://www.openlinksw.com/weblog/?post=virtuoso-turning-data-into-decisive-knowledge.html> ;
    schema:description "SQL Server + MySQL + Virtuoso federated join, with its Query Builder permalink over XMLA."@en .

<#source-3> a schema:CreativeWork ;
    schema:name "Northwind Sales Performance Dashboard"@en ;
    schema:url <https://www.openlinksw.com/weblog/?post=northwind-dashboard-rdf-views-claude-3.html> ;
    schema:description "The Northwind# graph, the SalesPerformance SPASQL and a shared OPAL chat."@en .

<#source-4> a schema:CreativeWork ;
    schema:name "Knowledge Graph: Entity Type & Sample Entities"@en ;
    schema:url <https://www.openlinksw.com/weblog/?post=claude-virtuoso-support-agent-skills-generated-northwind-knowledge-graph.html> ;
    schema:description "Entity-type query over the Demo.demo RDF View."@en .

<#source-5> a schema:CreativeWork ;
    schema:name "postgres_postgres_jdbc_mt_codex_20260403 Knowledge Graph"@en ;
    schema:url <https://www.openlinksw.com/weblog/?post=postgres_postgres_jdbc_mt_codex_linked_data_infographic.html> ;
    schema:description "PostgreSQL RDF View graph, ontology and the client DESCRIBE."@en .

<#source-6> a schema:CreativeWork ;
    schema:name "Databricks → Virtual Knowledge Graph with Virtuoso"@en ;
    schema:url <https://linkeddata.uriburner.com/weblog/?post=databricks-virtuoso-kg-deepseek_v4pro-1.html> ;
    schema:description "Databricks Bakehouse RDF View: graph, ontology, R2RML mapping, the revenue and customer queries and the franchise DESCRIBE."@en .

<#source-7> a schema:CreativeWork ;
    schema:name "From Databricks Tables to a Virtual Knowledge Graph with Virtuoso"@en ;
    schema:url <https://community.openlinksw.com/t/from-databricks-tables-to-a-virtual-knowledge-graph-with-virtuoso/6293> ;
    schema:description "The original OpenLink Community walkthrough the Databricks post is built from."@en .

<#source-8> a schema:CreativeWork ;
    schema:name "Scale AI into Production: Neo4j's Five Scale Capabilities Meshed with Virtuoso and agent-rdf-memory"@en ;
    schema:url <https://linkeddata.uriburner.com/weblog/?post=neo4j-scale-ai-production-vs-virtuoso-agent-rdf-memory-meshup-claude_sonnet_5_5-1.html> ;
    schema:description "The ScaleKG estate (synthetic tables standing in for a Snowflake system of record), its graph, ontology, SPASQL and SPARQL queries."@en .

<#source-9> a schema:CreativeWork ;
    schema:name "Virtuoso Multi-Model Data Management Breakdown"@en ;
    schema:url <https://www.openlinksw.com/weblog/?post=virtuoso-rdf-views.html> ;
    schema:description "Inventory of the quad maps on demo.openlinksw.com."@en .

<#source-10> a schema:CreativeWork ;
    schema:name "Conceptual Data Virtualization for SQL and RDF"@en ;
    schema:url <https://www.openlinksw.com/weblog/?post=conceptual-data-virtualization-sql-rdf-deepseek_v4flash-1.html> ;
    schema:description "CSV Northwind queries and quad-map introspection."@en .

<#source-11> a schema:CreativeWork ;
    schema:name "OPAL widget architecture"@en ;
    schema:url <https://www.openlinksw.com/weblog/?post=opal-widget-architecture.drawio.html> ;
    schema:description "The request flow on the OPAL Agents page."@en .

<#source-12> a schema:CreativeWork ;
    schema:name "OPAL Agent, Skills, and Functions Playground"@en ;
    schema:url <https://www.openlinksw.com/weblog/?post=opal-system-functions-or-agents-apis-developer-journey-gemini-19.html> ;
    schema:description "Background on agents, skills and function tools."@en .

<#source-13> a schema:CreativeWork ;
    schema:name "OPAL agent demo over DBpedia"@en ;
    schema:url <https://www.openlinksw.com/weblog/?post=opal-agent-dbpedia-spike-lee-demo-1.html> ;
    schema:description "An OPAL agent answering from a public knowledge graph."@en .

<#source-14> a schema:CreativeWork ;
    schema:name "From Intent to Action: Agents, Context and Open Standards"@en ;
    schema:url <https://linkeddata.uriburner.com/weblog/?post=intent-to-action-agents-web-claude_sonnet_5_5-1.html> ;
    schema:description "Agents over open standards, including A2A."@en .

<#source-15> a schema:CreativeWork ;
    schema:name "chat-data.com"@en ;
    schema:url <https://www.chat-data.com/> ;
    schema:description "Page structure and visual style."@en .

<#profile-uriburner-rdfviews-sparql> a schema:EntryPoint ;
    schema:name "RDF Views SPARQL endpoint"@en ;
    schema:urlTemplate "https://demo.openlinksw.com/sparql"@en .

<#profile-uriburner-rdfviews-describe> a schema:EntryPoint ;
    schema:name "RDF View entity description (uri and graph)"@en ;
    schema:urlTemplate "https://demo.openlinksw.com/describe/?uri={iri}&graph={graph}"@en .

<#profile-uriburner-rdfviews-spasqlqb> a schema:EntryPoint ;
    schema:name "SPASQL Query Builder (SQL over XMLA and SPASQL)"@en ;
    schema:urlTemplate "https://demo.openlinksw.com/spasqlqb/?permlink_e="@en .

<#profile-uriburner-rdfviews-xmla> a schema:EntryPoint ;
    schema:name "XMLA endpoint"@en ;
    schema:urlTemplate "https://demo.openlinksw.com/XMLA"@en .

<#profile-uriburner-linkeddata-sparql> a schema:EntryPoint ;
    schema:name "Linked-data and Sponger SPARQL endpoint"@en ;
    schema:urlTemplate "https://linkeddata.uriburner.com/sparql"@en .

<#profile-uriburner-linkeddata-sparqlauth> a schema:EntryPoint ;
    schema:name "Signed-in SPARQL endpoint (sponging)"@en ;
    schema:urlTemplate "https://linkeddata.uriburner.com/sparql-auth/"@en .

<#profile-uriburner-linkeddata-describe> a schema:EntryPoint ;
    schema:name "Linked-data entity description"@en ;
    schema:urlTemplate "https://linkeddata.uriburner.com/describe/?url={iri}"@en .

<#profile-uriburner-opal-agentcard> a schema:EntryPoint ;
    schema:name "OPAL A2A Agent Card"@en ;
    schema:urlTemplate "https://linkeddata.uriburner.com/.well-known/agent.json"@en .

<#profile-uriburner-opal-chatui> a schema:EntryPoint ;
    schema:name "OPAL chat UI"@en ;
    schema:urlTemplate "https://linkeddata.uriburner.com/chat/"@en .

<#profile-uriburner-opal-widgetbase> a schema:EntryPoint ;
    schema:name "OPAL widget scripts"@en ;
    schema:urlTemplate "https://virtuoso.openlinksw.com/opal-widget"@en .

<#profile-uriburner-facetedbrowser> a schema:EntryPoint ;
    schema:name "SPARQL Faceted Browser app"@en ;
    schema:urlTemplate "https://linkeddata.uriburner.com/DAV/demos/daas/sparql-faceted-browser-claude_opus_5_5.html#s={state}"@en .

<#profile-uriburner> a schema:CreativeWork ;
    schema:name "Instance profile: URIBurner (default)"@en ;
    schema:identifier "uriburner"@en ;
    schema:url <https://linkeddata.uriburner.com/DAV/demos/daas/virtuoso-ai-value-prop.html> ;
    schema:hasPart <#profile-uriburner-rdfviews-sparql> ,
        <#profile-uriburner-rdfviews-describe> ,
        <#profile-uriburner-rdfviews-spasqlqb> ,
        <#profile-uriburner-rdfviews-xmla> ,
        <#profile-uriburner-linkeddata-sparql> ,
        <#profile-uriburner-linkeddata-sparqlauth> ,
        <#profile-uriburner-linkeddata-describe> ,
        <#profile-uriburner-opal-agentcard> ,
        <#profile-uriburner-opal-chatui> ,
        <#profile-uriburner-opal-widgetbase> ,
        <#profile-uriburner-facetedbrowser> ;
    schema:isPartOf <#cap-instance-profiles> ;
    rdfs:comment "Default profile."@en .

<#profile-www-rdfviews-sparql> a schema:EntryPoint ;
    schema:name "RDF Views SPARQL endpoint"@en ;
    schema:urlTemplate "https://demo.openlinksw.com/sparql"@en .

<#profile-www-rdfviews-describe> a schema:EntryPoint ;
    schema:name "RDF View entity description (uri and graph)"@en ;
    schema:urlTemplate "https://demo.openlinksw.com/describe/?uri={iri}&graph={graph}"@en .

<#profile-www-rdfviews-spasqlqb> a schema:EntryPoint ;
    schema:name "SPASQL Query Builder (SQL over XMLA and SPASQL)"@en ;
    schema:urlTemplate "https://demo.openlinksw.com/spasqlqb/?permlink_e="@en .

<#profile-www-rdfviews-xmla> a schema:EntryPoint ;
    schema:name "XMLA endpoint"@en ;
    schema:urlTemplate "https://demo.openlinksw.com/XMLA"@en .

<#profile-www-linkeddata-sparql> a schema:EntryPoint ;
    schema:name "Linked-data and Sponger SPARQL endpoint"@en ;
    schema:urlTemplate "https://linkeddata.uriburner.com/sparql"@en .

<#profile-www-linkeddata-sparqlauth> a schema:EntryPoint ;
    schema:name "Signed-in SPARQL endpoint (sponging)"@en ;
    schema:urlTemplate "https://linkeddata.uriburner.com/sparql-auth/"@en .

<#profile-www-linkeddata-describe> a schema:EntryPoint ;
    schema:name "Linked-data entity description"@en ;
    schema:urlTemplate "https://www.openlinksw.com/describe/?url={iri}"@en .

<#profile-www-opal-agentcard> a schema:EntryPoint ;
    schema:name "OPAL A2A Agent Card"@en ;
    schema:urlTemplate "https://linkeddata.uriburner.com/.well-known/agent.json"@en .

<#profile-www-opal-chatui> a schema:EntryPoint ;
    schema:name "OPAL chat UI"@en ;
    schema:urlTemplate "https://linkeddata.uriburner.com/chat/"@en .

<#profile-www-opal-widgetbase> a schema:EntryPoint ;
    schema:name "OPAL widget scripts"@en ;
    schema:urlTemplate "https://www.openlinksw.com/opal-widget"@en .

<#profile-www-facetedbrowser> a schema:EntryPoint ;
    schema:name "SPARQL Faceted Browser app"@en ;
    schema:urlTemplate "https://linkeddata.uriburner.com/DAV/demos/daas/sparql-faceted-browser-claude_opus_5_5.html#s={state}"@en .

<#profile-www> a schema:CreativeWork ;
    schema:name "Instance profile: www.openlinksw.com"@en ;
    schema:identifier "www"@en ;
    schema:hasPart <#profile-www-rdfviews-sparql> ,
        <#profile-www-rdfviews-describe> ,
        <#profile-www-rdfviews-spasqlqb> ,
        <#profile-www-rdfviews-xmla> ,
        <#profile-www-linkeddata-sparql> ,
        <#profile-www-linkeddata-sparqlauth> ,
        <#profile-www-linkeddata-describe> ,
        <#profile-www-opal-agentcard> ,
        <#profile-www-opal-chatui> ,
        <#profile-www-opal-widgetbase> ,
        <#profile-www-facetedbrowser> ;
    schema:isPartOf <#cap-instance-profiles> ;
    rdfs:comment "Selected with ?profile=www on the app URL, or made the default in the app's vap-config block when deploying."@en ;
    schema:creativeWorkStatus "Not deployed yet: no app URL."@en .

<#cap-instance-profiles> a schema:DefinedTerm ;
    schema:hasPart <#profile-uriburner> ,
        <#profile-www> .
