2011-11-27 2 views
3

Je suis en train de trouver un moyen de déduire/une propriété en fonction se propager sur les types pour éviter une collision de nom:RDF - Comment faire un changement de propriété transitif, basé sur le type rdf:?

:AOrder :Store :AStore ; 
     a :OrderType ; 
     :user :AUser . 

:AStore :name "Store Name"; 
     a :StoreType 

:AUser :name "Some User"; 
     a :UserType 

Sur la base des triplets ci-dessus, je voudrais conclure plusieurs autres triplets:

:AOrder :storeName "Store Name" . 
:AOrder :userName "Some User" . 

Comment est-ce que je peux faire ceci? Pour info, j'utilise actuellement Bigdata et Sesame. Un moyen serait d'utiliser SPIN, mais il ne semble pas que Bigdata + Sésame l'aient; On dirait que Jena est la seule chose avec quelque chose de comparable.

Répondre

1

Vous pouvez exprimer à l'aide d'une opération de mise à jour SPARQL:

INSERT { 
    ?x :storeName ?store_name ; 
    :userName ?user_name . 
} 
WHERE { 
    ?x a :OrderType; 
    :Store [ :name ?store_name ] ; 
    :user [ :name ?user_name ] . 
} 

Exécuter cette opération chaque fois que votre magasin est mis à jour (si vous travaillez vous localement pouvez utiliser un RepositoryListener pour intercepter les événements de changement) et les triplets vous vouloir sera inséré.

Alternativement, regardez certains des outils de raisonnement personnalisés disponibles pour Sésame. Je ne suis pas sûr que Bigdata supporte un raisonneur personnalisé, mais vous pouvez jeter un oeil à this custom rule-based reasoner extension (bien qu'il soit légèrement dépassé). Ou jetez un oeil à OWLIM, qui est un backend Sésame avec des capacités de raisonnement OWL, qui prend également en charge les règles personnalisées.

+0

Merci pour votre réponse, j'ai fini par aller avec Jena + Jena Rules. Mais de toute façon, savez-vous comment le raisonneur personnalisé que vous avez posté traite de l'implication/des triplets raisonnés? Est-ce qu'il suffit d'ajouter tout à la boutique existante, ce qui rend impossible de dire ce qui est inféré et quelles sont les données de base? –

+0

Non, parce que tout d'abord, Sésame prend en charge une distinction entre les triplets explicites et inférés au niveau de l'API, de sorte que vous serez toujours en mesure de dire qui est qui. En outre, le raisonneur personnalisé utilise un contexte distinct pour les triplets déduits. –