2017-08-13 3 views
-1

J'ai une application qui demande des objets JSON à partir de diverses autres applications via leurs API REST. La réponse de toute application est livrée dans le format suivant:effectuer l'alignement virtuel entre des objets JSON ontologiquement annotés

{ 
data : { 
     key1: { val: value, defBy: "ontology class"} 
     key2: ..., 
    } 
} 

Le code suivant représente un objet de App1:

{ 
data : { 
     key1: { val: "98404506-385576361", defBy: "abc:SHA-224"} 
    } 
} 

Le code suivant représente un objet de App2:

{ 
    data : { 
      key2: { val: "495967838-485694812", defBy: "xyz:SHA3-224"} 
     } 
    } 

Ici, DefBy fait référence à l'algorithme utilisé pour chiffrer la chaîne dans val. Lorsque ma demande reçoit ces objets, il analyse le JSON et convertit chaque kv dans l'objet en RDF tels que:

// For objects from App1: 
key1 rdf:type osba:key 
key1 osba:generatedBy abc:SHA-224 
... 
// For objects from App2 
key2 rdf:type osba:key 
key2 osba:generatedBy xyz:SHA3-224 

J'ai besoin d'interroger les données RDF générés d'une manière que je peux préciser si osba:generatedBy de tout clé appartient à la famille SHA, puis retourner le sujet en tant que résultat de requête valide, tels que: where {?k osba:generatedBy ???}

S'il vous plaît noter les points suivants:

  1. I infl eeive objets avec d'autres algorithmes de cryptage tels que MD5, etc

  2. Je ne sais pas à l'avance quel algorithme de cryptage sera utilisé par une nouvelle application rejoignant le réseau, ni ce qu'il utilise NS. Par exemple, dans les objets ci-dessus, l'un utilise abc: et l'autre utilise xyz:.

  3. Je ne peux pas utiliser le filtrage SPARQL parce que la valeur pourrait être SecureHashAlgorithm au lieu de SHA

Mon problème est que je ne peux pas définir une ontologie supérieure (référencée) à l'avance et la valeur stockée carte dans defBy: des objets entrants, parce que je ne sais pas à l'avance quelle ontologie est utilisée ni quel algorithme de chiffrement la valeur représente.

J'ai lu à propos de l'intégration automatique des ontologies, de l'alignement, de la cartographie, etc. mais je ne peux pas trouver la raison de ce concept à mon problème.

Des solutions?

+1

Pouvez-vous élaborer le point 3? Quels filtres as-tu essayés qui n'ont pas fonctionné? –

+0

J'ai essayé d'utiliser une fonction générique comme Sha * mais je ne peux pas résoudre le problème à cause de la raison exprimée dans P-3 –

+0

Sans une ontologie d'intégration, vous ne pouvez pas faire d'expansion de requête ou similaire. Évidemment, vous avez besoin d'un mappage des termes synonymes, sinon, vous ne pouvez pas écrire un filtre complet et correct. Et cela vaut pour tous les domaines. – AKSW

Répondre

0

3) je ne peux pas utiliser le filtrage SPARQL parce que la valeur pourrait être SecureHashAlgorithm au lieu de SHA

SPARQL filtration supports matching against regular expressions tel que défini par xpath. Ainsi, quelque chose le long de la ligne de

SELECT ?key 
WHERE { ?key osba:generatedBy ?generator 
     FILTER regex(?generator, "^s(ecure)?h(ash)?a(lgorithm)?.*", "i") } 

(Note: non testé) devrait faire le travail.Pour construire une bonne regex, je peux recommander

Dans le cas où cela est nécessaire: Vous pouvez convertir un IRI en une chaîne (pour faire correspondre) avec the str() function.

+0

J'ai besoin d'utiliser des expressions sémantiques pas régulières, puisque les chaînes peuvent changer quoi si le type entrant est \t FIPS PUB 180-4? le code de certification pour SHA3 –

+3

Qu'essayez-vous exactement de réaliser? Pouvez-vous mettre en place un petit exemple avec les données d'entrée et la sortie attendue? Si c'est seulement à propos de SHA référencé par "fips pub 180-4" alors juste l'inclure dans votre regex? –