LDP in Virtuoso - Simple Curl Examples

Simple curl examples showing Virtuoso's support for LDP (Linked Data Platform) Basic Containers.

Changes to resources made through the LDP REST interface are mirrored in the Conductor WebDAV UI.

Contents


1: Basic container lookup (GET on an LDP-BC)

Request - Basic container retrieval


curl -iH "Accept: text/turtle, */*;q=0.1" -u {username}:{password} "http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/"

Response - Basic container retrieval

Note: The container was created prior to these tests and so was not empty.
HTTP/1.1 200 OK
Server: Virtuoso/07.10.3211 (Linux) x86_64-redhat-linux-gnu  VDB
Connection: Keep-Alive
Date: Mon, 21 Jul 2014 13:57:27 GMT
Accept-Ranges: bytes
Content-Type: text/turtle
MS-Author-Via: DAV, SPARQL
Allow: GET,HEAD,POST,PUT,DELETE,OPTIONS,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK,TRACE,PATCH
Accept-Patch: application/sparql-update
Accept-Post: text/turtle,text/n3,text/nt
Vary: Accept,Origin,If-Modified-Since,If-None-Match
Link: <http://www.w3.org/ns/ldp#Resource>; rel="type"
Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type"
Link: <?p=1>; rel="first"
Link: <?p=1>; rel="last"
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test,meta>; rel="meta"
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test,acl>; rel="acl"
ETag: a260c996d5e4c845ba49d29a21fcc754
X-SPARQL-default-graph: http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/
Content-Length: 705

@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf:   <http://xmlns.com/foaf/0.1/> .
@prefix ldp:    <http://www.w3.org/ns/ldp#> .
@prefix rdfs:   <http://www.w3.org/2000/01/rdf-schema#> .

<http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/foaf.ttl>
    rdf:type    foaf:PersonalProfileDocument , ldp:Resource , rdfs:Resource .
<http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/>
    rdf:type    ldp:Container , ldp:BasicContainer ;
    ldp:contains    <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/foaf.ttl> , <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos/> .
<http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos/>
    rdf:type    ldp:Container , ldp:BasicContainer .

Basic container lookup in SPARQL - Querying the LDP-BC graph


sparql SELECT * FROM <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/> WHERE { ?s ?p ?o }

returns


http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/     http://www.w3.org/1999/02/22-rdf-syntax-ns#type     http://www.w3.org/ns/ldp#Container
http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/     http://www.w3.org/1999/02/22-rdf-syntax-ns#type     http://www.w3.org/ns/ldp#BasicContainer
http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/     http://www.w3.org/ns/ldp#contains     http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/foaf.ttl
http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/     http://www.w3.org/ns/ldp#contains     http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos/

2: Creating an RDF resource (POST an RDF resource to an LDP-BC)

Request - Creating an RDF resource


curl -iX POST --data-binary @ldp-test-data/alice_foaf_profile.ttl -u {username}:{password} -H 'Content-Type: text/turtle' -H 'Slug:alice_foaf' 'http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/'

Request Data - Creating an RDF resource

File: alice_foaf_profile.ttl
@prefix dc: <http://purl.org/dc/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> a foaf:PersonalProfileDocument;
    foaf:primaryTopic <#me> ;
    dc:title 'Alice?s FOAF file' .

<#me> a foaf:Person;
    foaf:name 'Alice Smith'  . 

Response - Creating an RDF resource


HTTP/1.1 201 Created
Server: Virtuoso/07.10.3211 (Linux) x86_64-redhat-linux-gnu  VDB
Connection: Keep-Alive
Date: Mon, 21 Jul 2014 14:01:18 GMT
Accept-Ranges: bytes
Location: http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/alice_foaf
MS-Author-Via: DAV, SPARQL
Allow: GET,HEAD,POST,PUT,DELETE,OPTIONS,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK,TRACE,PATCH
Accept-Patch: application/sparql-update
Accept-Post: text/turtle,text/n3,text/nt
Vary: Accept,Origin,If-Modified-Since,If-None-Match
Link: <http://www.w3.org/ns/ldp#Resource>; rel="type"
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/alice_foaf,meta>; rel="meta"
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/alice_foaf,acl>; rel="acl"
Content-Type: text/turtle
Content-Length: 194

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><HTML><HEAD><TITLE>201 Created</TITLE></HEAD><BODY><H1>Created</H1>Resource /DAV/home/imitko/ldp-test/alice_foaf has been created.</BODY></HTML>

