J'utilise TopBraid Free Edition pour créer des ontologies OWL avec des règles SPIN. Je charger les règles de l'ontologie et SPIN dans Sesame OpenRDF Workbench:Quand une règle SPIN: fonctionne-t-elle?
Application Name OpenRDF Workbench
Version 4.1.2
Runtime Information
Operating System Windows 8.1 6.3 (amd64)
Java Runtime Oracle Corporation Java HotSpot(TM) 64-Bit Server VM (1.8.0_91)
Process User Greg
Memory
Used 646 MB
Maximum 3463 MB
J'ai créé une ontologie de test simple. Il a une classe avec une règle SPIN et une propriété de type de données.
CONSTRUCT {
?this BugReproduction:hasTimeStamp ?timeStamp .
}
WHERE {
BIND (now() AS ?timeStamp) .
}
La règle de SPIN ajoute un horodatage xsd:dateTime
à l'instance de test de ma classe de test. Voici le RDF pour l'ontologie de test complet, y compris ma classe, propriété de type de données, et la règle (courte):
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:sp="http://spinrdf.org/sp#"
xmlns:BugReproduction="http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproduction#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:spin="http://spinrdf.org/spin#"
xmlns:spl="http://spinrdf.org/spl#"
xmlns:arg="http://spinrdf.org/arg#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xml:base="http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproduction">
<owl:Ontology rdf:about="">
<owl:imports rdf:resource="http://spinrdf.org/spl"/>
<owl:versionInfo rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>Created with TopBraid Composer</owl:versionInfo>
</owl:Ontology>
<owl:Class rdf:ID="TimeStampBug">
<rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
<spin:rule>
<sp:Construct>
<sp:templates rdf:parseType="Collection">
<rdf:Description>
<sp:object rdf:parseType="Resource">
<sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>timeStamp</sp:varName>
</sp:object>
<sp:predicate>
<owl:DatatypeProperty rdf:ID="hasTimeStamp"/>
</sp:predicate>
<sp:subject rdf:resource="http://spinrdf.org/spin#_this"/>
</rdf:Description>
</sp:templates>
<sp:where rdf:parseType="Collection">
<sp:Bind>
<sp:expression>
<sp:now/>
</sp:expression>
<sp:variable rdf:parseType="Resource">
<sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>timeStamp</sp:varName>
</sp:variable>
</sp:Bind>
</sp:where>
</sp:Construct>
</spin:rule>
</owl:Class>
<owl:DatatypeProperty rdf:about="#hasTimeStamp">
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
</owl:DatatypeProperty>
</rdf:RDF>
<!-- Created with TopBraid -->
Donc, effacer mon dépôt SPIN dans Sesame et utiliser la commande Modifier/Ajouter de la table de travail (avec la « base d'utilisation URI comme identificateur de contexte "case non cochée ce qui est important pour éviter un bug). Puis-je utiliser une requête de mise à jour SPARQL pour créer une instance de test de ma classe:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX sxxicc: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/SXXIComplianceCheck#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX sp: <http://spinrdf.org/sp#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX smf: <http://topbraid.org/sparqlmotionfunctions#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX spl: <http://spinrdf.org/spl#>
PREFIX spin: <http://spinrdf.org/spin#>
PREFIX arg: <http://spinrdf.org/arg#>
PREFIX SXXIComplianceCheckIndividuals: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/SXXIComplianceCheckIndividuals#>
PREFIX sxxicci: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/SXXIComplianceCheckIndividuals#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX bugs: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproduction#>
PREFIX bugsi: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#>
INSERT DATA {
bugsi:aTimeStampBug_test1 a bugs:TimeStampBug .
}
J'explorons alors le bugsi résultant: individuel aTimeStampBug_test1, pour trouver le SPIN: règle a été exécutée à plusieurs reprises et produit plusieurs horodatages. Le nombre d'horodatages varie d'un test à l'autre. Voici un résultat exemple:
Subject
Predicate
Object
Context
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
BugReproduction:hasTimeStamp
2016-07-11T20:56:58.571-05:00
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
BugReproduction:hasTimeStamp
2016-07-11T20:56:58.592-05:00
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
BugReproduction:hasTimeStamp
2016-07-11T20:56:58.594-05:00
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
BugReproduction:hasTimeStamp
2016-07-11T20:56:58.595-05:00
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
BugReproduction:hasTimeStamp
2016-07-11T20:56:58.596-05:00
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
BugReproduction:hasTimeStamp
2016-07-11T20:56:58.597-05:00
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
BugReproduction:hasTimeStamp
2016-07-11T20:56:58.598-05:00
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
BugReproduction:hasTimeStamp
2016-07-11T20:56:58.599-05:00
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
BugReproduction:hasTimeStamp
2016-07-11T20:56:58.600-05:00
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
BugReproduction:hasTimeStamp
2016-07-11T20:56:58.601-05:00
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
BugReproduction:hasTimeStamp
2016-07-11T20:56:58.602-05:00
Alors, mon SPIN: règle a été exécutée à plusieurs reprises pour une instanciation de la classe. Combien de fois une règle SPIN: devrait-elle fonctionner pour une instanciation d'une classe? Je pensais que cela ne fonctionnerait qu'une fois, mais il semble que je me trompe.
Vous feriez peut-être mieux de poser cette question sur le groupe d'utilisateurs rdf4j, ou postez le problème en tant que problème de github. –
Il ne devrait être exécuté qu'une fois par membre de la classe. – scotthenninger
Merci @scotthenninger. Je voulais confirmer cela avant de prendre ceci à github comme un rapport de bug pour rdf4j. Si j'obtiens une réponse utile, je l'afficherai ici pour l'exhaustivité de ce dossier. –