- Timestamp:
- 01/14/09 17:29:48 (16 years ago)
- Location:
- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.DB
- Files:
-
- 1 deleted
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj
r1116 r1129 74 74 </ItemGroup> 75 75 <ItemGroup> 76 <Compile Include="VariableBindings.cs" />77 76 <Compile Include="Store.cs" /> 78 77 <Compile Include="HeuristicLabCedmaDbPlugin.cs" /> -
branches/CEDMA-Refactoring-Ticket419/HeuristicLab.CEDMA.DB/Store.cs
r1116 r1129 54 54 } 55 55 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(); 58 67 Translate(query).Run(store, resultSink); 59 68 return resultSink.Bindings; … … 61 70 62 71 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); 68 76 } 69 77 … … 85 93 //} 86 94 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) { 96 104 return e.Uri == null ? null : new SemWeb.Entity(e.Uri); 97 105 } 98 106 99 private SemWeb.Resource Translate(Resource prop) {107 private static SemWeb.Resource Translate(Resource prop) { 100 108 if (prop is Literal) { 101 109 return TranslateLiteral((Literal)prop); … … 107 115 } 108 116 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 124 165 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) { 131 172 if (l.RawData == null) return null; 132 173 return new SemWeb.Literal(l.RawData, null, "serializedItem"); 133 174 } 134 175 135 private SemWeb.Literal TranslateLiteral(Literal l) {176 private static SemWeb.Literal TranslateLiteral(Literal l) { 136 177 if (l.Value == null) return null; 137 178 if (l.Value is double) return SemWeb.Literal.FromValue((double)l.Value); … … 143 184 } 144 185 145 private Resource TranslateLiteral(SemWeb.Literal l) {186 private static Resource TranslateLiteral(SemWeb.Literal l) { 146 187 if (l.DataType == "serializedItem") { 147 188 return new SerializedLiteral(l.Value); … … 152 193 } 153 194 } 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 } 154 218 } 155 219 }
Note: See TracChangeset
for help on using the changeset viewer.