Note: A second resource <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_foaf> was then created in the same way using:


curl -iX POST --data-binary @ldp-test-data/bob_foaf_profile.ttl -u {username}:{password} -H 'Content-Type: text/turtle' -H 'Slug: bob_foaf' 'http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/'

with data file bob_foaf_profile.ttl


@prefix dc: <http://purl.org/dc/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> a foaf:PersonalProfileDocument;
    foaf:primaryTopic <#me> ;
    dc:title 'Bob?s FOAF file' .

<#me> a foaf:Person;
    foaf:name 'Bob Tate'  .


3: Request - Basic container retrieval after resource creation

Request


curl -iH "Accept: text/turtle, */*;q=0.1" -u {username}:{password} "http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/"

Response


HTTP/1.1 200 OK
Server: Virtuoso/07.10.3211 (Linux) x86_64-redhat-linux-gnu  VDB
Connection: Keep-Alive
Date: Mon, 21 Jul 2014 15:35:15 GMT
Accept-Ranges: bytes
Content-Type: text/turtle
MS-Author-Via: DAV, SPARQL
Allow: GET,HEAD,POST,PUT,DELETE,OPTIONS,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK,TRACE,PATCH
Accept-Patch: application/sparql-update
Accept-Post: text/turtle,text/n3,text/nt
Vary: Accept,Origin,If-Modified-Since,If-None-Match
Link: <http://www.w3.org/ns/ldp#Resource>; rel="type"
Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type"
Link: <?p=1>; rel="first"
Link: <?p=1>; rel="last"
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test,meta>; rel="meta"
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test,acl>; rel="acl"
ETag: a260c996d5e4c845ba49d29a21fcc754
X-SPARQL-default-graph: http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/
Content-Length: 929

@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf:    <http://xmlns.com/foaf/0.1/> .
@prefix ldp:    <http://www.w3.org/ns/ldp#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ns4:    <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/> .

<http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/foaf.ttl>
    rdf:type    foaf:PersonalProfileDocument , ldp:Resource , rdfs:Resource .
ns4:
    rdf:type    ldp:Container , ldp:BasicContainer ;
    ldp:contains    <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/foaf.ttl> , ns4:alice_foaf , <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos/> , ns4:bob_foaf .
ns4:alice_foaf
    rdf:type    foaf:PersonalProfileDocument , ldp:Resource , rdfs:Resource .
<http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos/>
    rdf:type    ldp:Container , ldp:BasicContainer .
ns4:bob_foaf
    rdf:type    foaf:PersonalProfileDocument , ldp:Resource , rdfs:Resource .

Both resources created by Test 2 are listed, confirming the resource creation was successful.


4: Updating a resource with PATCH and Sparql-Update

Pre-update - Resource description


curl -H -"Accept: text/turtle" -u {username}:{password} http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_foaf

Response - Resource description


@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf:    <http://xmlns.com/foaf/0.1/> .
@prefix owl:    <http://www.w3.org/2002/07/owl#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ns4:    <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/> .
@prefix ldp:    <http://www.w3.org/ns/ldp#> .
@prefix dcterms:    <http://purl.org/dc/terms/> .
@prefix ns7:    <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_foaf#> .

foaf:PersonalProfileDocument
    rdf:type    owl:Class , rdfs:Class .
rdfs:Resource
    rdf:type    owl:Class , rdfs:Class .
foaf:Person
    rdf:type    owl:Class , rdfs:Class .
ns4:bob_foaf
    rdf:type    foaf:PersonalProfileDocument , ldp:Resource , rdfs:Resource ;
    dcterms:title    "Bob\u2019s FOAF file" ;
    foaf:primaryTopic    ns7:me .
ns7:me
    rdf:type    foaf:Person ;
    foaf:name    "Bob Tate" .

Request - Resource update


curl -iX PATCH --data-binary @ldp-test-data/bob_foaf_profile_update.sparul -u {username}:{password} -H "Content-Type: application/sparql-update" http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_foaf

