2017-10-02 6 views
1

J'écris une requête SPARQL qui doit supprimer tous les triplets dans cette ressource.SPARQL Requête pour supprimer tous les nœuds vides dans une ressource

prefix oslc: <http://open-services.net/ns/core#> 
prefix example: <http://rdf.company.com/ns/something/net#> 
prefix xsd: <http://www.w3.org/2001/XMLSchema#> 
prefix dcterms: <http://purl.org/dc/terms/> 
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 

example:Resource2 
     a    oslc:ResourceShape ; 
     oslc:describes example:Resource2 ; 
     oslc:property [ a      oslc:Property ; 
          oslc:isMemberProperty true ; 
          oslc:name    "pgn" ; 
          oslc:occurs   oslc:Zero-or-one ; 
          oslc:valueType   xsd:integer ] ; 
     dcterms:title "Resource2"^^rdf:XMLLiteral . 

J'ai essayé:

DELETE 
    { ?s ?p ?o } 
    WHERE 
    { 
     ?s ?p ?o . 
     FILTER (?s IN (<http://rdf.company.com/ns/something/net#Resource2>)) 
    } 

Cependant, id ne supprime pas le nœud vide en son sein:

[ a      oslc:Property ; 
    oslc:isMemberProperty true ; 
    oslc:name    "pgn" ; 
    oslc:occurs   oslc:Zero-or-one ; 
    oslc:valueType   xsd:integer ] 

Il est assez évident que le filtre spécifie un sujet spécifique et la nœud vide n'a pas ce sujet.

Une idée comment puis-je supprimer le nœud vide aussi bien?

Répondre

0

J'espère que vous n'avez pas de nœuds vides imbriqués. Essayez ceci:

PREFIX example: <http://rdf.company.com/ns/something/net#> 

DELETE { 
    ?s ?p ?o . 
    ?o ?p1 ?o1 . 
} 
WHERE { 
    VALUES (?s) { (example:Resource2) } 
    ?s ?p ?o . 
    OPTIONAL { 
     ?o ?p1 ?o1 . 
     FILTER (isBlank(?o)) 
    } 
} 

Question connexe: Delete blank node from ontology through SPARQL UPDATE.