Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/14/09 17:29:48 (15 years ago)
Author:
gkronber
Message:

worked on RDF backend. Implemented query support to load datasets. Queries for dispatcher and results still missing. (#419)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.DB/Store.cs

    r1116 r1129  
    5454    }
    5555
    56     public ICollection<IVariableBindings> Select(ICollection<Statement> query) {
    57       SemWeb.Query.QueryResultSink resultSink = new MyQueryResultSink();
     56
     57    public ICollection<VariableBindings> Query(string query) {
     58      MyQueryResultSink resultSink = new MyQueryResultSink();
     59      SemWeb.N3Reader n3Reader = new SemWeb.N3Reader(new StringReader(query));
     60      SemWeb.Query.GraphMatch matcher = new SemWeb.Query.GraphMatch(n3Reader);
     61      matcher.Run(store, resultSink);
     62      return resultSink.Bindings;
     63    }
     64
     65    public ICollection<VariableBindings> Query(ICollection<Statement> query) {
     66      MyQueryResultSink resultSink = new MyQueryResultSink();
    5867      Translate(query).Run(store, resultSink);
    5968      return resultSink.Bindings;
     
    6170
    6271    private SemWeb.Query.Query Translate(ICollection<Statement> query) {
    63       SemWeb.Query.GraphMatch graphMatch = new SemWeb.Query.GraphMatch();
    64       foreach(Statement statement in query) {
    65         graphMatch.AddGraphStatement(Translate(statement));
    66       }
    67       return graphMatch;
     72      Dictionary<object, object> translatedObjects = new Dictionary<object, object>();
     73      SemWeb.MemoryStore queryStore = new SemWeb.MemoryStore(query.Select(st => Translate(st, translatedObjects)).ToArray());
     74
     75      return new SemWeb.Query.GraphMatch(queryStore);
    6876    }
    6977
     
    8593    //}
    8694
    87     private SemWeb.SelectFilter Translate(SelectFilter filter) {
    88       SemWeb.SelectFilter f = new SemWeb.SelectFilter();
    89       f.Subjects = Array.ConvertAll(filter.Subjects, s => Translate(s));
    90       f.Predicates = Array.ConvertAll(filter.Predicates, p => Translate(p));
    91       f.Objects = Array.ConvertAll(filter.Properties, prop => Translate(prop));
    92       return f;
    93     }
    94 
    95     private SemWeb.Entity Translate(Entity e) {
     95    //private SemWeb.SelectFilter Translate(SelectFilter filter) {
     96    //  SemWeb.SelectFilter f = new SemWeb.SelectFilter();
     97    //  f.Subjects = Array.ConvertAll(filter.Subjects, s => Translate(s));
     98    //  f.Predicates = Array.ConvertAll(filter.Predicates, p => Translate(p));
     99    //  f.Objects = Array.ConvertAll(filter.Properties, prop => Translate(prop));
     100    //  return f;
     101    //}
     102
     103    private static SemWeb.Entity Translate(Entity e) {
    96104      return e.Uri == null ? null : new SemWeb.Entity(e.Uri);
    97105    }
    98106
    99     private SemWeb.Resource Translate(Resource prop) {
     107    private static SemWeb.Resource Translate(Resource prop) {
    100108      if (prop is Literal) {
    101109        return TranslateLiteral((Literal)prop);
     
    107115    }
    108116
    109     private Statement Translate(SemWeb.Statement statement) {
    110       if (statement.Object is SemWeb.Literal) {
    111         return new Statement(
    112           new Entity(statement.Subject.Uri),
    113           new Entity(statement.Predicate.Uri),
    114           TranslateLiteral((SemWeb.Literal)statement.Object));
    115       } else {
    116         return new Statement(
    117           new Entity(statement.Subject.Uri),
    118           new Entity(statement.Predicate.Uri),
    119           new Entity(((SemWeb.Entity)statement.Object).Uri));
    120       }
    121     }
    122 
    123     private SemWeb.Statement Translate(Statement statement) {
     117    private static Statement Translate(SemWeb.Statement statement) {
     118      return Translate(statement, new Dictionary<object, object>());
     119    }
     120
     121    private static Statement Translate(SemWeb.Statement statement, Dictionary<object, object> translatedObjects) {
     122      if (!translatedObjects.ContainsKey(statement.Subject)) {
     123        translatedObjects[statement.Subject] = new Entity(statement.Subject.Uri);
     124      }
     125      if (!translatedObjects.ContainsKey(statement.Predicate)) {
     126        translatedObjects[statement.Predicate] = new Entity(statement.Predicate.Uri);
     127      }
     128      if (!translatedObjects.ContainsKey(statement.Object)) {
     129        if (statement.Object is SemWeb.Literal) {
     130          translatedObjects[statement.Object] = TranslateLiteral((SemWeb.Literal)statement.Object);
     131        } else {
     132          translatedObjects[statement.Object] = new Entity(((SemWeb.Entity)statement.Object).Uri);
     133        }
     134      }
     135
     136      Entity subjectEntity = (Entity)translatedObjects[statement.Subject];
     137      Entity predicateEntity = (Entity)translatedObjects[statement.Predicate];
     138      Resource property = (Resource)translatedObjects[statement.Object];
     139
     140      return new Statement(
     141        subjectEntity,
     142        predicateEntity,
     143        property);
     144    }
     145
     146    private static SemWeb.Statement Translate(Statement statement) {
     147      return Translate(statement, new Dictionary<object, object>());
     148    }
     149
     150    private static SemWeb.Statement Translate(Statement statement, Dictionary<object, object> translatedObjects) {
     151      if (!translatedObjects.ContainsKey(statement.Subject)) {
     152        translatedObjects[statement.Subject] = Translate(statement.Subject);
     153      }
     154      if (!translatedObjects.ContainsKey(statement.Predicate)) {
     155        translatedObjects[statement.Predicate] = Translate(statement.Predicate);
     156      }
     157      if (!translatedObjects.ContainsKey(statement.Property)) {
     158        translatedObjects[statement.Property] = Translate(statement.Property);
     159      }
     160
     161      SemWeb.Entity subject = (SemWeb.Entity)translatedObjects[statement.Subject];
     162      SemWeb.Entity predicate = (SemWeb.Entity)translatedObjects[statement.Predicate];
     163      SemWeb.Resource property = (SemWeb.Resource)translatedObjects[statement.Property];
     164
    124165      return new SemWeb.Statement(
    125         Translate(statement.Subject),
    126         Translate(statement.Predicate),
    127         Translate(statement.Property));
    128     }
    129 
    130     private SemWeb.Literal TranslateLiteral(SerializedLiteral l) {
     166        subject,
     167        predicate,
     168        property);
     169    }
     170
     171    private static SemWeb.Literal TranslateLiteral(SerializedLiteral l) {
    131172      if (l.RawData == null) return null;
    132173      return new SemWeb.Literal(l.RawData, null, "serializedItem");
    133174    }
    134175
    135     private SemWeb.Literal TranslateLiteral(Literal l) {
     176    private static SemWeb.Literal TranslateLiteral(Literal l) {
    136177      if (l.Value == null) return null;
    137178      if (l.Value is double) return SemWeb.Literal.FromValue((double)l.Value);
     
    143184    }
    144185
    145     private Resource TranslateLiteral(SemWeb.Literal l) {
     186    private static Resource TranslateLiteral(SemWeb.Literal l) {
    146187      if (l.DataType == "serializedItem") {
    147188        return new SerializedLiteral(l.Value);
     
    152193      }
    153194    }
     195
     196    private class MyQueryResultSink : SemWeb.Query.QueryResultSink {
     197
     198      private List<VariableBindings> bindings = new List<VariableBindings>();
     199      public ICollection<VariableBindings> Bindings {
     200        get { return bindings.AsReadOnly(); }
     201      }
     202
     203      public override bool Add(SemWeb.Query.VariableBindings result) {
     204        VariableBindings varBindings = new VariableBindings();
     205        foreach (SemWeb.Variable var in result.Variables) {
     206          if (var.LocalName != null && result[var] != null) {
     207            if (result[var] is SemWeb.Literal) {
     208              varBindings.Add(var.LocalName, TranslateLiteral((SemWeb.Literal)result[var]));
     209            } else {
     210              varBindings.Add(var.LocalName, new Entity(((SemWeb.Entity)result[var]).Uri));
     211            }
     212          }
     213          bindings.Add(varBindings);
     214        }
     215        return true;
     216      }
     217    }
    154218  }
    155219}
Note: See TracChangeset for help on using the changeset viewer.