Request Data - Resource update

File: bob_foaf_profile_update.sparul
prefix foaf: <http://xmlns.com/foaf/0.1/> 
INSERT DATA {
  <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_foaf#me> foaf:img <http://example.org/bob/avatar> .
}   

Response - Resource update


HTTP/1.1 204 No Content
Server: Virtuoso/07.10.3211 (Linux) x86_64-redhat-linux-gnu  VDB
Connection: Keep-Alive
Date: Mon, 21 Jul 2014 15:41:30 GMT
Accept-Ranges: bytes
X-SPARQL-default-graph: http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_foaf
Content-Type: application/sparql-results+xml; charset=UTF-8
Content-Length: 489

Post-update - Resource description


@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf:    <http://xmlns.com/foaf/0.1/> .
@prefix owl:    <http://www.w3.org/2002/07/owl#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ns4:    <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/> .
@prefix ldp:    <http://www.w3.org/ns/ldp#> .
@prefix dcterms:    <http://purl.org/dc/terms/> .
@prefix ns7:    <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_foaf#> .
@prefix ns8:    <http://example.org/bob/> .

foaf:PersonalProfileDocument
    rdf:type    owl:Class , rdfs:Class .
rdfs:Resource
    rdf:type    owl:Class , rdfs:Class .
foaf:Person
    rdf:type    owl:Class , rdfs:Class .
ns4:bob_foaf
    rdf:type    foaf:PersonalProfileDocument , ldp:Resource , rdfs:Resource ;
    dcterms:title    "Bob\u2019s FOAF file" ;
    foaf:primaryTopic    ns7:me .
ns7:me
    rdf:type    foaf:Person ;
    foaf:img    ns8:avatar ;
    foaf:name    "Bob Tate" .


5: Creating a non-RDF (binary) resource (POST an image to an LDP-BC)

Test without slug header, using full target resource path

Request - LDP-NR creation


curl -iX PUT --data-binary @ldp-test-data/bob_avatar.png -u {username}:{password} -H "Content-Type: image/png" 'http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_avatar'

Note: Using a slug header to suggest the resource name when creating a resource is not supported. The full resource URL must be provided.

Response - LDP-NR creation


HTTP/1.1 201 Created
Server: Virtuoso/07.10.3211 (Linux) x86_64-redhat-linux-gnu  VDB
Connection: close
Date: Tue, 22 Jul 2014 11:28:44 GMT
Accept-Ranges: bytes
Content-Type: image/png
Content-Length: 194

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><HTML><HEAD><TITLE>201 Created</TITLE></HEAD><BODY><H1>Created</H1>Resource /DAV/home/imitko/ldp-test/bob_avatar has been created.</BODY></HTML>


6: Creating a child container

Request - Child container creation (Method 1)


curl -iH "Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel=?type?" -d '' -X POST -HSlug:photos_of_bob -HContent-Type:text/turtle -u {username}:{password} "http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/"

Response - Child container creation (Method 1)


HTTP/1.1 201 Created
Server: Virtuoso/07.10.3211 (Linux) x86_64-redhat-linux-gnu  VDB
Connection: Keep-Alive
Date: Mon, 21 Jul 2014 16:02:52 GMT
Accept-Ranges: bytes
Location: http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos_of_bob/
MS-Author-Via: DAV, SPARQL
Allow: GET,HEAD,POST,PUT,DELETE,OPTIONS,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK,TRACE,PATCH
Accept-Patch: application/sparql-update
Accept-Post: text/turtle,text/n3,text/nt
Vary: Accept,Origin,If-Modified-Since,If-None-Match
Link: <http://www.w3.org/ns/ldp#Resource>; rel="type"
Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type"
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos_of_bob,meta>; rel="meta"
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos_of_bob,acl>; rel="acl"
Content-Type: text/turtle
Content-Length: 198

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><HTML><HEAD><TITLE>201 Created</TITLE></HEAD><BODY><H1>Created</H1>Resource /DAV/home/imitko/ldp-test/photos_of_bob/ has been created.

Post-creation: Parent container description - Request


curl -iH "Accept: text/turtle, */*;q=0.1" -u {username}:{password} "http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/"

