@prefix : <https://community.openlinksw.com/t/virtuoso-saas-managed-service-buyer-guide/6600#> .
@prefix schema: <http://schema.org/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix prov: <http://www.w3.org/ns/prov#> .

# ── Document entity ──────────────────────────────────────────────────────────

:guide a schema:TechArticle ;
    schema:name "Virtuoso SaaS Managed Service Buyer Guide"@en ;
    schema:headline "From Marketplace click to your first SPARQL query — one ordered path, zero support tickets"@en ;
    schema:abstract "This guide covers purchasing, setting up, and operating one Virtuoso SaaS Single Server instance through AWS Marketplace and the buyer portal. It walks the buyer from the Marketplace product page through contract selection, portal account setup, provisioning, and the first SQL and SPARQL connections. It then covers daily operations, billing and renewal, troubleshooting, and a seven-point onboarding checklist. Prices and offer terms shown are illustrative only; the live Marketplace offer is authoritative."@en ;
    schema:description "A buyer-side runbook for one Virtuoso SaaS Single Server: purchase a Marketplace contract, bind the buyer portal account, wait for provisioning, connect over HTTPS and TLS SQL, operate the instance, and manage billing, renewal, and cancellation."@en ;
    schema:articleBody "Start from the AWS Marketplace product page. Do not bookmark or open a fulfillment URL directly: AWS Marketplace supplies a one-time setup context after a successful purchase. After the agreement is created, set up the buyer portal account, wait for the instance to become running and healthy, then connect with Conductor, SPARQL, and TLS SQL on port 1112."@en ;
    schema:url <https://community.openlinksw.com/t/virtuoso-saas-managed-service-buyer-guide/6600> ;
    schema:author <http://dbpedia.org/resource/OpenLink_Software> ;
    schema:publisher <http://dbpedia.org/resource/OpenLink_Software> ;
    schema:datePublished "2026-10-20"^^xsd:date ;
    schema:dateModified "2026-10-20"^^xsd:date ;
    schema:inLanguage "en"@en ;
    schema:about :virtuosoSaaS,
        <http://dbpedia.org/resource/Virtuoso_Universal_Server>,
        :awsMarketplace,
        :buyerPortal,
        :offer ;
    schema:hasPart :connectorSection,
        :howTo,
        :faqSection,
        :glossarySection,
        :checklist,
        :importantLinks,
        :sectionPurchase,
        :sectionConnect,
        :sectionOperate ;
    prov:wasGeneratedBy <https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/kg-generator#this>,
        <https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/rdf-infographic-skill#this> .

# ── Organizations ────────────────────────────────────────────────────────────

<http://dbpedia.org/resource/OpenLink_Software> a schema:Organization ;
    schema:name "OpenLink Software"@en ;
    schema:description "The publisher of the Virtuoso SaaS Managed Service Buyer Guide and the vendor behind Virtuoso Universal Server."@en ;
    schema:url <https://www.openlinksw.com/> ;
    schema:sameAs <https://www.linkedin.com/company/openlink-software/> .

<http://dbpedia.org/resource/Amazon_Web_Services> a schema:Organization ;
    schema:name "Amazon Web Services"@en ;
    schema:description "The cloud provider whose Marketplace hosts the Virtuoso SaaS Single Server offer and issues the invoice."@en ;
    schema:url <https://aws.amazon.com/> .

# ── Software / service entities ──────────────────────────────────────────────

<http://dbpedia.org/resource/Virtuoso_Universal_Server> a schema:SoftwareApplication ;
    schema:name "Virtuoso Universal Server"@en ;
    schema:description "OpenLink's converged virtual DBMS — relational tables and RDF graphs in one quad-store engine, queried in SQL, SPARQL, SPASQL, GraphQL and more — delivered here as a managed, single-server SaaS instance."@en ;
    schema:url <https://virtuoso.openlinksw.com/> ;
    schema:publisher <http://dbpedia.org/resource/OpenLink_Software> .

:virtuosoSaaS a schema:SoftwareApplication ;
    schema:name "Virtuoso SaaS Single Server"@en ;
    schema:description "The managed-service offering purchased through AWS Marketplace: one tenant Virtuoso instance per active subscription, provisioned and operated from the Virtuoso SaaS buyer portal."@en ;
    schema:url <https://aws.amazon.com/marketplace/pp/prodview-6sqaln2drhie4> ;
    schema:publisher <http://dbpedia.org/resource/OpenLink_Software> ;
    schema:applicationCategory "Managed Database Service"@en .

:awsMarketplace a schema:SoftwareApplication ;
    schema:name "AWS Marketplace"@en ;
    schema:description "The commerce platform where the Virtuoso SaaS contract is purchased, the agreement is managed, and the invoice is issued."@en ;
    schema:url <https://aws.amazon.com/marketplace/> ;
    schema:publisher <http://dbpedia.org/resource/Amazon_Web_Services> .

