Thanks Andy On 13 Feb 2012, at 21:59, Andy Seaborne wrote:
> On 13/02/12 16:06, Emilio Miguelanez wrote: >> Hello 'jena-users', >> >> My question is related to the situation when I want to validate the >> (OntModel) model after an update operation using the SPARQUL query. >> If there are not conflicts, the model can go ahead a commit. But, what >> happen when there are some conflicts? >> >> See below my two methods: one for model consistency and another to update >> the model using SPARUL API. However, in the latter, the abort() call does >> not work obviously as the model does not support transaction. >> >> Therefore, the question is what I could do in order to guarantee a >> consistent model after model updates. >> >> Lib being used: TDB-0.8.10 and Jena-2.7.0 > > 1/ Don't put the updates in the base data until you check them. Use union > models. Do you mean creating a parallel model in memory where to execute the update and check the consistency, and if pass, add it to the base model? How would you use union models in this particular scenario? > 2/ Use 0.9.0 SNAPSHOT - it supports transactions on datasets (not individual > models). > > http://incubator.apache.org/jena/documentation/tdb/tdb_transactions.html where could I get version 0.9.0? Cheers, Emilio > >> >> Regards, >> Emilio >> >> >> private static boolean modelConsistencyCheck() throws ConsistencyException { >> boolean check; >> ValidityReport validity = model.validate(); >> >> if (validity.isValid()) { >> logger.info("Consistency Checking: OK"); >> check=true; >> } else { >> logger.warn("Consistency Checking: Conflicts"); >> for (Iterator i = validity.getReports(); i.hasNext();) { >> logger.warn(" - " + i.next()); >> } >> check=true; >> throw new ConsistencyException("Model is INCONSISTENT> >> check logs to see conflicts"); >> } >> return check; >> } >> >> public String updateModel(String inputQuery) throws ConsistencyException, >> QueryParseException, QueryExecException, IOException, >> ConcurrentModificationException, Exception { >> >> // Construct a SPARUL query >> String queryResults = null; >> model.enterCriticalSection(Lock.WRITE); >> try { >> UpdateRequest updateRequest = UpdateFactory.create(queryPrefix + >> inputQuery); >> UpdateAction.execute(updateRequest, model); >> >> logger.debug("Consistency checking of UPDATED Model"); >> if (modelConsistencyCheck()) { >> model.commit(); >> } else { >> model.abort(); >> } >> } finally { >> TDB.sync(model); >> queryResults = "Model Updated"; >> model.leaveCriticalSection(); >> } >> >> return queryResults; >> } > --- Emilio Migueláñez Martín [email protected]
