@prefix rec:.
@prefix contact:.
@prefix dc:.
@prefix doc:.
@prefix trd:.
@prefix mat:.
@prefix rdf: .
@prefix log: .
@prefix mtm:.
@prefix :<#>.
<> dc:title "Filter to keep only the relevant data from the merging of tr.rdf and matrix-base.n3 done by merge-tr-matrix.n3".
@forAll :WORK, :DOC, :STATUS, :P, :X, :P2, :Y.
# For any work identified as being part of the matrix (in matrix-base.n3)
# we keep only the interesting properties (as defined
# in merge-tr-matrix.n3)
{
:WORK a mat:Work;
:P :X.
:P a mtm:Interesting.
:X log:notEqualTo mat:Work.
} log:implies {
:WORK a mat:Work; :P :X.
}.
# RFC are special cases, since they don't appear in tr.rdf
{
:WORK a mat:Work;
mat:status mat:RFC.
} log:implies {
:WORK a mat:Work; mat:status mat:RFC.
}.
# From tr.rdf, we keep only those that have a status making them
# good for the Matrix (defined as mtm:Status in merge-tr-matrix)
{
:DOC doc:versionOf :WORK; a :STATUS;
:P :X.
:STATUS a mtm:Status.
:WORK a mat:Work; doc:version :DOC.
:P a mtm:Interesting.
} log:implies {
:WORK a mat:Work; :P :X; mat:status :STATUS.
}.
# We keep interesting properties of objects of interesting properties
# not very elegant, but I don't know how to do better
{ :WORK :P :X.
:X :P2 :Y.
mtm:Interesting is rdf:type of :P,:P2.
} log:implies{
:X :P2 :Y.
}.
# if a WD is in LC, we don't care to say it is a WD
{ :WORK mat:status rec:LC, rec:WD.
} log:implies {
:WORK mat:status rec:LC.
}.