versioned_graph/commit
added schema files, started work on triple-based diffs
author | Jacco van Ossenbruggen |
---|---|
Fri Jul 6 09:45:09 2012 +0200 | |
committer | Jacco van Ossenbruggen |
Fri Jul 6 09:45:09 2012 +0200 | |
commit | a5b6638fb3ae1d3f2eb3e6d45944c6108855a1c0 |
tree | 6dda07f863ca303ec05a42ccbf9f37c0228d3b64 |
parent | 7cd74a374106559f210f7e7cc54010be77f28fe5 |
Diff style: patch stat
diff --git a/lib/graph_version.pl b/lib/graph_version.pl index ae48a63..fee3abc 100644 --- a/lib/graph_version.pl +++ b/lib/graph_version.pl @@ -8,11 +8,14 @@ gv_hash_uri/2, gv_compute_hash/2, gv_copy_graph/2, - gv_graph_triples/2 + gv_graph_triples/2, + gv_commit_property/2, + gv_diff/6 ]). :- use_module(library(semweb/rdf_db)). :- use_module(library(semweb/rdf_turtle_write)). +:- use_module(library(semweb/rdf_label)). :- use_module(library(settings)). :- rdf_register_ns(gv, 'http://semanticweb.cs.vu.nl/graph/version/'). @@ -93,6 +96,59 @@ gv_current_branch(Branch) :- rdf_global_id(localgit:Ref, Branch). +gv_commit_property(Commit, Prop) :- + Prop =.. [Local, Value], + rdf_global_id(gv:Local, RdfProp), + ( rdf(Commit, RdfProp, Value0, Commit) + -> literal_text(Value0, Value) + ; Value=in_git + ). + + +gv_diff(Commit1, Commit2, Changed, OnlyIn1, OnlyIn2, UnChanged) :- + gv_commit_property(Commit1, tree(Tree1)), + gv_commit_property(Commit2, tree(Tree2)), + gv_graph_triples(Tree1, Tree1Triples), + gv_graph_triples(Tree2, Tree2Triples), + gv_graphs_changed(Tree1Triples, Tree2Triples, + ChangedS, OnlyIn1, OnlyIn2, UnChanged), + gv_triples_changed(ChangedS, Changed). + +gv_triples_changed([], []). +gv_triples_changed([Head|Tail], [S-(Diff1,Diff2)|TailResult]) :- + Head = S-(B1,B2), + gv_graph_triples(B1, Triples1), + gv_graph_triples(B2, Triples2), + ord_intersection(Triples1, Triples2, Intersect, Diff2), + ord_intersection(Triples2, Triples1, Intersect, Diff1), + gv_triples_changed(Tail, TailResult). + +gv_graphs_changed([], [], [], [], [], []). +gv_graphs_changed([rdf(S1,_,_)|T], [], + Changed, [S1|OI1], OI2, Same) :- + gv_graphs_changed(T, [], Changed, OI1, OI2, Same). +gv_graphs_changed([], [rdf(S2,_,_)|T], + Changed, OI1, [S2|OI2], Same) :- + gv_graphs_changed(T, [], Changed, OI1, OI2, Same). +gv_graphs_changed([rdf(S1,P1,O1)|T1], [rdf(S2,P2,O2)|T2], + Changed, OI1, OI2, Same) :- + compare(C,S1,S2), + ( C == '<' + -> gv_graphs_changed(T1, [rdf(S2,P2,O2)|T2], + Changed, OI1t, OI2, Same), + OI1 = [S1|OI1t] + ; C == '>' + -> gv_graphs_changed([rdf(S1,P1,O1)|T1], T2, + Changed, OI1, OI2t, Same), + OI2 = [S2|OI2t] + ; ( O1 == O2 + -> gv_graphs_changed(T1, T2, Changed, OI1, OI2, Samet), + Same = [S1|Samet] + ; gv_graphs_changed(T1, T2, Changedt, OI1, OI2, Same), + Changed = [S1-(O1,O2)|Changedt] + ) + ). + %% gv_branch_head(+Branch, -Commit) is det. % % Commit is unified with the tip of branch Branch. @@ -106,6 +162,7 @@ gv_branch_head(Branch, Commit) :- rdf_global_id(localgit:Ref, Branch), directory_file_path(Dir, '.git', DotDir), directory_file_path(DotDir, Ref, RefHead), + exists_file(RefHead), read_file_to_codes(RefHead, Codes, []), atom_codes(Atom, Codes), % hash with newline sub_atom(Atom, 0, 40 ,1, Hash), @@ -159,8 +216,9 @@ gv_move_head_(NewHead) :- % * gv:parent to the previous commit % * gv:tree to the tree representation of the current % version graphs -% * dc:creator to Committer -% * dc:date to the current time +% * gv:creator to Committer +% * gv:comment to Comment +% * gv:date to the current time % % Todo: Fix MT issues, just a mutex is not sufficient. % Needs true git-like branching model? @@ -183,15 +241,15 @@ gv_resource_commit_(Graph, Committer, Comment, Commit) :- ( Comment = '' -> CommentPair = [] - ; CommentPair = [ po(rdfs:comment, literal(Comment)) ] + ; CommentPair = [ po(gv:comment, literal(Comment)) ] ), format_time(atom(TimeStamp), '%s %z', Now), RDFObject = [ po(rdf:type, gv:'Commit'), po(gv:parent, HEAD), po(gv:tree, NewTree), - po(dcterms:creator, Committer), - po(dcterms:date, literal(TimeStamp)) + po(gv:creator, Committer), + po(gv:date, literal(TimeStamp)) | CommentPair ], gv_hash_uri(TreeHash, NewTree), @@ -378,7 +436,8 @@ gv_graph_triples(Graph, Triples) :- gv_graph_triples(Graph, Triples) :- nonvar(Graph), var(Triples),!, - findall(rdf(S,P,O), rdf(S,P,O,Graph), Triples). + findall(rdf(S,P,O), rdf(S,P,O,Graph), Triples0), + sort(Triples0, Triples). %% my_hash_atom(+Codes, -Hash) is det. diff --git a/rdf/rdfgit.ttl b/rdf/rdfgit.ttl new file mode 100644 index 0000000..34a3188 --- /dev/null +++ b/rdf/rdfgit.ttl @@ -0,0 +1,24 @@ +@prefix : <http://semanticweb.cs.vu.nl/graph/version/> . +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +@prefix dc: <http://purl.org/dc/terms/> . +@prefix skos: <http://www.w3.org/2004/02/skos/core#> . + + +:VersionObject a rdfs:Class . + +:Commit a :VersionObject . + +:comment rdfs:subProperty rdfs:comment . + +:creator rdfs:subProperty dc:creator . + +:date rdfs:subProperty dc:date . + +:tree a rdfs:Property ; + rdfs:domain :Commit ; + rdfs:range :Tree . + +:parent a rdfs:Property ; + rdfs:domain :Commit ; + rdfs:range :Commit . diff --git a/rdf/void.ttl b/rdf/void.ttl new file mode 100644 index 0000000..9cc6a84 --- /dev/null +++ b/rdf/void.ttl @@ -0,0 +1,12 @@ +@prefix void: <http://rdfs.org/ns/void#> . +@prefix vann: <http://purl.org/vocab/vann/> . +@prefix lib: <http://www.swi-prolog.org/rdf/library/> . +@prefix owl: <http://www.w3.org/2002/07/owl#> . +@prefix dcterms: <http://purl.org/dc/terms/> . + + +<rdfgit> + a void:Dataset ; + dcterms:title "Schema for the rdfgit vocabulary"@en; + void:dataDump + <rdfgit.ttl> .