:buyerPortal a schema:SoftwareApplication ;
    schema:name "Virtuoso SaaS Buyer Portal"@en ;
    schema:description "The web application that provisions and manages the tenant instance — Instances, Usage & Billing, Settings, and Secure SQL access controls."@en ;
    schema:url <https://d6rcngx43773s.cloudfront.net/> ;
    schema:publisher <http://dbpedia.org/resource/OpenLink_Software> .

:conductor a schema:SoftwareApplication ;
    schema:name "Virtuoso Conductor"@en ;
    schema:description "Virtuoso's browser-based administration interface, reached over HTTPS from the instance detail page."@en ;
    schema:isPartOf <http://dbpedia.org/resource/Virtuoso_Universal_Server> .

:sparqlEndpoint a schema:WebAPI ;
    schema:name "HTTPS SPARQL endpoint"@en ;
    schema:description "The instance's SPARQL query endpoint, opened from the instance detail page with the database credentials."@en ;
    schema:isPartOf :virtuosoSaaS ;
    schema:url <https://linkeddata.uriburner.com/sparql> .

# ── Buyer-context connector (three audiences of the Marketplace offer) ───────

:offer a schema:Offer ;
    schema:name "Virtuoso SaaS Single Server — AWS Marketplace offer"@en ;
    schema:description "The AWS Marketplace offer that sets the commercial context for one managed Virtuoso SaaS Single Server instance, with contract terms of 12, 24, or 36 months."@en ;
    schema:itemOffered :virtuosoSaaS ;
    schema:offeredBy <http://dbpedia.org/resource/OpenLink_Software> ;
    schema:url <https://aws.amazon.com/marketplace/pp/prodview-6sqaln2drhie4> ;
    schema:audience :audienceExistingCustomer, :audienceEvaluatorPoC, :audienceSolutionBuilder .

:servicesCapability a schema:Service ;
    schema:name "OpenLink professional services"@en ;
    schema:description "The experienced services capabilities OpenLink provides alongside the managed Virtuoso SaaS edition — architecture, migration, tuning, and operational expertise."@en ;
    schema:provider <http://dbpedia.org/resource/OpenLink_Software> .

:evaluationOffers a schema:Offer ;
    schema:name "Free evaluation offers"@en ;
    schema:description "The free evaluation offers used to assess the commercial Virtuoso edition before committing to a proof of concept or a rollout."@en ;
    schema:offeredBy <http://dbpedia.org/resource/OpenLink_Software> .

:connectorSection a schema:CreativeWork ;
    schema:name "Find Your Entry Point"@en ;
    schema:description "Three reader contexts that connect to the AWS Marketplace offer — existing customers, evaluators ready for PoC, and builders ready to roll out."@en ;
    schema:hasPart :audienceExistingCustomer, :audienceEvaluatorPoC, :audienceSolutionBuilder ;
    schema:isPartOf :guide .

:audienceExistingCustomer a schema:Audience ;
    schema:audienceType "Existing customer"@en ;
    schema:name "Existing customer seeking a managed edition"@en ;
    schema:description "You are an existing customer that seeks a managed server edition of Virtuoso combined with the experienced services capabilities we provide."@en ;
    schema:about :virtuosoSaaS, :servicesCapability .

:audienceEvaluatorPoC a schema:Audience ;
    schema:audienceType "Evaluator"@en ;
    schema:name "Evaluation complete — ready for PoC or rollout"@en ;
    schema:description "You have successfully evaluated the commercial edition using the free evaluation offers and are ready to commence a proof of concept, or you are at the point of rollout."@en ;
    schema:about :evaluationOffers, :virtuosoSaaS .

:audienceSolutionBuilder a schema:Audience ;
    schema:audienceType "Solution builder"@en ;
    schema:name "Agentic solution built — ready to roll out"@en ;
    schema:description "You have successfully built a modern agentic solution, or revamped a struggling app or service, that now requires rollout to your customer base via the resilience offered by a cloud platform."@en ;
    schema:about :virtuosoSaaS, <http://dbpedia.org/resource/Amazon_Web_Services> .

# ── Article sections (narrative spine) ───────────────────────────────────────

:importantLinks a schema:CreativeWork ;
    schema:name "Important Links"@en ;
    schema:description "The AWS Marketplace product page, the Virtuoso SaaS buyer portal, and the AWS Marketplace subscriptions console."@en ;
    schema:isPartOf :guide .

:sectionPurchase a schema:CreativeWork ;
    schema:name "Purchase"@en ;
    schema:description "Contract duration, plan dimension, metered overage, and renewal selection — everything to verify before subscribing."@en ;
    schema:isPartOf :guide .

:sectionConnect a schema:CreativeWork ;
    schema:name "Connect"@en ;
    schema:description "Conductor, HTTPS SPARQL, and TLS SQL on port 1112, gated by an explicit CIDR allow-list."@en ;
    schema:isPartOf :guide .

:sectionOperate a schema:CreativeWork ;
    schema:name "Operate"@en ;
    schema:description "Lifecycle controls, container shell access, backup and restore, and billing, renewal, and cancellation."@en ;
    schema:isPartOf :guide .

# ── HowTo: the buyer journey ─────────────────────────────────────────────────

