La differenza principale tra i database del grafico e i negozi tripli è il modo in cui modellano il grafico. In un negozio triplo (o quad store), i dati tendono ad essere molto atomico. Ciò che intendo è che i "nodi" nel grafico tendono ad essere tipi di dati primitivi come stringa, intero, data, ecc. Le relazioni collegano insieme le primitive, e quindi "l'unità del discorso" in un triplo store è una tripla, e non un nodo o una relazione, tipicamente.
Al contrario, altri database di grafici sono spesso denominati "archivi di proprietà" perché i nodi sono contenitori di dati che corrispondono a oggetti in un dominio. Un nodo rappresenta un oggetto e ha proprietà; agiscono come tipi di dati ricchi specificati dai modellatori di grafici, più che semplici tipi di dati primitivi. In questi database di grafici, i nodi e le relazioni sono "l'unità del discorso".
Diciamo che ho una persona chiamata "Bob" che conosce "Susan".In RDF, sarebbe qualcosa di simile:
<http://example.org/person/1> :hasName "Bob".
<http://example.org/person/1> foaf:knows <http://example.org/person/2>.
<http://example.org/person/2> :hasName "Susan".
In un database grafico come Neo4j, sarebbe questo:
(a:Person {name: "Bob"})-[:KNOWS]->(b:Person {name: "Susan"})
Si noti che in RDF, è 3 rapporti, ma solo uno di quei rapporti in realtà esprime semantica tra due entità. Le altre due relazioni sono solo proprietà di tracciamento di una singola entità di livello superiore (la persona). In neo4j, è la relazione tra due nodi, con ogni nodo che ha una proprietà. In RDF si tende ad identificare le cose tramite URI, in neo4j si tratta di un oggetto di database che ottiene automaticamente un ID di database. Questo è ciò che intendo per la differenza tra un negozio più atomico/primitivo (negozi tripli) e un grafico di proprietà più ricco.
I CDR e i negozi tripli sono in gran parte costruiti per i tipi di sfide architettoniche che si sono incontrati con il web semantico. Ad esempio, il namespace XML è integrato nell'ipotesi architettonica secondo la quale mescolerai e abbinerai l'uso di molti diversi vocabolari e spazi dei nomi. (Giusto, c'è un'ipotesi di "rete semantica"). Quindi in SPARQL e RDF vedrai in genere almeno l'uso di xsd
, rdf
e rdfs
spazi dei nomi contemporaneamente e probabilmente anche owl
, skos
e molti altri. SPARQL e RDF/RDFS hanno anche molti hook e funzioni che sono esplicitamente disponibili per rendere più semplici le inferenze ontologiche. Tendi ad identificare le cose con gli URI come un modo di "namespacing i tuoi identificatori" ma anche perché alcune persone potrebbero voler de-referenziare l'URI ... di nuovo l'assunto qui è un ampio accordo di condivisione dei dati tra molte parti.
esercizi struttura di contrasto sono calettati verso diversi casi di utilizzo, come modellazione flessibile dei dati entro un modello/namespace, mapping tra oggetti e grafici per la persistenza di applicazioni aziendali, rapida evolvability, e così via. Tendi ad identificare le cose con il tuo schema (o un ID interno del database). Un numero intero a incremento automatico potrebbe non essere la migliore forma di ID per qualsiasi utente casuale sul web (e certamente non possono essere de-referenziati come gli URL) ma potrebbe non essere il primo pensiero per un'applicazione interna all'azienda.
Quindi quale è meglio? Il formato di triplo store più atomico o un grafico di proprietà avanzate? Hai bisogno di mescolare e abbinare molti vocabolari diversi in una query o in un modello di dati? Hai bisogno di creare una ontologia OWL o fare un'inferenza? Hai bisogno di serializzare un mucchio di oggetti java in memoria in un database? Hai bisogno di fare un attraversamento veloce di lunghi percorsi? Questi tipi di domande guiderebbero la tua selezione.
I grafici sono grafici, entrambi fanno grafici e quindi non credo ci siano molte differenze in termini di ciò che possono rappresentare, o come si va a pensare a un problema in "termini del grafico". Le differenze si riducono all'architettura sotto il cofano e a quali tipi di casi d'uso pensi di aver bisogno. Non ti dirò che uno è migliore dell'altro, ma scegli saggiamente.
"tripli negozi non archiviano altro che tripli" Molti (la maggior parte?) Negozi tripli (ad esempio, per RDF) sono in realtà * quad * negozi, poiché hanno un concetto (da dataset SPARQL) di * nomi grafici *. Poiché ogni tripla esiste all'interno di un grafico, l'elemento fondamentale è in realtà ** (grafico, soggetto, predicato, oggetto) **. –
"Triple/Collection 1: store triple (2 nodi, 1 relazione)" L'ordine è importante, però. Non è un vantaggio non orientato, quindi è in realtà ** (fonte, relazione, obiettivo) ** o, più comunemente, ** (soggetto, predicato (o proprietà), oggetto) **. –
"Perché mai vorresti archiviarlo solo come triple, perdendo [sic] tutte le informazioni sulle connessioni?" Non sono sicuro di cosa intendi qui.La proprietà è identificata da un URI/IRI, che è universale quanto un UID, tranne per il fatto che è qualcosa che potrebbe essere più facile da ricordare, potrebbe essere deferenziabile (in modo da ottenere maggiori informazioni su di esso, ecc.) E l'oggetto e l'oggetto sono in genere URI o dati letterali. Quali informazioni sulle connessioni sono perse? –