예제 #1
0
        public void Spin(IGraph data, IGraph infer, IGraph meta)
        {
            var  union = new DisjointUnion(data, infer, string.Empty);
            bool any   = false;

            do
            {
                any  = false;
                any |= InverseOf(union, meta);
                any |= Domain(union, meta);
                any |= Range(union, meta);
                any |= SubClassOf(union, meta);
                any |= SubPropertyOf(union, meta);
            } while (any);
        }
예제 #2
0
        private bool Domain(DisjointUnion graph, IGraph meta)
        {
            var any   = false;
            var rules = meta.P(Constants.Domain);

            foreach (var rule in rules)
            {
                var triples = graph.P(rule.Subject);
                foreach (var t in triples)
                {
                    any |= graph.Assert(t.Subject, Constants.Type, TripleObject.FromData(rule.Object.ToValue()));
                }
            }
            return(any);
        }
예제 #3
0
        public object Visit(DisjointUnion e)
        {
            if (e.modality != Statement.Modality.IS)
            {
                return(CreateNull());
            }

            // forall X,Y in e.Union return X[=~Y | Y[=~X
            // & X|Y|... [= e.name
            var dis = INTERSECT_SYMETRIC_FUN(e.Union, SUBS_NEG);
            var sum = SUBS(new ConceptOr(null)
            {
                Exprs = e.Union
            }, new CNL.DL.Atomic(null)
            {
                id = e.name
            });

            return(Intersect(dis, sum));
        }
예제 #4
0
 public override object Visit(DisjointUnion e)
 {
     e.name = removeDefaultPfx(e.name);
     return(base.Visit(e));
 }
예제 #5
0
 public override object Visit(DisjointUnion e)
 {
     e.name = applyFullUri(e.name);
     return(base.Visit(e));
 }