:howTo a schema:HowTo ;
    schema:name "The Buyer Journey"@en ;
    schema:description "Eight ordered phases take the buyer from the Marketplace product page to a running, healthy, correctly billed Virtuoso SaaS instance."@en ;
    schema:totalTime "PT1H" ;
    schema:step :step1, :step2, :step3, :step4, :step5, :step6, :step7, :step8 .

:step1 a schema:HowToStep ;
    schema:position 1 ;
    schema:name "Before You Purchase"@en ;
    schema:text "Sign in to the AWS account that will own and pay for the agreement. Review the live Marketplace offer — term, selected plan, applicable taxes, metered overages, EULA, support, and renewal terms. Use an email address that will remain available to administer the buyer portal account, and keep the Marketplace tab open until the purchase confirmation offers Set up your account."@en ;
    schema:image :img01 .

:step2 a schema:HowToStep ;
    schema:position 2 ;
    schema:name "Purchase a Marketplace Contract"@en ;
    schema:text "Open Virtuoso SaaS Single Server and choose View purchase options. Select the contract duration — 12, 24, or 36 months — then exactly one plan dimension for the required service tier. Review usage-based charges, accept the Marketplace terms and EULA, choose whether the agreement auto-renews, and select Subscribe. Confirm the tier, duration, contract price, tax, and renewal selection before subscribing."@en ;
    schema:image :img03 .

:step3 a schema:HowToStep ;
    schema:position 3 ;
    schema:name "Set Up Your Buyer Portal Account"@en ;
    schema:text "After Marketplace confirms the purchase, select Set up your account. Sign in with an existing portal account for this buyer AWS account, or create one and complete the signup flow. Use one portal account per buyer AWS account and reuse it for future access and any additional setup links."@en ;
    schema:image :img09, :img10 .

:step4 a schema:HowToStep ;
    schema:position 4 ;
    schema:name "Wait for Provisioning"@en ;
    schema:text "The buyer portal creates one tenant instance for the active subscription. Open Instances and wait for the status to become running and its health to become healthy. Provisioning can take several minutes — refresh the Instances page rather than repeating Marketplace setup."@en ;
    schema:image :img11 .

:step5 a schema:HowToStep ;
    schema:position 5 ;
    schema:name "Connect to Virtuoso"@en ;
    schema:text "The instance detail page provides the endpoint values and database credentials. Open Conductor for browser administration and the HTTPS SPARQL link for the query editor, signing in with the dba username and the shown password. A simple first query is SELECT * WHERE { ?s ?p ?o } LIMIT 10."@en ;
    schema:image :img12 .

:step6 a schema:HowToStep ;
    schema:position 6 ;
    schema:name "Allow TLS SQL Access"@en ;
    schema:text "TLS SQL access is closed by default. Enter only the trusted public IPv4 CIDR ranges permitted to connect to port 1112 and select Update Secure SQL Access. Use /32 for a single address, separate ranges with commas, and leave the field empty to remove public access; 0.0.0.0/0 is not permitted."@en ;
    schema:image :img15 .

:step7 a schema:HowToStep ;
    schema:position 7 ;
    schema:name "Run Daily Operations"@en ;
    schema:text "Use lifecycle controls to Stop, Start, and Delete the instance. Connect over TLS SQL with isql <hostname>:1112 -E dba, and confirm the connection with a status() call. Access the container shell through the buyer-specific IAM policy, role ARN, external ID, and generated AWS CLI script, and follow the online backup and recovery runbook for backups."@en ;
    schema:image :img16 .

:step8 a schema:HowToStep ;
    schema:position 8 ;
    schema:name "Manage Billing, Renewal, and Cancellation"@en ;
    schema:text "Review usage and billing in the buyer portal, but remember AWS Marketplace is the billing authority and issues the invoice. Review your profile and agreement in Settings, manage the agreement and auto-renewal in the AWS Marketplace subscriptions console, and follow the agreement terms for cancellation, refund, or early termination."@en ;
    schema:image :img17 .

# ── FAQ: buyer questions and troubleshooting ─────────────────────────────────

:faqSection a schema:FAQPage ;
    schema:name "Buyer Questions & Troubleshooting"@en ;
    schema:description "Answers to the questions a buyer meets most often, from missing instances to CIDR-scoped SQL access."@en ;
    schema:mainEntity :q1, :q2, :q3, :q4, :q5, :q6, :q7, :q8, :q9, :q10, :q11, :q12 ;
    schema:isPartOf :guide .

:q1 a schema:Question ;
    schema:name "The portal has no instance — what should I check?"@en ;
    schema:acceptedAnswer :a1 .
:a1 a schema:Answer ;
    schema:text "Confirm the AWS Marketplace agreement is active in the same buyer AWS account used for setup. Open Set up your account from the active agreement, not from an old bookmarked URL, sign in with the portal account already bound to that buyer account, then refresh Instances and wait for provisioning to complete."@en .

:q2 a schema:Question ;
    schema:name "Why do I see 'wrong user for this Marketplace setup link'?"@en ;
    schema:acceptedAnswer :a2 .