Post-creation: Parent container description - Response

The response includes:


@prefix ns4:    <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/> .
<http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos_of_bob/>
    rdf:type    ldp:Container , ldp:BasicContainer .
ns4:
    rdf:type    ldp:Container , ldp:BasicContainer ;
    ldp:contains    <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos_of_bob/> , <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/foaf.ttl> , ns4:alice_foaf , <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos/> , ns4:bob_foaf .

Request - Child container creation (Method 2)


curl --silent -iX POST --data-binary @ldp-test-data/alice_photo_container_creation.ttl -u {username}:{password} -H "Content-Type: text/turtle" -H "Slug: photos_of_alice" -H "Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel='type'" "http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/"

Request Data - Child container creation (Method 2)

File: alice_photo_container_creation.ttl
@prefix ldp: <http://www.w3.org/ns/ldp#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
 
<> a ldp:Container, ldp:BasicContainer;
   dcterms:title "Photos of Alice" ; 
   dcterms:description "This container will contain photos of Alice." .

Post-creation: Child container description - Request


curl -iH "Accept: text/turtle, */*;q=0.1" -u {username}:{password} "http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos_of_alice/"

Post-creation: Child container description - Response


HTTP/1.1 200 OK
Server: Virtuoso/07.10.3211 (Linux) x86_64-redhat-linux-gnu  VDB
Connection: Keep-Alive
Date: Mon, 21 Jul 2014 16:24:41 GMT
Accept-Ranges: bytes
Content-Type: text/turtle
MS-Author-Via: DAV, SPARQL
Allow: GET,HEAD,POST,PUT,DELETE,OPTIONS,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK,TRACE,PATCH
Accept-Patch: application/sparql-update
Accept-Post: text/turtle,text/n3,text/nt
Vary: Accept,Origin,If-Modified-Since,If-None-Match
Link: <http://www.w3.org/ns/ldp#Resource>; rel="type"
Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type"
Link: <?p=1>; rel="first"
Link: <?p=1>; rel="last"
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos_of_alice,meta>; rel="meta"
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos_of_alice,acl>; rel="acl"
ETag: 55e21d87c87434c647ac893badd6bbce
X-SPARQL-default-graph: http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos_of_alice/
Content-Length: 377

@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ldp:    <http://www.w3.org/ns/ldp#> .
@prefix dcterms:    <http://purl.org/dc/terms/> .

<http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/photos_of_alice/>
    rdf:type    ldp:Container , ldp:BasicContainer ;
    dcterms:title    "Photos of Alice" ;
    dcterms:description    "This container will contain photos of Alice." .


7: Deleting a resource

Request - Resource deletion


curl -iX DELETE -u {username}:{password} 'http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_foaf'

Response - Resource deletion


HTTP/1.1 204 No Content
Server: Virtuoso/07.10.3211 (Linux) x86_64-redhat-linux-gnu  VDB
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Date: Fri, 25 Jul 2014 12:25:30 GMT
Accept-Ranges: bytes
MS-Author-Via: DAV, SPARQL
Allow: GET,HEAD,POST,PUT,DELETE,OPTIONS,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK,TRACE,PATCH
Accept-Patch: application/sparql-update
Accept-Post: text/turtle,text/n3,text/nt
Vary: Accept,Origin,If-Modified-Since,If-None-Match
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_foaf,meta>; rel="meta"
Link: <http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_foaf,acl>; rel="acl"
Content-Length: 0

Post-deletion: Resource description - Request


curl -iH -"Accept: text/turtle" -u {username}:{password} 'http://ods-qa.openlinksw.com/DAV/home/imitko/ldp-test/bob_foaf'

Post-deletion: Resource description - Response


HTTP/1.1 404 Not Found
Server: Virtuoso/07.10.3211 (Linux) x86_64-redhat-linux-gnu  VDB
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Date: Fri, 25 Jul 2014 12:27:08 GMT
Accept-Ranges: bytes
Content-Length: 218

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
  <head>
    <title>404 Not Found</title>
  </head>
  <body>
    <h1>Not found</h1>
    Resource /DAV/home/imitko/ldp-test/bob_foaf not found.
  </body>