:a2 a schema:Answer ;
    schema:text "Sign out of the buyer portal, reopen Set up your account from the active Marketplace agreement, and sign in with the portal account previously bound to that buyer AWS account."@en .

:q3 a schema:Question ;
    schema:name "A setup link has expired or is invalid — can I reuse it?"@en ;
    schema:acceptedAnswer :a3 .
:a3 a schema:Answer ;
    schema:text "Do not reuse it. Open the active agreement in AWS Marketplace and choose Set up your account again to receive a fresh one-time setup context."@en .

:q4 a schema:Question ;
    schema:name "TLS SQL cannot connect. What should I verify?"@en ;
    schema:acceptedAnswer :a4 .
:a4 a schema:Answer ;
    schema:text "Confirm the source public IP address is included in Allowed IPv4 CIDRs and that the client uses TLS on port 1112. A self-signed certificate warning is expected unless the client has been configured to trust the tenant certificate."@en .

:q5 a schema:Question ;
    schema:name "Can I bookmark or open a fulfillment URL directly?"@en ;
    schema:acceptedAnswer :a5 .
:a5 a schema:Answer ;
    schema:text "No. Start from the AWS Marketplace product page. AWS Marketplace supplies a one-time setup context only after a successful purchase, so a saved fulfillment URL will not work on a later visit."@en .

:q6 a schema:Question ;
    schema:name "How many buyer portal accounts should I use per AWS account?"@en ;
    schema:acceptedAnswer :a6 .
:a6 a schema:Answer ;
    schema:text "Exactly one portal account per buyer AWS account. Reuse that account for future portal access and for any additional Marketplace setup links associated with the same buyer account."@en .

:q7 a schema:Question ;
    schema:name "Can I open Secure SQL to 0.0.0.0/0?"@en ;
    schema:acceptedAnswer :a7 .
:a7 a schema:Answer ;
    schema:text "No — 0.0.0.0/0 is not permitted. Allow only the trusted public IPv4 CIDR ranges that need port 1112, and leave the field empty to remove public TLS SQL access entirely."@en .

:q8 a schema:Question ;
    schema:name "Does turning off auto-renewal end my current term?"@en ;
    schema:acceptedAnswer :a8 .
:a8 a schema:Answer ;
    schema:text "No. Turning off auto-renewal applies to the next renewal only. It does not terminate an active contract and does not automatically remove a tenant."@en .

:q9 a schema:Question ;
    schema:name "What does Delete Instance do?"@en ;
    schema:acceptedAnswer :a9 .
:a9 a schema:Answer ;
    schema:text "Delete Instance terminates the tenant infrastructure. It is not a substitute for cancelling or changing a Marketplace agreement."@en .

:q10 a schema:Question ;
    schema:name "How long does provisioning take?"@en ;
    schema:acceptedAnswer :a10 .
:a10 a schema:Answer ;
    schema:text "Provisioning can take several minutes. Refresh the Instances page rather than repeating Marketplace setup while an instance is already provisioning, and wait for the status to become running and the health to become healthy."@en .

:q11 a schema:Question ;
    schema:name "Where is billing authoritative?"@en ;
    schema:acceptedAnswer :a11 .
:a11 a schema:Answer ;
    schema:text "AWS Marketplace remains the billing authority and issues the invoice. The buyer portal's Usage & Billing page shows operational estimates for plan, instance hours, contract amount, and storage or data-transfer overage."@en .

:q12 a schema:Question ;
    schema:name "Should I expect a self-signed certificate warning on TLS SQL?"@en ;
    schema:acceptedAnswer :a12 .
:a12 a schema:Answer ;
    schema:text "Yes. A self-signed certificate warning is expected unless the client trusts the tenant certificate. It does not indicate a failed connection."@en .

# ── Glossary: core technical terms ───────────────────────────────────────────

:glossarySection a schema:DefinedTermSet ;
    schema:name "Core Technical Glossary"@en ;
    schema:description "The terms a buyer needs to operate Virtuoso SaaS with confidence."@en ;
    schema:hasDefinedTerm :termVirtuosoSaaS, :termAwsMarketplace, :termBuyerPortal,
        :termConductor, :termSparqlEndpoint, :termSecureSql, :termIsql, :termCidr,
        :termMeteredOverage, :termEula, :termAutoRenewal, :termEcsExec ;
    schema:isPartOf :guide .

:termVirtuosoSaaS a schema:DefinedTerm ;
    schema:name "Virtuoso SaaS Single Server"@en ;
    schema:description "The managed, single-server Virtuoso offering purchased through AWS Marketplace — one tenant instance per active subscription."@en ;
    schema:inDefinedTermSet :glossarySection .

:termAwsMarketplace a schema:DefinedTerm ;
    schema:name "AWS Marketplace"@en ;
    schema:description "The commerce platform where the Virtuoso SaaS contract is purchased, the agreement is managed, and the invoice is issued."@en ;
    schema:inDefinedTermSet :glossarySection .

:termBuyerPortal a schema:DefinedTerm ;
    schema:name "Buyer Portal"@en ;
    schema:description "The web application that provisions and manages the tenant instance — Instances, Usage & Billing, Settings, and Secure SQL access controls."@en ;
    schema:inDefinedTermSet :glossarySection .

:termConductor a schema:DefinedTerm ;
    schema:name "Conductor"@en ;
    schema:description "Virtuoso's browser-based administration interface, reached over HTTPS from the instance detail page."@en ;
    schema:inDefinedTermSet :glossarySection .

:termSparqlEndpoint a schema:DefinedTerm ;
    schema:name "SPARQL Endpoint"@en ;
    schema:description "The instance's HTTPS SPARQL query endpoint, opened from the instance detail page with the database credentials."@en ;
    schema:inDefinedTermSet :glossarySection .

:termSecureSql a schema:DefinedTerm ;
    schema:name "Secure SQL (TLS)"@en ;
    schema:description "TLS-encrypted SQL/ODBC/JDBC access on port 1112 — closed by default and opened only for explicitly allowed public IPv4 CIDR ranges."@en ;
    schema:inDefinedTermSet :glossarySection .

:termIsql a schema:DefinedTerm ;
    schema:name "isql"@en ;
    schema:description "Virtuoso's interactive SQL command-line client, used over TLS as isql <hostname>:1112 -E dba."@en ;
    schema:inDefinedTermSet :glossarySection .

:termCidr a schema:DefinedTerm ;
    schema:name "CIDR"@en ;
    schema:description "Classless Inter-Domain Routing notation for specifying allowed IP ranges — a single public address uses /32, for example 203.0.113.45/32."@en ;
    schema:inDefinedTermSet :glossarySection .

:termMeteredOverage a schema:DefinedTerm ;
    schema:name "Metered Overage"@en ;
    schema:description "Usage-based charges that apply in addition to the selected contract price when usage exceeds the included entitlement."@en ;
    schema:inDefinedTermSet :glossarySection .

:termEula a schema:DefinedTerm ;
    schema:name "EULA"@en ;
    schema:description "The End-User License Agreement reviewed and accepted during the Marketplace purchase."@en ;
    schema:inDefinedTermSet :glossarySection .

:termAutoRenewal a schema:DefinedTerm ;
    schema:name "Auto-Renewal"@en ;
    schema:description "Automatic agreement renewal at the end of its term; turning it off prevents the next renewal but does not end the active term."@en ;
    schema:inDefinedTermSet :glossarySection .

:termEcsExec a schema:DefinedTerm ;
    schema:name "ECS Exec"@en ;
    schema:description "AWS ECS Exec shell access to the instance container, gated by a buyer-specific IAM policy, role ARN, external ID, and generated AWS CLI script."@en ;
    schema:inDefinedTermSet :glossarySection .

# ── Onboarding checklist ─────────────────────────────────────────────────────

:checklist a schema:ItemList ;
    schema:name "Successful Onboarding Checklist"@en ;
    schema:description "Seven proofs that the instance is bought, provisioned, connected, and correctly configured."@en ;
    schema:itemListElement :ck1, :ck2, :ck3, :ck4, :ck5, :ck6, :ck7 ;
    schema:isPartOf :guide .

:ck1 a schema:ListItem ;
    schema:position 1 ;
    schema:name "Marketplace subscription completed for the intended buyer AWS account."@en .

:ck2 a schema:ListItem ;
    schema:position 2 ;
    schema:name "Buyer portal account created or signed in."@en .

:ck3 a schema:ListItem ;
    schema:position 3 ;
    schema:name "Instance status is running and health is healthy."@en .

:ck4 a schema:ListItem ;
    schema:position 4 ;
    schema:name "Conductor and SPARQL endpoint links respond."@en .

:ck5 a schema:ListItem ;
    schema:position 5 ;
    schema:name "TLS SQL works from an explicitly allowed CIDR and is rejected outside it."@en .

:ck6 a schema:ListItem ;
    schema:position 6 ;
    schema:name "Database credentials have been stored securely."@en .

:ck7 a schema:ListItem ;
    schema:position 7 ;
    schema:name "Renewal preference has been reviewed in AWS Marketplace."@en .

# ── SPARQL examples (schema:SoftwareSourceCode) ──────────────────────────────

:sparqlSmokeTest a schema:SoftwareSourceCode ;
    schema:name "Smoke-test query"@en ;
    schema:description "The simplest first query to confirm the SPARQL endpoint is live."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text "SELECT * WHERE { ?s ?p ?o } LIMIT 10"@en ;
    schema:codeSampleType "SPARQL Query"@en ;
    schema:target :sparqlEndpoint .

:sparqlCountTriples a schema:SoftwareSourceCode ;
    schema:name "Count triples"@en ;
    schema:description "Count every triple in the instance's default graph."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text "SELECT (COUNT(*) AS ?triples) WHERE { ?s ?p ?o }"@en ;
    schema:codeSampleType "SPARQL Query"@en ;
    schema:target :sparqlEndpoint .

:sparqlListEntities a schema:SoftwareSourceCode ;
    schema:name "List entities by type"@en ;
    schema:description "Project each entity's IRI beside its label, grouped by type, from the uploaded buyer-guide graph."@en ;
    schema:programmingLanguage "SPARQL"@en ;
    schema:text "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\nSELECT ?type (SAMPLE(?s) AS ?sampleEntity) (SAMPLE(?label) AS ?sampleLabel) (COUNT(?s) AS ?entityCount)\nWHERE {\n  GRAPH <https://linkeddata.uriburner.com/DAV/demos/daas/virtuoso-saas-managed-service-buyer-guide-deepseek_v4pro-1.ttl> {\n    ?s rdf:type ?type .\n    OPTIONAL { ?s rdfs:label ?label }\n  }\n}\nGROUP BY ?type ORDER BY DESC(?entityCount)"@en ;
    schema:codeSampleType "SPARQL Query"@en ;
    schema:target :sparqlEndpoint .

# ── Screenshots (schema:ImageObject) ─────────────────────────────────────────

:img01 a schema:ImageObject ;
    schema:name "01-marketplace-product"@en ;
    schema:description "The AWS Marketplace product page for Virtuoso SaaS Single Server."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/9/91554f3f2f8be209b89a3fde120688098e163815.jpeg> ;
    schema:isPartOf :guide .

:img02 a schema:ImageObject ;
    schema:name "View purchase options"@en ;
    schema:description "The View purchase options button on the Marketplace product page."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/3/319ef5b5cb589fa01a66499242a010caa99d7f46.png> ;
    schema:isPartOf :guide .

:img03 a schema:ImageObject ;
    schema:name "02-contract-duration"@en ;
    schema:description "Selecting the contract duration — 12, 24, or 36 months."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/d/d0baf41413ab5a5eff0a21855eebb9cf8b02ae3f.png> ;
    schema:isPartOf :guide .

:img04 a schema:ImageObject ;
    schema:name "03-plan-selection"@en ;
    schema:description "Selecting exactly one plan dimension for the required service tier."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/8/8907da7dd60a6e84ffa36c742cd2edf0984af5f0.png> ;
    schema:isPartOf :guide .

:img05 a schema:ImageObject ;
    schema:name "04-usage-pricing"@en ;
    schema:description "Reviewing metered usage pricing."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/1/1567a03ec8b62bc514f673f8b1b91324a45b9773.png> ;
    schema:isPartOf :guide .

:img06 a schema:ImageObject ;
    schema:name "05-terms-and-renewal"@en ;
    schema:description "Accepting terms and choosing renewal."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/3/3352c7e2f1f0e52ba26014106183cf5ea954ed03.png> ;
    schema:isPartOf :guide .

:img07 a schema:ImageObject ;
    schema:name "06-review-and-subscribe"@en ;
    schema:description "Reviewing tier, duration, price, tax, and renewal before subscribing."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/e/ee9acc20d1a6ec3bc298f3c58b61d10d0dabb89f.png> ;
    schema:isPartOf :guide .

:img08 a schema:ImageObject ;
    schema:name "07-purchase-confirmation"@en ;
    schema:description "Purchase confirmation with the Set up your account action."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/b/b0b5df293c3600d72516c4bc59cb70be91b6042e.png> ;
    schema:isPartOf :guide .

:img09 a schema:ImageObject ;
    schema:name "08-portal-login"@en ;
    schema:description "Signing in to the Virtuoso SaaS buyer portal."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/9/9101823653ee44c7d4eab9a9831407b0a6d74e9c.jpeg> ;
    schema:isPartOf :guide .

:img10 a schema:ImageObject ;
    schema:name "09-portal-signup"@en ;
    schema:description "Creating a new buyer portal account."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/e/e181ceee2631e20426ff8afa1f9b2ee5a0a55677.png> ;
    schema:isPartOf :guide .

:img11 a schema:ImageObject ;
    schema:name "13-instance-list"@en ;
    schema:description "The Instances list showing status running and health healthy."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/a/a50502fb9c504e739c8128bc68d43d39e84fa872.jpeg> ;
    schema:isPartOf :guide .

:img12 a schema:ImageObject ;
    schema:name "11-instance-details-and-credentials"@en ;
    schema:description "Instance detail page showing endpoints and a masked database password."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/3/3a4140013fce277ed44e2670d78193587b66fe39.jpeg> ;
    schema:isPartOf :guide .

:img13 a schema:ImageObject ;
    schema:name "14-conductor"@en ;
    schema:description "The Conductor administration interface opened over HTTPS."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/f/fdb625ebb401104b062954ff6d2247b7e757b606.jpeg> ;
    schema:isPartOf :guide .

:img14 a schema:ImageObject ;
    schema:name "12-sparql-query-editor"@en ;
    schema:description "The HTTPS SPARQL Query Editor."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/7/7e142cca0416f48f65b89abcd59440cbe89c10f6.png> ;
    schema:isPartOf :guide .

:img15 a schema:ImageObject ;
    schema:name "10-secure-sql-cidr"@en ;
    schema:description "Configuring the allowed IPv4 CIDR ranges for TLS SQL access on port 1112."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/d/d605ac0442f9c08484146fbedf8de37ad01daed9.jpeg> ;
    schema:isPartOf :guide .

:img16 a schema:ImageObject ;
    schema:name "15-container-shell-access"@en ;
    schema:description "Container shell access with the buyer-specific IAM policy, role ARN, and external ID."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/1/17f8aa9ef91bd3861757e6510572fe4127dfc231.jpeg> ;
    schema:isPartOf :guide .

:img17 a schema:ImageObject ;
    schema:name "19-usage-billing"@en ;
    schema:description "The Usage & Billing page showing plan, instance hours, and estimated overage."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/9/9556da16aca19694f4ba0e4d023b5d5f66d4b006.jpeg> ;
    schema:isPartOf :guide .

:img18 a schema:ImageObject ;
    schema:name "20-settings-profile"@en ;
    schema:description "The Settings page showing the portal account, agreement IDs, and security settings."@en ;
    schema:contentUrl <https://community.openlinksw.com/uploads/default/original/2X/9/961e6d545b4df74739d2e40595302bbec6b6defa.jpeg> ;
    schema:isPartOf :guide .

# ── Updated AWS Marketplace logos (verified from the live listing, 2026-10-20) ─

:logoProduct a schema:ImageObject ;
    schema:name "Virtuoso SaaS Single Server — AWS Marketplace listing logo"@en ;
    schema:description "The current listing thumbnail (product logo) for the Virtuoso SaaS Single Server offer on AWS Marketplace, fetched from the live product page."@en ;
    schema:contentUrl <https://d7umqicpi7263.cloudfront.net/img/product/ec20b69b-dd5f-42c2-85e6-2684269346f6.com/e733622b9c8e9db19c1da5d6559d7c82> ;
    schema:about :virtuosoSaaS ;
    schema:isPartOf :guide .

:logoSeller a schema:ImageObject ;
    schema:name "OpenLink Software — AWS Marketplace seller logo"@en ;
    schema:description "The current seller logo for OpenLink Software on AWS Marketplace, fetched from the live seller profile."@en ;
    schema:contentUrl <https://s3.amazonaws.com/awsmp-logos/00-OpenLink-6-1.png> ;
    schema:about <http://dbpedia.org/resource/OpenLink_Software> ;
    schema:isPartOf :guide .

:virtuosoSaaS schema:logo :logoProduct .
<http://dbpedia.org/resource/OpenLink_Software> schema:logo :logoSeller .

# ── Meshed source 2: Backup & Restore Guide (topic 6602) ─────────────────────

:buyerGuideSeries a schema:CreativeWorkSeries ;
    schema:name "Virtuoso SaaS Managed Service Buyer Guides"@en ;
    schema:description "The buyer-facing runbook series for the Virtuoso SaaS managed service: the primary purchase-and-operate guide and the backup-and-restore guide."@en .

:guide schema:isPartOf :buyerGuideSeries ;
    rdfs:seeAlso :backupRestoreGuide .

:backupRestoreGuide a schema:TechArticle ;
    schema:name "Virtuoso SaaS Managed Service Buyer Backup and Restore Guide"@en ;
    schema:abstract "This guide explains the backup operations available to Virtuoso SaaS buyers and how to request a controlled restore from OpenLink. Buyers run an online backup from the buyer portal and verify the durable S3 sync; a restore replaces the active database, requires a service outage, and is performed only by OpenLink seller administrators after explicit buyer authorization."@en ;
    schema:url <https://community.openlinksw.com/t/virtuoso-saas-managed-service-buyer-backup-and-restore-guide/6602> ;
    schema:author <http://dbpedia.org/resource/OpenLink_Software> ;
    schema:publisher <http://dbpedia.org/resource/OpenLink_Software> ;
    schema:datePublished "2026-10-20"^^xsd:date ;
    schema:isPartOf :buyerGuideSeries ;
    schema:hasPart :backupHowTo, :backupFaqSection ;
    prov:wasGeneratedBy <https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/kg-generator#this>,
        <https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/rdf-infographic-skill#this> .

# ── Backup & Restore HowTo ───────────────────────────────────────────────────

:backupHowTo a schema:HowTo ;
    schema:name "Backup & Restore Runbook"@en ;
    schema:description "Five phases take the buyer from prerequisites through an online backup to a seller-admin controlled restore and post-restore validation."@en ;
    schema:step :backupStep1, :backupStep2, :backupStep3, :backupStep4, :backupStep5 .

:backupStep1 a schema:HowToStep ;
    schema:position 1 ;
    schema:name "Before You Start"@en ;
    schema:text "You need buyer portal access, a running Virtuoso instance, buyer AWS IAM credentials with the one-time shell-access policy, and AWS CLI v2 with the Session Manager plugin. Use the tenant-specific script from the portal; never reuse a script from another buyer, instance, or environment."@en .

:backupStep2 a schema:HowToStep ;
    schema:position 2 ;
    schema:name "Run an Online Backup"@en ;
    schema:text "Sign in to the buyer portal, open Instances and select the running instance, then open Backup & Recovery and copy or download the Run online backup script. Run it in a terminal configured with the buyer IAM user or role and wait for it to complete. The script assumes the scoped ECS Exec role, configures the backup directory, runs backup_online('virtuoso_#', ...), starts a Fargate sync task to durable S3, and reports success only on exit code 0."@en .

:backupStep3 a schema:HowToStep ;
    schema:position 3 ;
    schema:name "Verify the Backup"@en ;
    schema:text "A successful script reports the durable S3 backup prefix. Record the instance ID and project name, the completion date and UTC time, the backup prefix or backup-set timestamp, and the script output confirming the S3 sync. The S3 bucket is managed by OpenLink; do not alter, delete, or replace objects in the managed prefix."@en .

:backupStep4 a schema:HowToStep ;
    schema:position 4 ;
    schema:name "Request a Restore"@en ;
    schema:text "A restore is not online: it replaces the active database and can discard later changes. Submit a support request with the buyer AWS account ID and portal email, instance ID and project name, the backup date/time or prefix to restore, explicit authorization, outage confirmation, and a technical contact. OpenLink verifies ownership, creates a rollback copy, stops the tenant, restores the set, restarts Virtuoso, and confirms the result. Do not delete the instance to request a restore."@en .

:backupStep5 a schema:HowToStep ;
    schema:position 5 ;
    schema:name "Validate After a Restore"@en ;
    schema:text "After OpenLink confirms completion, open the instance in the portal, confirm status running and health healthy, verify the expected database content in HTTPS Conductor, run an application-level or SQL validation, and run a new online backup if the restored state must be protected immediately."@en .

# ── Backup & Restore troubleshooting FAQ ─────────────────────────────────────

:backupFaqSection a schema:FAQPage ;
    schema:name "Backup & Restore Troubleshooting"@en ;
    schema:description "The four situations a buyer meets most often when running backups or requesting a restore."@en ;
    schema:mainEntity :bq1, :bq2, :bq3, :bq4 ;
    schema:isPartOf :backupRestoreGuide .

:bq1 a schema:Question ;
    schema:name "The Backup & Recovery section is missing"@en ;
    schema:acceptedAnswer :ba1 .
:ba1 a schema:Answer ;
    schema:text "The instance may still be provisioning, stopped, or missing required backup metadata. Confirm it is running and healthy; if the section does not appear, contact OpenLink support with the instance ID."@en .

:bq2 a schema:Question ;
    schema:name "The backup script reports no running ECS task"@en ;
    schema:acceptedAnswer :ba2 .
:ba2 a schema:Answer ;
    schema:text "Start the instance from its detail page, wait until its health is healthy, then rerun a newly copied script from the buyer portal."@en .

:bq3 a schema:Question ;
    schema:name "The script reports an AWS access error"@en ;
    schema:acceptedAnswer :ba3 .
:ba3 a schema:Answer ;
    schema:text "Use a buyer IAM user or role, not AWS root credentials. Confirm the one-time buyer shell-access policy is attached and use the latest script from the instance detail page."@en .

:bq4 a schema:Question ;
    schema:name "I need a different recovery point"@en ;
    schema:acceptedAnswer :ba4 .
:ba4 a schema:Answer ;
    schema:text "Do not run an older script or modify the generated restore guidance. Request a seller-admin restore and identify the desired backup date/time in the support request."@en .

# ── Backup & Restore glossary terms (added to the shared DefinedTermSet) ─────

:glossarySection schema:hasDefinedTerm :termOnlineBackup, :termBackupChain,
    :termDurableS3Prefix, :termSellerAdminRestore, :termRollbackCopy, :termFargateSyncTask .

:termOnlineBackup a schema:DefinedTerm ;
    schema:name "Online backup"@en ;
    schema:description "An online (hot) Virtuoso backup run from the buyer portal while the instance stays running, via backup_online()."@en ;
    schema:inDefinedTermSet :glossarySection .

:termBackupChain a schema:DefinedTerm ;
    schema:name "Backup chain"@en ;
    schema:description "The full backup established by the first successful run, followed by per-instance daily incremental backups."@en ;
    schema:inDefinedTermSet :glossarySection .

:termDurableS3Prefix a schema:DefinedTerm ;
    schema:name "Durable S3 prefix"@en ;
    schema:description "The OpenLink-managed S3 location that holds the synced backup set; buyers must not alter, delete, or replace its objects."@en ;
    schema:inDefinedTermSet :glossarySection .

:termSellerAdminRestore a schema:DefinedTerm ;
    schema:name "Seller-admin restore"@en ;
    schema:description "A controlled restore performed only by OpenLink seller administrators after explicit buyer authorization, replacing the active database and requiring a service outage."@en ;
    schema:inDefinedTermSet :glossarySection .

:termRollbackCopy a schema:DefinedTerm ;
    schema:name "Rollback copy"@en ;
    schema:description "A copy of the current database files created before a restore, retained for the configured period."@en ;
    schema:inDefinedTermSet :glossarySection .

:termFargateSyncTask a schema:DefinedTerm ;
    schema:name "Fargate sync task"@en ;
    schema:description "The scoped AWS Fargate task the backup script starts to copy the backup set to durable S3."@en ;
    schema:inDefinedTermSet :glossarySection .
