From fa9dfcdec649b869b39f77a0f3cd017d8c0fc7bd Mon Sep 17 00:00:00 2001 From: Xiaochi Zhou Date: Tue, 20 May 2025 19:26:49 +0100 Subject: [PATCH] Remove uk.ac.cam.cares.jps.base.query.fed package - This package is not actually used - Removed both source code and tests --- .../fed/BlazegraphRepositoryWrapper.java | 249 -------- .../base/query/fed/DataSourceSelector.java | 173 ----- .../base/query/fed/FederatedQueryFactory.java | 249 -------- .../query/fed/FederatedQueryInterface.java | 31 - .../query/fed/ParsedQueryTreeVisitor.java | 173 ----- .../query/fed/ServiceDescriptionIndexer.java | 407 ------------ .../jps/base/query/fed/SimpleMultiIndex.java | 46 -- ...graphRepositoryWrapperIntegrationTest.java | 90 --- .../query/fed/DataSourceSelectorTest.java | 130 ---- .../jps/base/query/fed/DatasetGenerator.java | 194 ------ .../base/query/fed/DatasetGeneratorTest.java | 155 ----- .../jps/base/query/fed/DatasetProvider.java | 80 --- ...azegraphGivenEndpointsIntegrationTest.java | 149 ----- ...zegraphSourceSelectionIntegrationTest.java | 76 --- ...eryRdf4jGivenEndpointsIntegrationTest.java | 70 -- ...ryRdf4jSourceSelectionIntegrationTest.java | 122 ---- .../base/query/fed/FedXIntegrationTest.java | 72 --- .../jps/base/query/fed/QueryProvider.java | 601 ------------------ .../fed/ServiceDescriptionIndexerTest.java | 254 -------- .../base/query/fed/SimpleMultiIndexTest.java | 36 -- .../base/query/fed/TripleStoreProvider.java | 491 -------------- 21 files changed, 3848 deletions(-) delete mode 100644 src/main/java/uk/ac/cam/cares/jps/base/query/fed/BlazegraphRepositoryWrapper.java delete mode 100644 src/main/java/uk/ac/cam/cares/jps/base/query/fed/DataSourceSelector.java delete mode 100644 src/main/java/uk/ac/cam/cares/jps/base/query/fed/FederatedQueryFactory.java delete mode 100644 src/main/java/uk/ac/cam/cares/jps/base/query/fed/FederatedQueryInterface.java delete mode 100644 src/main/java/uk/ac/cam/cares/jps/base/query/fed/ParsedQueryTreeVisitor.java delete mode 100644 src/main/java/uk/ac/cam/cares/jps/base/query/fed/ServiceDescriptionIndexer.java delete mode 100644 src/main/java/uk/ac/cam/cares/jps/base/query/fed/SimpleMultiIndex.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/BlazegraphRepositoryWrapperIntegrationTest.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/DataSourceSelectorTest.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetGenerator.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetGeneratorTest.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetProvider.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryBlazegraphGivenEndpointsIntegrationTest.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryBlazegraphSourceSelectionIntegrationTest.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryRdf4jGivenEndpointsIntegrationTest.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryRdf4jSourceSelectionIntegrationTest.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedXIntegrationTest.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/QueryProvider.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/ServiceDescriptionIndexerTest.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/SimpleMultiIndexTest.java delete mode 100644 src/test/java/uk/ac/cam/cares/jps/base/query/fed/TripleStoreProvider.java diff --git a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/BlazegraphRepositoryWrapper.java b/src/main/java/uk/ac/cam/cares/jps/base/query/fed/BlazegraphRepositoryWrapper.java deleted file mode 100644 index a53c76936..000000000 --- a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/BlazegraphRepositoryWrapper.java +++ /dev/null @@ -1,249 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.io.ByteArrayOutputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Properties; -import java.util.Set; - -import org.apache.http.client.methods.HttpGet; -import org.apache.jena.ontology.OntModel; -import org.apache.jena.query.ResultSet; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.openrdf.query.BindingSet; -import org.openrdf.query.TupleQueryResult; - -import com.bigdata.rdf.rio.json.BigdataSPARQLResultsJSONWriter; -import com.bigdata.rdf.sail.webapp.client.IPreparedTupleQuery; -import com.bigdata.rdf.sail.webapp.client.RemoteRepository; -import com.bigdata.rdf.sail.webapp.client.RemoteRepositoryManager; - -import uk.ac.cam.cares.jps.base.exception.JPSRuntimeException; -import uk.ac.cam.cares.jps.base.http.Http; -import uk.ac.cam.cares.jps.base.query.JenaHelper; -import uk.ac.cam.cares.jps.base.query.JenaResultSetFormatter; - -/** - * The class wraps some functionality of Blazegraph server such as executing SPARQL queries, - * creating new namespaces, and querying all existing namespaces. - * Blazegraph's term "namespace" means repository or RDF dataset. - * Blazegraph's service URL has usually the form {@link http://www.theworldavatar.com/blazegraph}. - * The endpoint URL is used for SPARQL queries on a dataset (namespace) and has the form e.g.
- *
- * {@link http://www.theworldavatar.com/blazegraph/namespace/ontocompchem/sparql}
- *
- * For more information about Blazegraph's REST API see {@link https://github.com/blazegraph/database/wiki/REST_API} . - */ -public class BlazegraphRepositoryWrapper { - - static final Logger LOGGER = LogManager.getLogger(BlazegraphRepositoryWrapper.class); - public static final String BLAZEGRAPH_DEFAULT_NAMESPACE = "kb"; - - private String defaultNamespace = null; - private RemoteRepositoryManager manager = null; - - public BlazegraphRepositoryWrapper(String serviceUrl, String defaultNamespace) { - this.defaultNamespace = defaultNamespace; - this.manager = new RemoteRepositoryManager(serviceUrl); - LOGGER.info("initialized with serviceUrl=" + serviceUrl + ", defaultNamespace=" + defaultNamespace); - } - - public BlazegraphRepositoryWrapper(String serviceOrEndpointUrl) { - this(getParts(serviceOrEndpointUrl)[0], getParts(serviceOrEndpointUrl)[1]); - } - - public RemoteRepositoryManager getManager() { - return manager; - } - - /** - * If the endpoint URL is given, the pair [service-url, namespace] is returned. - * If the service URL is given, the pair [service-url, null] is returned. - * - * @param serviceOrEndpointUrl - * @return - */ - public static String[] getParts(String serviceOrEndpointUrl) { - String serviceUrl = serviceOrEndpointUrl; - String defaultNamespace = null; - int i1 = serviceUrl.lastIndexOf("/namespace/"); - int i2 = serviceUrl.lastIndexOf("/sparql"); - if (i1 >= 0 && i2 >= 0) { - defaultNamespace = serviceUrl.substring(i1 + "/namespace/".length(), i2); - serviceUrl = serviceUrl.substring(0, i1); - } - - return new String[] {serviceUrl, defaultNamespace}; - } - - public static String getPathForBlazegraph(String namespace) { - return "/namespace/" + namespace + "/sparql"; - } - - /** - * see {@link com.bigdata.rdf.sail.webapp.client.RemoteRepositoryManager#getRepositoryProperties(String)} - * - * @param namespace - * @return - */ - public Properties getRepositoryProperties(String namespace) { - try { - return manager.getRepositoryProperties(namespace); - } catch (Exception e) { - throw new JPSRuntimeException(e.getMessage(), e); - } - } - - private RemoteRepository getRepository(String namespace) { - try { - return manager.getRepositoryForNamespace(namespace); - } catch (Exception e) { - throw new JPSRuntimeException(e.getMessage(), e); - } - } - - /** - * Creates a new dataset (namespace). If props is null, the properties - * from the default namespace "kb" are copied. - * If the default namespace does not exist, an exception is thrown. - * - * @param namespace the dataset name - * @param props the properties for creating the journal file, BTree etc. - */ - public void createNamespace(String namespace, Properties props) { - - if (props == null) { - // use standard properties from default namespace kb for the new namespace - // however, the default namespace kb may not exist - props = getRepositoryProperties(BLAZEGRAPH_DEFAULT_NAMESPACE); - } - try { - this.manager.createRepository(namespace, props); - } catch (Exception e) { - throw new JPSRuntimeException(e.getMessage(), e); - } - } - - /** - * Executes the SPARQL query on the given namespace (dataset). - * The result set is a string in the same JSON format as in {@link JenaResultSetFormatter#convertToSimplifiedList(ResultSet)} - * - * @param sparql - * @param namespace - * @return - */ - public String query(String sparql, String namespace) { - - if (namespace == null) { - namespace = defaultNamespace; - if (namespace == null) { - throw new JPSRuntimeException("namespace and default namespace are null"); - } - } - - String resultAsJsonString = null; - try { - RemoteRepository repo = getRepository(namespace); - IPreparedTupleQuery query = repo.prepareTupleQuery(sparql); - TupleQueryResult result = query.evaluate(); - - try (OutputStream out = new ByteArrayOutputStream()) { - - BigdataSPARQLResultsJSONWriter writer = new BigdataSPARQLResultsJSONWriter(out); - List columnHeaders = new LinkedList(); - columnHeaders.addAll(result.getBindingNames()); - writer.startQueryResult(columnHeaders); - - while (result.hasNext()) { - BindingSet b = result.next(); - writer.handleSolution(b); - } - - writer.endQueryResult(); - resultAsJsonString = out.toString(); - - result.close(); - } - } catch (Exception e) { - throw new JPSRuntimeException(e.getMessage(), e); - } - - return JenaResultSetFormatter.convertToSimplifiedJsonArray(resultAsJsonString).toString(); - } - - /** - * Returns an RDF graph serialized in RDF+XML format. - * The RDF graph contains information about all namespaces (datasets) available at the Blazegraph server. - * - * @return RDF graph in RDF+XML format - */ - private String queryNamespacesFull() { - String url = manager.getBaseServiceURL() + "/namespace"; - LOGGER.debug("querying namespaces: " + url); - // String accept = "application/x-turtle"; - String accept = "application/rdf+xml"; - HttpGet request = Http.get(url, accept); - return Http.execute(request); - } - - /** - * Returns the list of namespaces (datasets) available at the Blazegraph server. - * - * @param asEndpointUrl if true returns the full endpoint URL for each namespace otherwise just the namespace - * @return - */ - public List queryNamespaces(boolean asEndpointUrl) { - String full = queryNamespacesFull(); - return queryNamespaces(asEndpointUrl, full); - } - - public List queryNamespaces(boolean asEndpointUrl, String rdfgraphWithNamespaces) { - OntModel model = JenaHelper.createModel(); - JenaHelper.readFromString(rdfgraphWithNamespaces, model); - String sparql = "SELECT ?endpoint WHERE { " - + "?dataset a . " - + "?dataset ?endpoint . }"; - ResultSet result = JenaHelper.query(model, sparql); - String json = JenaResultSetFormatter.convertToJSONW3CStandard(result); - Set endpoints = new HashSet(); - for (String[] row : JenaResultSetFormatter.convertToListofStringArrays(json, "endpoint")) { - String namespace = row[0]; - if (!asEndpointUrl) { - namespace = namespace.replaceFirst("/sparql", ""); - int i = namespace.lastIndexOf("/"); - namespace = namespace.substring(i+1); - } else { - // CityKG does not seem to be configured correctly - // the endpoint URLS contain localhost:9999 - // we replace this here - for (String s : new String[] {"localhost:9999/blazegraph", "localhost:9999/bigdata/LBS"}) { - if (namespace.contains(s)) { - String old = namespace; - namespace = namespace.replace(s, "www.theworldavatar.com:83/citieskg"); - LOGGER.warn("changed endpoint url from " + old + " to " + namespace); - } - } - - } - endpoints.add(namespace); - } - return new ArrayList(endpoints); - } - - /** - * Closes the repository manager. - */ - public void close() { - try { - manager.close(); - } catch (Exception e) { - throw new JPSRuntimeException(e.getMessage(), e); - } finally { - manager = null; - } - } -} diff --git a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/DataSourceSelector.java b/src/main/java/uk/ac/cam/cares/jps/base/query/fed/DataSourceSelector.java deleted file mode 100644 index d5f71a4e6..000000000 --- a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/DataSourceSelector.java +++ /dev/null @@ -1,173 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.eclipse.rdf4j.query.parser.ParsedQuery; -import org.eclipse.rdf4j.query.parser.sparql.SPARQLParser; - -import uk.ac.cam.cares.jps.base.query.fed.ParsedQueryTreeVisitor.ServiceGraphPatternSummary; -import uk.ac.cam.cares.jps.base.query.fed.ServiceDescriptionIndexer.ServiceDescriptionSummary; - -/** - * This class selects automatically datasets - * that are relevant for a SERVICE clause with an unbounded SERVICE variable. - * For a given SPARQL query with unbounded SERVICE variable, - * it adds the corresponding endpoint URLs as part of a VALUES clause. - * The selection relies on the injected schema-level indexer. - * Only those datasets can be selected - * (that means only those endpoints can be considered as federation members) - * that have been indexed previously. - */ -public class DataSourceSelector { - - static final Logger LOGGER = LogManager.getLogger(DataSourceSelector.class); - - private ServiceDescriptionIndexer indexer = null; - private Map host2host = null; - - /** - * @param indexer a schema-level indexer containing relevant information from all federation members - */ - public DataSourceSelector(ServiceDescriptionIndexer indexer) { - this.indexer = indexer; - } - - /** - * @param indexer a schema-level indexer containing relevant information from all federation members - * @param host2host if not null, host2host is used to convert host addresses in endpoint URLs - */ - public DataSourceSelector(ServiceDescriptionIndexer indexer, Map host2host) { - this.indexer = indexer; - this.host2host = host2host; - } - - /** - * Replaces a host in the given URL as specified in the host conversion map. - * Returns the original URL if no host is found or no conversion map is given. - * - * @param url - * @return - */ - private String replaceHost(String url) { - if (host2host == null) { - return url; - } - for (String host : host2host.keySet()) { - if (url.contains(host)) { - String newhost = host2host.get(host); - url = url.replace(host, newhost); - LOGGER.info("replace host in endpoint url, host=" + host + ", newhost=" + newhost + ", new url=" + url); - return url; - } - } - return url; - } - - /** - * Checks whether the given SPARQL query contains any SERVICE clause with unbounded SERVICE variable. - * For each such SERVICE clause, the relation and class IRIs from its corresponding enclosed - * basic triple patterns are extracted to identify datasets that might be relevant for the SERVICE clause. - * Finally, the datasets are added as VALUES clause for the unbounded SERVICE variable. - * See {@link FederatedQueryFactory#createForQueriesWithGivenEndpoints(String)} for an example with - * added VALUES clauses. - * - * @param sparql a SPARQL query with SERVICE clauses - * @return the SPARQL query with additional VALUES clauses for unbounded SERVICE variables - */ - public String addValuesClauses(String sparql) { - - String result = sparql; - - List summaries = extractKeysForSubqueries(sparql); - for (ServiceGraphPatternSummary summary : summaries) { - List uris = summary.keys; - List serviceDescrSummaries = indexer.conjunctiveQuery(uris); - List endpointsURLs = new ArrayList(); - for (ServiceDescriptionSummary sdSummary : serviceDescrSummaries) { - String url = replaceHost(sdSummary.endpointURL); - endpointsURLs.add(url); - } - - result = DataSourceSelector.addValuesClause(result, summary.serviceVarName, endpointsURLs); - } - - return result; - } - - /** - * Adds a VALUES clause to the SPARQL query for the given SERVICE variable. - * The VALUES clause contains the given values (endpoint URLs). - * - * @param sparql - * @param varName - * @param varValues - * @return the SPARQL query with added VALUES clause - */ - public static String addValuesClause(String sparql, String varName, List varValues) { - - int minIndex = - 1; - // find the minimum position for LIMIT, ORDER BY etc.´, see https://www.w3.org/TR/sparql11-query/#rSolutionModifier - String[] clauses = new String[] {"LIMIT", "OFFSET", "ORDER", "HAVING", "GROUP"}; - for (String clause : clauses) { - int index = sparql.lastIndexOf(clause); - if (minIndex == -1 || index < minIndex) { - minIndex = index; - } - } - String firstPart = sparql; - if (minIndex > -1) { - firstPart = sparql.substring(0, minIndex); - } - - int index = firstPart.lastIndexOf("}"); - StringBuffer b = new StringBuffer(" VALUES ?").append(varName).append(" { "); - for (String value : varValues) { - b.append("<").append(value).append("> "); - } - b.append("}\r\n"); - - LOGGER.info("added VALUES clause = " + b); - - String newSparql = sparql.substring(0, index) - + b - + sparql.substring(index, sparql.length()); - - return newSparql; - } - - /** - * Extracts all SERVICE clauses from the given SPARQL query - * and converts them into a list of SERVICE clause summaries. - * Each summary contains the SERVICE variable, - * its assigned endpoint URL (if specified) - * and the relation and class IRIs in the enclosed basic triple patterns. - * - * @param sparql - * @return a list with summarized SERVICE clauses - */ - public static List extractKeysForSubqueries(String sparql) { - SPARQLParser parser = new SPARQLParser(); - String baseURI = null; - ParsedQuery parsedQuery = parser.parseQuery(sparql, baseURI); - - //QueryModelTreePrinter treePrinter = new QueryModelTreePrinter(); - //parsedQuery.getTupleExpr().visit(treePrinter); - //LOGGER.debug(treePrinter.getTreeString() + "/n"); - - LOGGER.debug("Visiting nodes on parsed query tree"); - ParsedQueryTreeVisitor visitor = new ParsedQueryTreeVisitor(); - parsedQuery.getTupleExpr().visit(visitor); - List result = visitor.getSummariesWithoutBindings(); - String serviceVars = ""; - for (ServiceGraphPatternSummary summary : result) { - serviceVars += "?" + summary.serviceVarName + ", "; - } - LOGGER.info("Visited nodes on parsed query tree, found services variables=" + serviceVars); - return result; - } - -} diff --git a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/FederatedQueryFactory.java b/src/main/java/uk/ac/cam/cares/jps/base/query/fed/FederatedQueryFactory.java deleted file mode 100644 index c4542ce63..000000000 --- a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/FederatedQueryFactory.java +++ /dev/null @@ -1,249 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.eclipse.rdf4j.federated.FedXConfig; -import org.eclipse.rdf4j.federated.FedXFactory; -import org.eclipse.rdf4j.federated.monitoring.MonitoringUtil; -import org.eclipse.rdf4j.federated.monitoring.QueryPlanLog; -import org.eclipse.rdf4j.federated.repository.FedXRepository; -import org.eclipse.rdf4j.query.BindingSet; -import org.eclipse.rdf4j.query.TupleQuery; -import org.eclipse.rdf4j.query.TupleQueryResult; -import org.eclipse.rdf4j.query.resultio.sparqljson.SPARQLResultsJSONWriter; -import org.eclipse.rdf4j.repository.RepositoryConnection; - -import uk.ac.cam.cares.jps.base.exception.JPSRuntimeException; -import uk.ac.cam.cares.jps.base.query.JenaResultSetFormatter; -import uk.ac.cam.cares.jps.base.query.RemoteStoreClient; - -/** - * A factory for creating different engines / implementations to execute federated queries - * by using the common interface method {@link FederatedQueryInterface#executeFederatedQuery(String)}. - * - */ -public class FederatedQueryFactory { - - static final Logger LOGGER = LogManager.getLogger(FederatedQueryFactory.class); - private static ServiceDescriptionIndexer indexer = null; - - /** - * FedX is a federated query engine and part of the RDF4J project. - * Given a SPARQL 1.0 query, FedX sends ASK queries for each basic triple pattern - * to determine on-the-fly which of the federation members may contribute to the query result set. - * See {@link https://rdf4j.org/documentation/programming/federation/} for details. - * - * @param federationMembers a list of URLs of SPARQL endpoints considered for query - * @return - */ - public static FederatedQueryInterface createFedX(List federationMembers) { - - LOGGER.debug("create FedX with federation members=" + federationMembers.size()); - - final FedXConfig config = new FedXConfig() - .withEnableMonitoring(true) - .withLogQueryPlan(true) - .withDebugQueryPlan(true) - .withLogQueries(true); - - final FedXRepository repository = FedXFactory.newFederation() - .withSparqlEndpoints(federationMembers) - .withConfig(config) - .create(); - - FederatedQueryInterface impl = new FederatedQueryInterface() { - - @Override - public String executeFederatedQuery(String sparql) { - - LOGGER.debug("FedX executeQuery=\n" + sparql); - - String resultJson = null; - try (RepositoryConnection conn = repository.getConnection()) { - - TupleQuery query = conn.prepareTupleQuery(sparql); - try (TupleQueryResult result = query.evaluate()) { - - try (OutputStream out = new ByteArrayOutputStream()) { - - SPARQLResultsJSONWriter writer = new SPARQLResultsJSONWriter(out); - List columnHeaders = new LinkedList(); - columnHeaders.addAll(result.getBindingNames()); - writer.startQueryResult(columnHeaders); - while (result.hasNext()) { - BindingSet b = result.next(); - writer.handleSolution(b); - } - writer.endQueryResult(); - resultJson = out.toString(); - resultJson = JenaResultSetFormatter.convertToSimplifiedJsonArray(resultJson).toString(); - - } catch (IOException exc) { - throw new JPSRuntimeException(exc); - } - } - } - LOGGER.debug(QueryPlanLog.getQueryPlan()); - MonitoringUtil.printMonitoringInformation(repository.getFederationContext()); - - repository.shutDown(); - return resultJson; - } - }; - - return impl; - } - - /** - * Executes a SPARQL 1.1 query with specified endpoints, e.g. - *
-	 * PREFIX ...
-	 * SELECT ?exp ?yield_value ?yield_unit
-	 * WHERE {
-	 *   SERVICE ?service1 {
-	 *     ?exp ontorxn:hasYield ?yield.
-	 *     ?yield om:hasValue ?measure.
-	 *     ?measure om:hasNumericalValue ?yield_value; om:hasUnit ?yield_unit.
-	 *   }
-	 *   SERVICE ?service2 {
-	 *      <https://www.example.com/triplestore/ontodoe/DoE_1/DoE_1> ontodoe:utilisesHistoricalData ?historical_data.
-	 *     ?historical_data ontodoe:refersTo ?exp.
-	 *   }
-	 *   VALUES ?service1 { <http://172.17.0.3:8080/blazegraph/namespace/lab_1/sparql> <http://172.17.0.4:8080/blazegraph/namespace/lab_2/sparql> }
-	 *   VALUES ?service2 { <http://172.17.0.3:8080/blazegraph/namespace/doe_chemrxn/sparql> }
-	 * }
- * Such a query can be executed either on RDF4J server or Blazegraph server. - * Both cases require any dataset or namespace, resp. as a starting point for the query request. - * This is an endpoint URL specified by fedEngineUrl, e.g. - *
-	 * http://www.theworldavatar.com/blazegraph/namespace/somenamesapce/sparql
-	 * http://localhost:8080/rdf4j-server/repositories/somenamespace
-	 * 
- * - * @param fedEngineUrl endpoint URL as starting point for the request - * @return - */ - public static FederatedQueryInterface createForQueriesWithGivenEndpoints(String fedEngineUrl) { - return create(fedEngineUrl, null); - } - - /** - * Executes a SPARQL 1.1 query with and without specified endpoints. - * If data sources should be selected automatically, - * the query must contain SERVICE clauses with service variables but without VALUES clauses. - * As an examples, see the query in {@link #createForQueriesWithGivenEndpoints(String)} without the VALUES. - *

- * The code selects automatically the relevant data sources for the basic triple patterns within a SERVICE clause - * and adds a VALUES clause with corresponding endpoint URLs for each SERVICE clause. - * Finally, it executes the completed SPARQL 1.1 query as in {@link #createForQueriesWithGivenEndpoints(String)}. - * - * @param fedEngineUrl endpoint URL as starting point for the request - * @param servDescrIndexer contains the schema-level index for all federation members to allow automated data source selection - * @param host2host if not null, host2host is used to convert host addresses; - * conversion may necessary e.g. in a test environment with Docker containers where Blazegraph servers return endpoint URLs - * with wrong host addresses (such as "localhost:8080") - * @return - */ - public static FederatedQueryInterface createWithEndpointSelection( - String fedEngineUrl, ServiceDescriptionIndexer servDescrIndexer, Map host2host) { - - DataSourceSelector selector = new DataSourceSelector(servDescrIndexer, host2host); - return create(fedEngineUrl, selector); - } - - /** - * A wrapper for four engine configurations:
- * (1) Execution on RDFJ server (not FedX):
- * (1a) SPARQL 1.1 with specified endpoints
- * (1b) SPARQL 1.1 with SERVICE clause without specified endpoints and automated data source selection
- * (2) Execution on Blazegraph server:
- * (2a) SPARQL 1.1 with specified endpoints
- * (2b) SPARQL 1.1 with SERVICE clause without specified endpoints and automated data source selection
- * - * @param fedEngineUrl - * @param selector - * @return - */ - private static FederatedQueryInterface create(String fedEngineUrl, DataSourceSelector selector) { - - boolean rdf4j = fedEngineUrl.contains("rdf4j"); - final RemoteStoreClient client = rdf4j? new RemoteStoreClient(fedEngineUrl) : null; - final BlazegraphRepositoryWrapper wrapper = rdf4j? null : new BlazegraphRepositoryWrapper(fedEngineUrl); - - FederatedQueryInterface impl = new FederatedQueryInterface() { - - @Override - public String executeFederatedQuery(String sparql) { - - LOGGER.debug("executeQuery=\n" + sparql); - - if (selector != null) { - sparql = selector.addValuesClauses(sparql); - LOGGER.debug("executeQuery after data source selection=\n" + sparql); - } - - if (wrapper != null) { - return wrapper.query(sparql, null); - } - return client.executeQuery(sparql).toString(); - } - }; - - return impl; - } - - /** - * Creates a schema-level indexer which allows automated data source selection - * for federated queries without specifying endpoints. - * All endpoint URLs are added to the set of federation members. - * For each given service URL, all its existing datasets (endpoint URLs) are requested and added to the set of federation members. - * The service descriptions of all federation members are collected and used for index creation. - * Each federation member must implement the recommendation on - * service descriptions. - * Currently, this is the case for Blazegraph server but not for RDF4J server - * - * @param cached if true and the indexer was created before, the same indexer is returned; - * otherwise an indexer is created from scratch - * @param serviceUrls - * @param endpointUrls - * @return - */ - public static ServiceDescriptionIndexer getIndexer(boolean cached, List serviceUrls, List endpointUrls) { - if (cached && (indexer != null)) { - return indexer; - } - - // collect all endpoint Urls - List allEndpoints = new ArrayList(); - if (serviceUrls != null) { - for (String serviceUrl : serviceUrls) { - BlazegraphRepositoryWrapper wrapper = new BlazegraphRepositoryWrapper(serviceUrl); - List endpoints = wrapper.queryNamespaces(true); - allEndpoints.addAll(endpoints); - } - } - if (endpointUrls != null) { - allEndpoints.addAll(endpointUrls); - } - - if (allEndpoints.isEmpty()) { - throw new JPSRuntimeException("At least one endpoint is required, serviceUrls=" + serviceUrls + ", endpointUrls=" + endpointUrls); - } - - // read all service descriptions - indexer = new ServiceDescriptionIndexer(); - for (String url : allEndpoints) { - indexer.addServiceDescription(url); - } - - return indexer; - } -} diff --git a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/FederatedQueryInterface.java b/src/main/java/uk/ac/cam/cares/jps/base/query/fed/FederatedQueryInterface.java deleted file mode 100644 index f9b528dfb..000000000 --- a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/FederatedQueryInterface.java +++ /dev/null @@ -1,31 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import uk.ac.cam.cares.jps.base.query.JenaResultSetFormatter; - -/** - * A common interface for different engines / implementations for executing federated queries. - * - */ -public interface FederatedQueryInterface { - - /** - * Executes the SPARQL query as federated query and returns the result set as JSON array string. - * Each element of the JSON array represents a row in the result set and consists of key-value pairs. - * Example of a JSON element: - *

-	 * {"generation":"http://www.theworldavatar.com/ontology/ontoeip/powerplants/PowerPlant.owl#NaturalGasGeneration",
- * "emission":"http://www.theworldavatar.com/kb/powerplants/Northwest_Kabul_Power_Plant_Afghanistan.owl#CO2Emission_of_Northwest_Kabul_Power_Plant_Afghanistan",
- * "emissionvalue":"http://www.theworldavatar.com/kb/powerplants/Northwest_Kabul_Power_Plant_Afghanistan.owl#v_CO2Emission_of_Northwest_Kabul_Power_Plant_Afghanistan",
- * "emissionvaluenum":"15.75"} - *
- * The above format is a simplified version of the official W3C JSON format - * as described in {@link https://www.w3.org/TR/rdf-sparql-json-res/}. - * Concerning the above example in the official W3C JSON format see - * {@link JenaResultSetFormatter#convertToJSONW3CStandard(org.apache.jena.query.ResultSet)}. - * - * @param sparql - * @return query result set - * @throws Exception - */ - public String executeFederatedQuery(String sparql); -} diff --git a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/ParsedQueryTreeVisitor.java b/src/main/java/uk/ac/cam/cares/jps/base/query/fed/ParsedQueryTreeVisitor.java deleted file mode 100644 index 1b3810c4e..000000000 --- a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/ParsedQueryTreeVisitor.java +++ /dev/null @@ -1,173 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.eclipse.rdf4j.model.Value; -import org.eclipse.rdf4j.model.impl.SimpleIRI; -import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; -import org.eclipse.rdf4j.query.algebra.QueryModelNode; -import org.eclipse.rdf4j.query.algebra.Service; -import org.eclipse.rdf4j.query.algebra.StatementPattern; -import org.eclipse.rdf4j.query.algebra.Var; -import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; - -import uk.ac.cam.cares.jps.base.query.sparql.PrefixToUrlMap; -import uk.ac.cam.cares.jps.base.query.sparql.Prefixes; - -/** - * This class visits all tree nodes of a parsed SPARQL query - * and retrieves information about SERVICE and VALUES clauses. - * It collects - * (1) names and bounded values (i.e. endpoint URLs) of SERVICE variables - * (2) IRIs of relations (used as predicates in basic triple patterns) and - * (3) IRIs of classes (used as objects in basic triple patterns with predicate "rdf:type") - * - */ -public class ParsedQueryTreeVisitor extends AbstractQueryModelVisitor { - - static final Logger LOGGER = LogManager.getLogger(ParsedQueryTreeVisitor.class); - - /** - * A helper class to store the information related to a query's SERVICE clause. - * - */ - public class ServiceGraphPatternSummary { - public String serviceVarName = null; - public String serviceVarValue = null; - public List keys = null; - } - - private static final String BLAZEGRAPH_GEO_PREFIX = PrefixToUrlMap.getPrefixUrl(Prefixes.BLAZEGRAPH_GEO); - private List summaries = new ArrayList(); - private List allKeys = new ArrayList(); - /** - * Relations and classes found in basic triple patterns of the currently visited SERVICE clause. - */ - private List currentKeys = null; - private Set bindingNames = new HashSet(); - - public List getSummariesWithoutBindings() { - List result = new ArrayList(); - for (ServiceGraphPatternSummary current : summaries) { - if (!bindingNames.contains(current.serviceVarName)) { - result.add(current); - } - } - - return result; - } - - /** - * Delegates if the node type is relevant for extracting information - * (e.g. in case of StatementPattern node containing a basic triple pattern). - */ - @Override - protected void meetNode(QueryModelNode node) { - - LOGGER.debug("node=" + node.getSignature()); - - if (node instanceof Service) { - meetServiceNode((Service) node); - } else if (node instanceof StatementPattern){ - meetStatementPatternNode((StatementPattern) node); - } else if (node instanceof BindingSetAssignment) { - meetBindingSetAssignmentNode((BindingSetAssignment) node); - } else { - super.meetNode(node); - } - } - - /** - * Starts and stops to collect information for a SERVICE clause and its enclosed triple patterns. - * @param node - */ - protected void meetServiceNode(Service node) { - - Var serviceRef = node.getServiceRef(); - Value value = serviceRef.getValue(); - String svalue = (value == null)? null : value.toString(); - if (serviceRef.isAnonymous() && (value instanceof SimpleIRI)) { - // i.e. the endpoint IRI for SERVICE is already given - super.meetNode(node); - LOGGER.debug("Service node: No keys for data source selection are collected since endpoint IRI is given!"); - return; - } else if (svalue != null && svalue.startsWith(BLAZEGRAPH_GEO_PREFIX)) { - // i.e. SERVICE keyword marks a SPARQL subquery - super.meetNode(node); - LOGGER.debug("Service node: No keys for data source selection are collected since Blazegraph's special geo service was identified!"); - return; - } - // else: - // i.e. SERVICE keyword is used to mark Blazegraph's geospatial service - // triple patterns within the SERVICE body should not be considered for data source selection - // (the geo vocabulary is not part of the service description) - // nothing to do, only remove the geo vocabulary from collected keys - - - ServiceGraphPatternSummary summary = new ServiceGraphPatternSummary(); - summary.serviceVarName = node.getServiceRef().getName(); - if (svalue != null) { - summary.serviceVarValue = svalue; - } - currentKeys = new ArrayList(); - - super.meetNode(node); - - summary.keys = currentKeys; - currentKeys = null; - - summaries.add(summary); - LOGGER.debug("The following keys were collected: " + summary.keys); - } - - private String addKey(Var variable) { - Value value = variable.getValue(); - if (value != null) { - String key = value.stringValue(); - if (key.startsWith(BLAZEGRAPH_GEO_PREFIX)) - // don't consider Blazegraph special vocabulary for each geo service - return null; - allKeys.add(key); - if (currentKeys != null) { - currentKeys.add(key); - //LOGGER.debug("collected new key=" + key); - return key; - } - } - return null; - } - - /** - * Extracts relation and class IRIs from bounded predicates and objects of a basic triple pattern. - * - * @param node - */ - protected void meetStatementPatternNode(StatementPattern node) { - // Only add predicate and class IRIs as keys. - // If getSubjectVar() is bounded to a value, the value is usually - // not a class IRI and should not be added. - // Similarly, íf getObjectVar() is bounded to a value and the predicate is not rdf:type. - String key = addKey(node.getPredicateVar()); - if ((key != null) && (key == "http://www.w3.org/1999/02/22-rdf-syntax-ns#type")) { - addKey(node.getObjectVar()); - } - - super.meetNode(node); - } - - /** - * Collects bounded values (i.e. endpoint URLs) from a VALUES clause. - * - * @param node - */ - protected void meetBindingSetAssignmentNode(BindingSetAssignment node) { - LOGGER.debug("binding names=" + node.getBindingNames()); - bindingNames.addAll(node.getBindingNames()); - super.meetNode(node); - } -} diff --git a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/ServiceDescriptionIndexer.java b/src/main/java/uk/ac/cam/cares/jps/base/query/fed/ServiceDescriptionIndexer.java deleted file mode 100644 index 2ba581987..000000000 --- a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/ServiceDescriptionIndexer.java +++ /dev/null @@ -1,407 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; - -import org.apache.commons.io.FileUtils; -import org.apache.http.client.methods.HttpGet; -import org.apache.jena.ontology.OntModel; -import org.apache.jena.query.QuerySolution; -import org.apache.jena.query.ResultSet; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.json.JSONArray; -import org.json.JSONObject; - -import uk.ac.cam.cares.jps.base.exception.JPSRuntimeException; -import uk.ac.cam.cares.jps.base.http.Http; -import uk.ac.cam.cares.jps.base.query.JenaHelper; -import uk.ac.cam.cares.jps.base.query.JenaResultSetFormatter; - -/** - * This class creates a schema-level index from - * service descriptions. - * A service description is an RDF graph containing information about a SPARQL service and its SPARQL endpoints. - * Among other things, the RDF graph usually contains features of the SPARQL service - * and the number of occurrences of relations and classes in triples of the datasets. - * This class uses the IRIs of relations and classes for indexing. - * Each relation and class IRI is mapped to a "postings" list of endpoints / datasets. - * An endpoint / dataset is added to the "postings" list for an IRI if it contains at least - * one triple with this IRI as predicate or object, resp. - * The created index allows to perform conjunctive keyword-based queries. - * Since the keywords are relation and class IRIs, - * the query result can be used for automated endpoint selection. - * - */ -public class ServiceDescriptionIndexer { - - static final Logger LOGGER = LogManager.getLogger(ServiceDescriptionIndexer.class); - - /** - * A helper class to store relevant information filtered from a service description. - * - */ - public class ServiceDescriptionSummary { - public Integer id = null; - public String path = null; - public String endpointURL = null; - public Long ntriples = null; - public Long nentities = null; - public Long nproperties = null; - public Long nclasses = null; - - public ServiceDescriptionSummary(int id) { - this.id = id; - } - - @Override - public String toString() { - return "Summary[#t=" + ntriples + ",#e=" +nentities - + ",#c=" + nclasses + ",#p=" + nproperties + ",url=" + endpointURL + "]"; - } - } - - public class PostingsListElement implements Comparable{ - /** - * ID of the summary of the corresponding service description - */ - public Integer id = null; - /** - * The number of triples in the corresponding datasets wrt. to the index key (relation or class IRI) - */ - public Long tripleNumber = null; - - public PostingsListElement(Integer id, Long number) { - this.id = id; - this.tripleNumber = number; - } - - /** - * Elements in the postings list are ordered by their ID. - */ - @Override - public int compareTo(PostingsListElement element) { - return this.id.compareTo(element.id); - } - } - - private final static String INDEX_NAME = "SCHEMA"; - /** - * Each summary in the list represents the relevant information of a service description - */ - private List summaries = new ArrayList(); - private SimpleMultiIndex index = new SimpleMultiIndex(); - - public ServiceDescriptionIndexer() { - } - - private Map> getSchemaIndex() { - return index.getIndex(INDEX_NAME); - } - - /** - * Returns all indexed relation and class IRIs - * - * @return - */ - public Set getKeys() { - return getSchemaIndex().keySet(); - } - - public Set getPostingsList(String key) { - return index.getPostingsList(INDEX_NAME, key); - } - - /** - * Returns a list of summaries for all added service descriptions. - * - * @return - */ - public List getSummaries() { - return summaries; - } - - /** - * Creates a map between IRIs (classes or properties depending on the given type) - * and the number of triples in the service description. - * - * @param model contains the service description as RDF graph - * @param sparql to query the RDF graph - * @param type either class or property - * @return - */ - private static Map getNumberOfTriples(OntModel model, String sparql, String type) { - ResultSet result = JenaHelper.query(model, sparql); - JSONObject joOrig = JenaResultSetFormatter.convertToSimplifiedList(result); - JSONArray list = joOrig.getJSONArray("results"); - - Iterator it = list.iterator(); - Map map = new HashMap(); - while (it.hasNext()) { - JSONObject current = (JSONObject) it.next(); - map.put(current.getString(type), current.getLong("ntriples")); - } - return map; - } - - /** - * Queries the service description for the number of triples wrt. classes. - * - * @param model contains the service description as RDF graph - * @return - */ - public static Map getNumberOfClassTriples(OntModel model) { - String sparql = "SELECT * WHERE { \r\n" - + " ?s ?class . \r\n" - + " ?s ?ntriples . \r\n" - + "}"; - return getNumberOfTriples(model, sparql, "class"); - } - - /** - * Queries the service description for the number of triples wrt. properties. - * - * @param model contains the service description as RDF graph - * @return - */ - public static Map getNumberOfPropertyTriples(OntModel model) { - String sparql = "SELECT * WHERE { \r\n" - + " ?s ?property . \r\n" - + " ?s ?ntriples . \r\n" - + "}"; - return getNumberOfTriples(model, sparql, "property"); - } - - /** - * Adds new service descriptions for indexing. - * Three different types are allowed: - *

- * (1) A local file given by its path: - * The file represents a (serialized) service description stored locally.
- * (2) A local directory given by its directory path: - * All files in the directory and subdirectories are read recursively. - * Each file represents a (serialized) service description store locally.
- * (3) A URL that can be requested and returns service description - * (usually, according to the - * - * SPARQL protocol). - * - * @param dirFileorUrl a (mixed) list of directories, files or URLs - */ - public void addServiceDescription(String... dirFileorUrl) { - - for (String path : dirFileorUrl) { - File file = new File(path); - if (file.isDirectory()) { - Collection files = FileUtils.listFiles(file, null, true); - for (File f : files) { - add(f.getAbsolutePath()); - } - } else { - add(path); - } - } - } - - /** - * Requests the service description from the given URL - * - * @param url - * @return - */ - public static String queryServiceDescription(String url) { - String accept = "application/rdf+xml"; - HttpGet request = Http.get(url, accept); - return Http.execute(request); - } - - /** - * Reads the file or request the URL, - * queries relevant information from the corresponding service description, - * and adds it to index - * - * @param path a file or URL - */ - private void add(String path) { - - OntModel model = null; - if (path.startsWith("http")) { - String descr = queryServiceDescription(path); - model = JenaHelper.createModel(); - JenaHelper.readFromString(descr, model); - } else { - model = JenaHelper.createModel(path); - } - - ServiceDescriptionSummary summary = createSummary(); - fillSummary(summary, path, model); - - // add classes and their counts to index - Map map = getNumberOfClassTriples(model); - for (String key : map.keySet()) { - PostingsListElement elem = new PostingsListElement(summary.id, map.get(key)); - index.add(INDEX_NAME, key, elem); - } - - // add properties and their counts to index - map = getNumberOfPropertyTriples(model); - for (String key : map.keySet()) { - PostingsListElement elem = new PostingsListElement(summary.id, map.get(key)); - index.add(INDEX_NAME, key, elem); - } - - - LOGGER.debug("Added service description=" + summary + " from path=" + path); - } - - /** - * Queries the service description for information that is relevant for indexing - * and conjunctive queries and adds the information to the given summary. - * - * @param summary empty summary to add relevant information - * @param path file or URL - * @param model contains the service description as RDF graph - */ - public void fillSummary(ServiceDescriptionSummary summary, String path, OntModel model) { - - summary.path = path; - - String sparql = "PREFIX rdf: \r\n" - + "PREFIX sd: \r\n" - + "PREFIX void: \r\n" - + "SELECT * WHERE {\r\n" - + " ?dataset rdf:type sd:Dataset .\r\n" - + " ?dataset sd:defaultGraph ?graph .\r\n" - + " ?graph void:triples ?ntriples .\r\n" - + " ?graph void:entities ?nentities .\r\n" - + " ?graph void:properties ?nproperties .\r\n" - + " ?graph void:classes ?nclasses .\r\n" - + "}"; - - ResultSet result = JenaHelper.query(model, sparql); - JSONObject jo = JenaResultSetFormatter.convertToSimplifiedList(result); - JSONArray list = jo.getJSONArray("results"); - - Iterator it = list.iterator(); - JSONObject current = (JSONObject) it.next(); - if (it.hasNext()) { - throw new JPSRuntimeException("The query result set contains more than one row, service description=" + path); - } - - - - // the following "lambda method" get returns null if the key is not found - // in contrast to current.get which throws an exception in this case - Function get = ( s -> { - if (current.has(s)) - {return current.getLong(s); }; - return null; - }); - - summary.ntriples = get.apply("ntriples"); - summary.nentities = get.apply("nentities"); - summary.nproperties = get.apply("nproperties"); - summary.nclasses = get.apply("nclasses"); - - - // query endpoint URL - sparql = "PREFIX rdf: \r\n" - + "PREFIX sd: \r\n" - + "PREFIX void: \r\n" - + "SELECT * WHERE {\r\n" - + " ?service sd:endpoint ?endpoint .\r\n" - + "}"; - - result = JenaHelper.query(model, sparql); - QuerySolution s = result.nextSolution(); - String endpointURL = s.get("endpoint").asResource().getURI(); - // HACK: The Blazegraph instance for citiesKG does not provide the correct endpoint URL - // e.g. the port in http://localhost:9999/blazegraph/namespace/singaporeEPSG24500/sparql is incorrect - // maybe it is not configured correctly - if (endpointURL.startsWith("http://localhost:9999")) { - int i = endpointURL.indexOf("namespace/"); - String namespace = endpointURL.substring(i, endpointURL.length()); - summary.endpointURL = "http://www.theworldavatar.com:83/citieskg/" + namespace; - LOGGER.info("changed endpoint URL from " + endpointURL + " to " + summary.endpointURL); - } else { - summary.endpointURL = endpointURL; - } - } - - /** - * Creates a new empty summary with an increased id and adds it to the list of all summaries. - * - * @return empty summary - */ - public synchronized ServiceDescriptionSummary createSummary() { - int id = summaries.size(); - ServiceDescriptionSummary summary = new ServiceDescriptionSummary(id); - summaries.add(summary); - return summary; - } - - /** - * Performs a conjunctive query for the given list of keywords. - * The keywords must be relation or class IRIs. - * The method uses the index previously created from service descriptions - * to find all endpoints / datasets that contain at least one relevant triple - * for each IRI in the list of keywords. - * - * @param keywords a list of relation and class IRIs - * @return list of summaries containing query relevant endpoint URLs - */ - public List conjunctiveQuery(List keywords) { - - List result = new ArrayList(); - - // for each service descriptions, calculate the number of supported given keys - Map mapId2Count = new HashMap(); - for (String key : keywords) { - Set set = index.getPostingsList(INDEX_NAME, key); - if (set == null) { - LOGGER.warn("no postings list was found for key=" + key); - break; - } - for (PostingsListElement elem : set) { - int id = elem.id; - if (mapId2Count.containsKey(id)) { - int count = mapId2Count.get(id) + 1; - mapId2Count.put(id, count); - } else { - mapId2Count.put(id, 1); - } - } - } - - // find all service descriptions that support all given keys - for (Integer id : mapId2Count.keySet()) { - int count = mapId2Count.get(id); - if (count == keywords.size()) { - ServiceDescriptionSummary summary = getSummaries().get(id); - result.add(summary); - } - } - - return result; - } - - /** - * Returns the endpoints URLs corresponding to all added service descriptions. - * - * @return endpoint URLs - */ - public List getEndpointUrls() { - List urls = new ArrayList(); - for (ServiceDescriptionSummary summary : getSummaries()) { - urls.add(summary.endpointURL); - } - return urls; - } -} diff --git a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/SimpleMultiIndex.java b/src/main/java/uk/ac/cam/cares/jps/base/query/fed/SimpleMultiIndex.java deleted file mode 100644 index dc088b574..000000000 --- a/src/main/java/uk/ac/cam/cares/jps/base/query/fed/SimpleMultiIndex.java +++ /dev/null @@ -1,46 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - -/** - * A very simple implementation of a multi-index with postings list. - * An index is a map from an index key (of type K) to a set of entries (of type V). - * The class can manage more than one index, e.g. an schema-level and an index-level index. - * Different indexes are accessed by different index names. - * - * @param the type of the index, e.g. String for instance IRIs - * @param the type of the entries in the postings list, e.g. String for endpoint URLs - */ -public class SimpleMultiIndex { - - private Map>> indexNameMap = new HashMap>>(); - - public void add(String indexName, K key, V value) { - Map> index = indexNameMap.get(indexName); - if (index == null) { - index = new HashMap>(); - indexNameMap.put(indexName, index); - } - Set postingsList = index.get(key); - if (postingsList == null) { - postingsList = new TreeSet(); - index.put(key, postingsList); - } - postingsList.add(value); - } - - public Map> getIndex(String indexName) { - return indexNameMap.get(indexName); - } - - public Set getPostingsList(String indexName, K key) { - Map> index = getIndex(indexName); - if (index == null) { - return null; - } - return index.get(key); - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/BlazegraphRepositoryWrapperIntegrationTest.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/BlazegraphRepositoryWrapperIntegrationTest.java deleted file mode 100644 index 3de43ba6d..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/BlazegraphRepositoryWrapperIntegrationTest.java +++ /dev/null @@ -1,90 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import org.apache.jena.ontology.OntModel; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.json.JSONArray; -import org.junit.Ignore; -import org.junit.Test; - -import junit.framework.TestCase; -import uk.ac.cam.cares.jps.base.query.JenaHelper; - -@Ignore("The code this tests is not used and takes a long time to run.") -public class BlazegraphRepositoryWrapperIntegrationTest extends TestCase { - - static final Logger LOGGER = LogManager.getLogger(BlazegraphRepositoryWrapperIntegrationTest.class); - - @Test - public void testGetParts1() { - String serviceUrl = "http://localhost:8080/blazegraph"; - String[] parts = BlazegraphRepositoryWrapper.getParts(serviceUrl); - assertEquals(serviceUrl, parts[0]); - assertNull(parts[1]); - } - - @Test - public void testGetParts2() { - String serviceUrl = "http://localhost:8080/blazegraph"; - String namespace = "anynamespace"; - String endpointUrl = serviceUrl + BlazegraphRepositoryWrapper.getPathForBlazegraph(namespace); - String[] parts = BlazegraphRepositoryWrapper.getParts(endpointUrl); - assertEquals(serviceUrl, parts[0]); - assertEquals(namespace, parts[1]); - } - - @Test - public void testCreateNamespace() { - - String serviceUrl = TripleStoreProvider.getServiceUrl(TripleStoreProvider.ID_BLAZEGRAPH_1); - BlazegraphRepositoryWrapper wrapper = new BlazegraphRepositoryWrapper(serviceUrl); - - String newnamespace = "testEmpty"; - Properties props = TripleStoreProvider.readStandardNamespacePropertiesForBlazegraph(); - wrapper.createNamespace(newnamespace, props); - - // assert namespace - List namespaces = wrapper.queryNamespaces(false); - LOGGER.debug("found namespaces after creating new name space=" + namespaces.toString()); - String message = "new namespace was not found, namespace=" + newnamespace; - assertTrue(message, namespaces.contains(newnamespace)); - - // assert queries are possible and empty new dataset returns empty result - String sparql = "SELECT * WHERE { ?s ?p ?o }"; - String result = wrapper.query(sparql, newnamespace); - JSONArray array = new JSONArray(result); - assertEquals(0, array.length()); - } - - @Test - public void testQueryServiceDescription() { - - String serviceUrl = TripleStoreProvider.getServiceUrl(TripleStoreProvider.ID_BLAZEGRAPH_1); - //String serviceUrl = "http://localhost:8091/blazegraph"; - BlazegraphRepositoryWrapper wrapper = new BlazegraphRepositoryWrapper(serviceUrl); - - String namespace = TripleStoreProvider.NAMESPACE_WIKIDATA_SMALL; - String endpointUrl = TripleStoreProvider.getEndpointUrl(namespace); - - // assert that data can be queried and the count is correct - String sparql = "PREFIX wdt: \r\n" - + "SELECT (COUNT(DISTINCT ?s) as ?scount) WHERE { ?s wdt:P662 ?o }"; - String result = wrapper.query(sparql, namespace); - JSONArray array = new JSONArray(result); - int actualCount = array.getJSONObject(0).getInt("scount"); - int expectedCount = 581; - assertEquals(expectedCount, actualCount); - - // assert that the service description has the same triple number for predicate P662 as the count - String serviceDescr = ServiceDescriptionIndexer.queryServiceDescription(endpointUrl); - OntModel model = JenaHelper.createModel(); - JenaHelper.readFromString(serviceDescr, model); - Map map = ServiceDescriptionIndexer.getNumberOfPropertyTriples(model); - long actualTripleNumber = map.get("http://www.wikidata.org/prop/direct/P662"); - assertEquals(expectedCount, actualTripleNumber); - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DataSourceSelectorTest.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DataSourceSelectorTest.java deleted file mode 100644 index 42b1acb18..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DataSourceSelectorTest.java +++ /dev/null @@ -1,130 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.Arrays; -import java.util.List; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.Ignore; - -import uk.ac.cam.cares.jps.base.query.fed.ParsedQueryTreeVisitor.ServiceGraphPatternSummary; - -@Ignore("The code this tests is not used and takes a long time to run.") -public class DataSourceSelectorTest extends QueryProvider { - - static final Logger LOGGER = LogManager.getLogger(DataSourceSelectorTest.class); - - private ServiceDescriptionIndexer getSmallTestIndexer() { - return ServiceDescriptionIndexerTest.getSmallTestIndexer(); - } - - private void assertKeySuffixes(List keys, int expectedNumber, String[] expectedSuffixes) { - assertEquals(expectedNumber, keys.size()); - int count = 0; - for (String suffix : expectedSuffixes) { - for (String key : keys) { - if (key.endsWith(suffix)) { - count++; - break; - } - } - } - assertEquals(expectedNumber, count); - } - - @Override - public void setUp() throws Exception { - super.setUp(); - setServiceUrlParams("http://my.local.host:8080/myblazegraph", false); - } - - public void testExtractKeysForSubqueries() { - setQueryFormatParams(false, true, false); - Query query = getSparqlDistributedLab_1(); - String sparql = query.sparql; - List summaries = DataSourceSelector.extractKeysForSubqueries(sparql); - - assertEquals(2, summaries.size()); - assertKeySuffixes(summaries.get(0).keys, 4, new String[] {"hasYield", "hasValue", "hasNumericalValue", "hasUnit" }); - assertKeySuffixes(summaries.get(1).keys, 2, new String[] {"utilisesHistoricalData", "refersTo" }); - } - - public void testAddValuesClause_1() { - setQueryFormatParams(false, true, false); - Query query = getSparqlDistributedLab_1(); - String sparql = query.sparql; - sparql += "ORDER BY ASC(?exp)\r\n" + "LIMIT 1\r\n"; - - String varName = "service1"; - String[] varValues = new String[] { - "http://localhost:8080/blazegraph/namespace/lab_1/sparql", - "http://localhost:8080/blazegraph/namespace/lab_2/sparql" - }; - sparql = DataSourceSelector.addValuesClause(sparql, varName, Arrays.asList(varValues)); - varName = "service2"; - varValues = new String[] {"http://localhost:8080/blazegraph/namespace/doe_chemrxn/sparql"}; - sparql = DataSourceSelector.addValuesClause(sparql, varName, Arrays.asList(varValues)); - - assertTrue(sparql.contains("VALUES ?service1 { " - + " }")); - assertTrue(sparql.contains("VALUES ?service2 { }")); - } - - public void testAddValuesClause_2() { - setQueryFormatParams(false, true, false); - Query query = getSparqlDistributedLab_2(); - String sparql = query.sparql; - - String varName = "service1"; - String[] varValues = new String[] { - "http://localhost:8080/blazegraph/namespace/lab_1/sparql", - "http://localhost:8080/blazegraph/namespace/lab_2/sparql" - }; - sparql = DataSourceSelector.addValuesClause(sparql, varName, Arrays.asList(varValues)); - - assertTrue(sparql.contains("VALUES ?service1 { " - + " }")); - } - - public void testAddValuesClause_3() { - setQueryFormatParams(false, true, false); - Query query = getSparqlBiodieselCityGML(); - String sparql = query.sparql; - - ServiceDescriptionIndexer indexer = getSmallTestIndexer(); - DataSourceSelector selector = new DataSourceSelector(indexer); - sparql = selector.addValuesClauses(sparql); - - assertTrue(sparql.contains("VALUES ?service1 { }")); - assertTrue(sparql.contains("VALUES ?service2 { }")); - } - - public void testAddValuesClausesWithGivenServiceIRIs() throws Exception { - setQueryFormatParams(false, true, false); - Query query = getSparqlLocalWikidataWithPubChemCID887(); - String sparql = query.sparql; - - sparql = sparql.replace("?serva", ""); - sparql = sparql.replace("?servb", ""); - ServiceDescriptionIndexer indexer = getSmallTestIndexer(); - DataSourceSelector selector = new DataSourceSelector(indexer); - String newSparql = selector.addValuesClauses(sparql); - - // assert that no VALUES clauses have been added - assertFalse(newSparql.contains("VALUES")); - assertEquals(sparql, newSparql); - } - - public void testAddValuesClausesWithGivenValueClauses() { - setQueryFormatParams(false, true, true); - Query query = getSparqlLocalWikidataWithPubChemCID887(); - String sparql = query.sparql; - - ServiceDescriptionIndexer indexer = getSmallTestIndexer(); - DataSourceSelector selector = new DataSourceSelector(indexer); - String newSparql = selector.addValuesClauses(sparql); - - // assert that no additional VALUES clauses have been added - assertEquals(sparql, newSparql); - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetGenerator.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetGenerator.java deleted file mode 100644 index 424a47bab..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetGenerator.java +++ /dev/null @@ -1,194 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.function.Supplier; - -public class DatasetGenerator { - - public class Pair { - public S x1; - public T x2; - public Pair(S x1, T x2) { - this.x1 = x1; - this.x2 = x2; - } - } - - private String prefixes = null; - private List triplePatterns = new ArrayList(); - List>> generators = new ArrayList>>(); - private List> generatedValues = new ArrayList>(); - private StringBuffer b = new StringBuffer(); - - public DatasetGenerator(String prefixes) { - this.prefixes = prefixes; - } - - public DatasetGenerator pattern(String triplePattern) { - triplePatterns.add(triplePattern); - return this; - } - - public DatasetGenerator generator(String variableName, Supplier dataGenerator) { - generators.add(new Pair>(variableName, dataGenerator)); - return this; - } - - public DatasetGenerator generator(String variableName, Supplier dataGenerator, int maxBeforeNull) { - if (maxBeforeNull < 0) { - return generator(variableName, dataGenerator); - } - Supplier optionalSupplier = supplierOptional(dataGenerator, maxBeforeNull); - generators.add(new Pair>(variableName, optionalSupplier)); - return this; - } - - private Map generateVariableValues() { - Map name2value = new HashMap(); - for (Pair> current : generators) { - String name = current.x1; - Supplier supplier = current.x2; - Object value = supplier.get(); - String valueString = (value == null)? null : value.toString(); - name2value.put(name, valueString); - } - return name2value; - } - - public DatasetGenerator generateVariableValues(int number) { - for (int i=0; i generated = generateVariableValues(); - generatedValues.add(generated); - } - return this; - } - - public List getGeneratedValues(String variableName, int maxNumber) { - List result = new ArrayList(); - for (Map current : generatedValues) { - String value = current.get(variableName); - result.add(value); - if (result.size() == maxNumber) { - break; - } - } - return result; - } - - public List getOrderedVariableNames() { - - List varNames = new ArrayList(); - for (Pair> current : generators) { - varNames.add(current.x1); - } - - // variable names such as "?scfEnergy" "?scfEnergyABCValue" must be ordered - // by decreasing String length such that "?scfEnergyABCValue" is replaced before "?scfEnergy"; - // otherwise we would obtain e.g. "-123.1ABCValue" - Comparator comparator = new Comparator() { - - @Override - public int compare(String o1, String o2) { - return o2.length() - o1.length(); - } - }; - Collections.sort(varNames, comparator); - return varNames; - } - - public String build() { - b.append(prefixes); - b.append("\r\n"); - b.append("\r\n"); - - List varNames = getOrderedVariableNames(); - - for (Map current : generatedValues) { - - for (String triplePattern : triplePatterns) { - for (String variableName : varNames) { - String value = current.get(variableName); - if (value != null) { - triplePattern = triplePattern.replace(variableName, value); - } - } - if (triplePattern.indexOf("?") == -1) { - // i.e. all variables are bounded - b.append(triplePattern).append(" .\r\n"); - } - } - b.append("\r\n"); - } - return b.toString(); - } - - public static Supplier supplierConstant(Object constant) { - Supplier supplier = () -> constant; - return supplier; - } - - public static Supplier supplierUUID(String firstPart, String lastPart) { - Supplier supplier = () -> firstPart + UUID.randomUUID() + lastPart; - return supplier; - } - - public static Supplier supplierList(List list) { - Supplier supplier = new Supplier() { - - private int index = -1; - - @Override - public Object get() { - index++; - return list.get(index); - } - }; - return supplier; - } - - public static Supplier supplierJoin(List list, Supplier supplier) { - Supplier joinSupplier = new Supplier() { - - private int index = -1; - - @Override - public Object get() { - index++; - if (index < list.size()) { - return list.get(index); - } - return supplier.get(); - } - }; - return joinSupplier; - } - - public static Supplier supplierInt(int min, int max) { - int span = max - min + 1; - Supplier supplier = () -> (int) (min + Math.floor(Math.random() * span)); - return supplier; - } - - public static Supplier supplierOptional(Supplier supplier, int maxBeforeNull ) { - Supplier optionalSupplier = new Supplier() { - - private int count = 0; - - @Override - public Object get() { - count++; - if (count > maxBeforeNull) { - return null; - } - return supplier.get(); - } - }; - return optionalSupplier; - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetGeneratorTest.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetGeneratorTest.java deleted file mode 100644 index 951519a43..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetGeneratorTest.java +++ /dev/null @@ -1,155 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.function.Supplier; - -import org.apache.jena.ontology.OntModel; -import org.apache.jena.query.ResultSet; -import org.apache.jena.riot.Lang; -import org.json.JSONArray; -import org.junit.Ignore; - -import junit.framework.AssertionFailedError; -import uk.ac.cam.cares.jps.base.query.JenaHelper; -import uk.ac.cam.cares.jps.base.query.JenaResultSetFormatter; - -@Ignore("The code this tests is not used and takes a long time to run.") -public class DatasetGeneratorTest extends QueryProvider { - - public void testSupplierList() { - List list = Arrays.asList(10, 20, 30); - Supplier supplier = DatasetGenerator.supplierList(list); - assertEquals(10, supplier.get()); - assertEquals(20, supplier.get()); - assertEquals(30, supplier.get()); - - try { - supplier.get(); - throw new AssertionFailedError("should throw an ArrayIndexOutOfBoundsException"); - } catch (ArrayIndexOutOfBoundsException e) { - } - } - - public void testSupplierJoin() { - List list1 = Arrays.asList(10, 20); - List list2 = Arrays.asList("A", "B"); - Supplier supplier = DatasetGenerator.supplierList(list2); - Supplier joinSupplier = DatasetGenerator.supplierJoin(list1, supplier); - assertEquals(10, joinSupplier.get()); - assertEquals(20, joinSupplier.get()); - assertEquals("A", joinSupplier.get()); - assertEquals("B", joinSupplier.get()); - try { - joinSupplier.get(); - throw new AssertionFailedError("should throw an ArrayIndexOutOfBoundsException"); - } catch (ArrayIndexOutOfBoundsException e) { - } - } - - public void testSupplierInt() { - Supplier supplier = DatasetGenerator.supplierInt(-1, 2); - Set set = new HashSet(); - for (int i=0; i<1000; i++) { - set.add((Integer) supplier.get()); - } - assertEquals(4, set.size()); - for (int i=-1; i<=2; i++) { - assertTrue(set.contains(i)); - } - } - - public void testSupplierOptional() { - Supplier supplier = DatasetGenerator.supplierConstant("A"); - supplier = DatasetGenerator.supplierOptional(supplier, 2); - assertEquals("A", supplier.get()); - assertEquals("A", supplier.get()); - assertNull(supplier.get()); - assertNull(supplier.get()); - } - - public void testGetOrderedVariableNames() { - - DatasetGenerator generator = new DatasetGenerator(""). - generator("?scfEnergy", DatasetGenerator.supplierConstant("constant1")). - generator("?scfEnergyValue", DatasetGenerator.supplierConstant("constant2")); - - List varNames = generator.getOrderedVariableNames(); - assertEquals("?scfEnergyValue", varNames.get(0)); - assertEquals("?scfEnergy", varNames.get(1)); - } - - public void testBuild() { - DatasetGenerator generator = new DatasetGenerator(""). - pattern("?species ontospecies:casRegistryID ?crid"). - pattern("?species ontospecies:hasStandardEnthalpyOfFormation ?enthalpy"). - pattern("?enthalpy ontospecies:value ?enthalpyOfFormationValue"). - generator("?species", DatasetGenerator.supplierConstant("SPECIES")). - generator("?crid", DatasetGenerator.supplierConstant("CRID")). - generator("?enthalpy", DatasetGenerator.supplierConstant("ENTHALPY")). - generator("?enthalpyOfFormationValue", DatasetGenerator.supplierConstant("ENTHALPYVALUE")); - - String dataset = generator.generateVariableValues(1).build(); - - String expected = "\r\n" - + "\r\n" - + "SPECIES ontospecies:casRegistryID CRID .\r\n" - + "SPECIES ontospecies:hasStandardEnthalpyOfFormation ENTHALPY .\r\n" - + "ENTHALPY ontospecies:value ENTHALPYVALUE .\r\n" - + "\r\n"; - - assertEquals(expected, dataset); - } - - public void testBuildWithSupplierOptional() { - - DatasetGenerator generator = new DatasetGenerator(""). - pattern("?species ontospecies:casRegistryID ?crid"). - pattern("?species ontospecies:hasStandardEnthalpyOfFormation ?enthalpy"). - generator("?species", DatasetGenerator.supplierConstant("SPECIES")). - generator("?crid", DatasetGenerator.supplierConstant("CRID"), 2). // 2 time CRID, then null - generator("?enthalpy", DatasetGenerator.supplierConstant("ENTHALPY")); - - String dataset = generator.generateVariableValues(4).build(); - - //System.out.println("XXX"); - //System.out.println(dataset); - //System.out.println("YYY"); - - String expected = "\r\n" - + "\r\n" - + "SPECIES ontospecies:casRegistryID CRID .\r\n" - + "SPECIES ontospecies:hasStandardEnthalpyOfFormation ENTHALPY .\r\n" - + "\r\n" - + "SPECIES ontospecies:casRegistryID CRID .\r\n" - + "SPECIES ontospecies:hasStandardEnthalpyOfFormation ENTHALPY .\r\n" - + "\r\n" - + "SPECIES ontospecies:hasStandardEnthalpyOfFormation ENTHALPY .\r\n" - + "\r\n" - + "SPECIES ontospecies:hasStandardEnthalpyOfFormation ENTHALPY .\r\n" - + "\r\n"; - - assertEquals(expected, dataset); - } - - public void testGenerateOntoSpeciesOntoCompChem() { - - int sizeJoin = 25; - String[] datasets = DatasetProvider.generateOntoSpeciesOntoCompChem(100, 200, sizeJoin, -1); - - // merge the triple of both datasets into one RDF graph - OntModel model = JenaHelper.createModel(); - JenaHelper.readFromString(datasets[0], model, Lang.TURTLE); - JenaHelper.readFromString(datasets[1], model, Lang.TURTLE); - - // assert that the non-federated query has result set of size sizeJoin - setQueryFormatParams(false, false, false); - Query query = getSparqlOntoSpeciesOntoCompChemLarge(); - ResultSet result = JenaHelper.query(model, query.sparql); - String resultW3C = JenaResultSetFormatter.convertToJSONW3CStandard(result); - JSONArray ja = JenaResultSetFormatter.convertToSimplifiedJsonArray(resultW3C); - assertEquals(sizeJoin, ja.length()); - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetProvider.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetProvider.java deleted file mode 100644 index 733abd798..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/DatasetProvider.java +++ /dev/null @@ -1,80 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.List; -import java.util.function.Supplier; - -public class DatasetProvider { - - public static String[] generateOntoSpeciesOntoCompChem(int sizeOntoSpecies, int sizeOntoCompChem, int sizeJoin, int numbercrid) { - - DatasetGenerator genSpecies = createGeneratorOntoSpecies(numbercrid); - genSpecies.generateVariableValues(sizeOntoSpecies); - String datasetSpecies = genSpecies.build(); - - List joinValues = genSpecies.getGeneratedValues("?species", sizeJoin); - DatasetGenerator genCompChem = createGeneratorOntoCompChem(joinValues); - genCompChem.generateVariableValues(sizeOntoCompChem); - String datasetCompChem = genCompChem.build(); - - return new String[] { datasetSpecies, datasetCompChem }; - } - - public static DatasetGenerator createGeneratorOntoSpecies(int numbercrid) { - String prefixes = "@prefix ontospecies: .\r\n" - + "@prefix ontocompchem: .\r\n" - + "@prefix gc: .\r\n" - + "@prefix kbontospecies: .\r\n"; - - DatasetGenerator generator = new DatasetGenerator(prefixes). - pattern("?species ontospecies:casRegistryID ?crid"). - pattern("?species ontospecies:hasAtomicBond ?atomicBond"). - pattern("?species ontospecies:hasGeometry ?geometry"). - pattern("?species ontospecies:hasStandardEnthalpyOfFormation ?enthalpy"). - pattern("?enthalpy ontospecies:value ?enthalpyOfFormationValue"); - - generator.generator("?species", DatasetGenerator.supplierUUID("kbontospecies:Species_", "")). - generator("?crid", DatasetGenerator.supplierUUID("\"107-18-6", "\""), numbercrid). - generator("?atomicBond", DatasetGenerator.supplierUUID("\"5 1 1 6 1 1 1 2 2 8 3 1 2 3 1 2 7 1 10 4 1 3 4 1 3 9 1", "\"")). - generator("?geometry", DatasetGenerator.supplierUUID("\"C -0.923508 -0.555332 -1.207091 C -0.508887 -0.407765 0.049627 C 0.368786 0.714318 0.522948 O 1.573496 0.239793 1.13319 H -0.648316 0.15453 -1.982095 H -1.557937 -1.381879 -1.506737 H -0.792092 -1.134554 0.808132 H 0.589914 1.398858 -0.30644 H -0.133639 1.289675 1.305278 H 2.032282 -0.317645 0.495588", "\"")). - generator("?enthalpy", DatasetGenerator.supplierUUID("kbontospecies:StandardEnthalpyOfFormation_", "")). - generator("?enthalpyOfFormationValue", DatasetGenerator.supplierConstant("-123.6")); - - return generator; - } - - public static DatasetGenerator createGeneratorOntoCompChem(List joinValuesSpecies) { - String prefixes = "@prefix ontospecies: .\r\n" - + "@prefix ontocompchem: .\r\n" - + "@prefix gc: .\r\n" - + "@prefix kbontospecies: .\r\n" - + "@prefix kbontocompchem: .\r\n"; - - DatasetGenerator generator = new DatasetGenerator(prefixes). - pattern("?compchemspecies ontocompchem:hasUniqueSpecies ?species"). - pattern("?compchemspecies gc:isCalculationOn ?scfEnergy"). - pattern("?scfEnergy a ontocompchem:ScfEnergy"). - pattern("?scfEnergy gc:hasElectronicEnergy ?scfElectronicEnergy"). - pattern("?scfElectronicEnergy gc:hasValue ?scfEnergyValue"). - pattern("?compchemspecies gc:isCalculationOn ?zeroEnergy"). - pattern("?zeroEnergy a ontocompchem:ZeroPointEnergy"). - pattern("?zeroEnergy gc:hasElectronicEnergy ?zeroElectronicEnergy"). - pattern("?zeroElectronicEnergy gc:hasValue ?zeroEnergyValue"); - - - Supplier joinsupplier = DatasetGenerator.supplierUUID("kbontospecies:Species_", ""); ; - if (joinValuesSpecies != null) { - joinsupplier = DatasetGenerator.supplierJoin(joinValuesSpecies, joinsupplier); - } - - generator.generator("?species", joinsupplier). - generator("?compchemspecies", DatasetGenerator.supplierUUID("kbontocompchem:spec_", "")). - generator("?scfEnergy", DatasetGenerator.supplierUUID("kbontocompchem:scfenergy_", "")). - generator("?scfElectronicEnergy", DatasetGenerator.supplierUUID("kbontocompchem:electronicenergy_", "")). - generator("?scfEnergyValue", DatasetGenerator.supplierConstant(-314.455919684)). - generator("?zeroEnergy", DatasetGenerator.supplierUUID("kbontocompchem:zeropointenergy_", "")). - generator("?zeroElectronicEnergy", DatasetGenerator.supplierUUID("kbontocompchem:zeroelectronicenergy_", "")). - generator("?zeroEnergyValue", DatasetGenerator.supplierConstant(0.219432)); - - return generator; - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryBlazegraphGivenEndpointsIntegrationTest.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryBlazegraphGivenEndpointsIntegrationTest.java deleted file mode 100644 index fbec0cbf5..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryBlazegraphGivenEndpointsIntegrationTest.java +++ /dev/null @@ -1,149 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.io.IOException; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.Ignore; - -import uk.ac.cam.cares.jps.base.query.RemoteStoreClient; - -@Ignore("The code this tests is not used and takes a long time to run.") -/** - * One of multiple test configurations, see {@link QueryProvider} for details. - */ -public class FedQueryBlazegraphGivenEndpointsIntegrationTest extends QueryProvider { - - private static final Logger LOGGER = LogManager.getLogger(FedQueryBlazegraphGivenEndpointsIntegrationTest.class); - - @Override - public void setUp() throws Exception { - super.setUp(); - TripleStoreProvider.getInstance(); - setQueryFormatParams(false, true, true); - setServiceUrlParams(null, true); - } - - protected void queryAndAssert(Query query) { - queryAndAssert(query.sparql, query.result); - } - - private void queryAndAssert(String sparql, String expectedResult) { - LOGGER.debug("Federated query for Blazegraph with given service endpoints and without data selection"); - String fedEngineUrl = TripleStoreProvider.getEndpointUrl(TripleStoreProvider.NAMESPACE_BLAZEGRAPH_EMTPY); - FederatedQueryInterface repo = FederatedQueryFactory.createForQueriesWithGivenEndpoints(fedEngineUrl); - String actualJson = repo.executeFederatedQuery(sparql); - assertQueryResult(expectedResult, actualJson); - } - - public void testSparqlDistributedLab_1() { - queryAndAssert(getSparqlDistributedLab_1()); - } - - public void testSparqlDistributedLab_2() { - queryAndAssert(getSparqlDistributedLab_2()); - } - - public void testSparqlDistributedLab_3() { - queryAndAssert(getSparqlDistributedLab_3()); - } - - public void testSparqlDistributedLab_3_inverted_service_order() { - queryAndAssert(getSparqlDistributedLab_3_inverted_service_order()); - } - - public void testSparqlOntoSpeciesOntoCompChemSmall() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemSmall()); - } - - public void testSparqlOntoSpeciesOntoCompChemMedium() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemMedium()); - } - - public void testSparqlOntoSpeciesOntoCompChemLarge() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemLarge()); - } - - public void xxxtestRemoteSparqlBiodieselCityGML() { - queryAndAssert(getSparqlBiodieselCityGML()); - } - - public void xxxtestRemoteSparqlWikidataDBpedia() { - queryAndAssert(getSparqlWikidataDBpedia()); - } - - private String createEndpoint(String containerId, String namespace) { - TripleStoreProvider provider = TripleStoreProvider.getInstance(); - String path = BlazegraphRepositoryWrapper.getPathForBlazegraph(namespace); - provider.createDatasetBlazegraph(containerId, namespace, path, null); - return TripleStoreProvider.getEndpointUrl(namespace); - } - - public void testSelectDistinctSolvesProblemWithDuplicatedRows() throws IOException { - - String prefixes = "PREFIX twa: \r\n" - + "PREFIX ontospecies: \r\n" - + "PREFIX ontocompchem: \r\n"; - - // create first endpoint and insert triples - String namespace1 = "duplicate_1"; - String url1 = createEndpoint(TripleStoreProvider.ID_BLAZEGRAPH_1, namespace1); - String sparql = prefixes - + "INSERT DATA {\r\n" - + " twa:1001 ontospecies:casRegistryID 1001 .\r\n" - + " twa:1002 ontospecies:casRegistryID 1002 .\r\n" - + " twa:1003 ontospecies:casRegistryID 1003 .\r\n" - + " twa:1004 ontospecies:casRegistryID 1004 .\r\n" - + "}"; - RemoteStoreClient client = new RemoteStoreClient(url1, url1); - client.executeUpdate(sparql); - - //sparql = prefixes + "SELECT * WHERE { ?s ?p ?o }"; - //JSONArray result = client.executeQuery(sparql); - //System.out.println("RESULT 1 = \n" + result); - - // create second endpoint and insert triples - String namespace2 = "duplicate_2"; - String url2 = createEndpoint(TripleStoreProvider.ID_BLAZEGRAPH_2, namespace2); - sparql = prefixes - + "INSERT DATA {\r\n" - + " twa:1001_1 ontocompchem:hasUniqueSpecies twa:1001 .\r\n" // + 1 - + " twa:1001_2 ontocompchem:hasUniqueSpecies twa:1001 .\r\n" // + 3 - + " twa:1001_3 ontocompchem:hasUniqueSpecies twa:1001 .\r\n" // + 5 - //+ " twa:1001_4 ontocompchem:hasUniqueSpecies twa:1001 .\r\n" // + 7 - + " twa:1002_1 ontocompchem:hasUniqueSpecies twa:1002 .\r\n" // + 1 - + " twa:1002_2 ontocompchem:hasUniqueSpecies twa:1002 .\r\n" // + 3 - + " twa:1003_1 ontocompchem:hasUniqueSpecies twa:1003 .\r\n" // + 1 (1003_1 with existing species in duplicate_1) - + " twa:1003_1 ontocompchem:hasUniqueSpecies twa:1043 .\r\n" // + 0 (1003_1 with non-existing species in duplicate_1) - + " twa:1043_1 ontocompchem:hasUniqueSpecies twa:1043 .\r\n" // + 0 (another IRI with non-existing species in duplicate_1) - + "}"; - client = new RemoteStoreClient(url2, url2); - client.executeUpdate(sparql); - - // execute the federated query - String fedQuery = prefixes - + "SELECT *\r\n" - + "WHERE {\r\n" - + " SERVICE <%s> {\r\n" - + " ?compchemspecies ontocompchem:hasUniqueSpecies ?species .\r\n" - + " }\r\n" - + " SERVICE <%s> {\r\n" - + " ?species ontospecies:casRegistryID ?crid .\r\n" - + " }\r\n" - + "}"; - String dockerUrl1 = TripleStoreProvider.getDockerEndpointUrl(namespace1); - String dockerUrl2 = TripleStoreProvider.getDockerEndpointUrl(namespace2); - fedQuery = String.format(fedQuery, dockerUrl2, dockerUrl1); - - // - String expected = "6"; - - // check that there 14 rows instead - String actual = "14"; // = 9 + 4 + 1 - queryAndAssert(fedQuery, actual); - - // use DISTINCT to eliminate the duplicated rows - fedQuery = fedQuery.replace("SELECT", "SELECT DISTINCT"); - queryAndAssert(fedQuery, expected); - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryBlazegraphSourceSelectionIntegrationTest.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryBlazegraphSourceSelectionIntegrationTest.java deleted file mode 100644 index 8eacbf895..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryBlazegraphSourceSelectionIntegrationTest.java +++ /dev/null @@ -1,76 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.Map; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.Ignore; - -@Ignore("The code this tests is not used and takes a long time to run.") -/** - * One of multiple test configurations, see {@link QueryProvider} for details. - */ -public class FedQueryBlazegraphSourceSelectionIntegrationTest extends QueryProvider { - - private static final Logger LOGGER = LogManager.getLogger(FedQueryBlazegraphSourceSelectionIntegrationTest.class); - - @Override - public void setUp() throws Exception { - super.setUp(); - TripleStoreProvider.getInstance(); - setQueryFormatParams(false, true, false); - setServiceUrlParams(null, true); - } - - protected void queryAndAssert(Query query) { - queryAndAssert(query.sparql, query.result); - } - - private void queryAndAssert(String sparql, String expectedResult) { - LOGGER.debug("Federated query for Blazegraph with endpoint selection"); - String fedEngineUrl = TripleStoreProvider.getEndpointUrl(TripleStoreProvider.NAMESPACE_BLAZEGRAPH_EMTPY); - ServiceDescriptionIndexer indexer = getIndexer(); - LOGGER.debug("number of endpoints=" + indexer.getEndpointUrls().size()); - Map host2host = TripleStoreProvider.getHostConversionMap(); - FederatedQueryInterface repo = FederatedQueryFactory.createWithEndpointSelection(fedEngineUrl, indexer, host2host); - //FederatedQueryInterface repo = FederatedQueryFactory.createForQueriesWithGivenEndpoints(fedEngineUrl); - String actualJson = repo.executeFederatedQuery(sparql); - assertQueryResult(expectedResult, actualJson); - } - - public void testSparqlDistributedLab_1() { - queryAndAssert(getSparqlDistributedLab_1()); - } - - public void testSparqlDistributedLab_2() { - queryAndAssert(getSparqlDistributedLab_2()); - } - - public void testSparqlDistributedLab_3() { - queryAndAssert(getSparqlDistributedLab_3()); - } - - public void testSparqlDistributedLab_3_inverted_service_order() { - queryAndAssert(getSparqlDistributedLab_3_inverted_service_order()); - } - - public void testSparqlOntoSpeciesOntoCompChemSmall() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemSmall()); - } - - public void testSparqlOntoSpeciesOntoCompChemMedium() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemMedium()); - } - - public void testSparqlOntoSpeciesOntoCompChemLarge() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemLarge()); - } - - public void xxxtestRemoteSparqlBiodieselCityGML() { - queryAndAssert(getSparqlBiodieselCityGML()); - } - - public void xxxtestRemoteSparqlWikidataDBpedia() { - queryAndAssert(getSparqlWikidataDBpedia()); - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryRdf4jGivenEndpointsIntegrationTest.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryRdf4jGivenEndpointsIntegrationTest.java deleted file mode 100644 index 151aeaa81..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryRdf4jGivenEndpointsIntegrationTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.Ignore; - -@Ignore("The code this tests is not used and takes a long time to run.") -/** - * One of multiple test configurations, see {@link QueryProvider} for details. - */ -public class FedQueryRdf4jGivenEndpointsIntegrationTest extends QueryProvider { - - private static final Logger LOGGER = LogManager.getLogger(FedQueryRdf4jGivenEndpointsIntegrationTest.class); - - @Override - public void setUp() throws Exception { - super.setUp(); - TripleStoreProvider.getInstance(); - setQueryFormatParams(false, true, true); - setServiceUrlParams(null, true); - } - - protected void queryAndAssert(Query query) { - queryAndAssert(query.sparql, query.result); - } - - private void queryAndAssert(String sparql, String expectedResult) { - LOGGER.debug("Federated query for RDF4J with given service endpoints and without data selection"); - String fedEngineUrl = TripleStoreProvider.getEndpointUrl(TripleStoreProvider.NAMESPACE_RDF4J_EMPTY); - FederatedQueryInterface repo = FederatedQueryFactory.createForQueriesWithGivenEndpoints(fedEngineUrl); - String actualJson = repo.executeFederatedQuery(sparql); - assertQueryResult(expectedResult, actualJson); - } - - public void testSparqlDistributedLab_1() { - queryAndAssert(getSparqlDistributedLab_1()); - } - - public void testSparqlDistributedLab_2() { - queryAndAssert(getSparqlDistributedLab_2()); - } - - public void testSparqlDistributedLab_3() { - queryAndAssert(getSparqlDistributedLab_3()); - } - - public void testSparqlDistributedLab_3_inverted_service_order() { - queryAndAssert(getSparqlDistributedLab_3_inverted_service_order()); - } - - public void testSparqlOntoSpeciesOntoCompChemSmall() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemSmall()); - } - - public void testSparqlOntoSpeciesOntoCompChemMedium() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemMedium()); - } - - public void xxxtestSparqlOntoSpeciesOntoCompChemLarge() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemLarge()); - } - - public void xxxtestRemoteSparqlBiodieselCityGML() { - queryAndAssert(getSparqlBiodieselCityGML()); - } - - public void xxxtestRemoteSparqlWikidataDBpedia() { - queryAndAssert(getSparqlWikidataDBpedia()); - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryRdf4jSourceSelectionIntegrationTest.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryRdf4jSourceSelectionIntegrationTest.java deleted file mode 100644 index 1dca145fe..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedQueryRdf4jSourceSelectionIntegrationTest.java +++ /dev/null @@ -1,122 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.apache.http.client.methods.HttpGet; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.json.JSONArray; -import org.json.JSONObject; -import org.junit.Ignore; - -import uk.ac.cam.cares.jps.base.http.Http; -import uk.ac.cam.cares.jps.base.query.JenaResultSetFormatter; - -@Ignore("The code this tests is not used and takes a long time to run.") -/** - * One of multiple test configurations, see {@link QueryProvider} for details. - */ -public class FedQueryRdf4jSourceSelectionIntegrationTest extends QueryProvider { - - private static final Logger LOGGER = LogManager.getLogger(FedQueryRdf4jSourceSelectionIntegrationTest.class); - private static FederatedQueryInterface engine = null; - private static List endpoints = null; - - @Override - public void setUp() throws Exception { - super.setUp(); - TripleStoreProvider.getInstance(); - setQueryFormatParams(false, true, false); - setServiceUrlParams(null, true); - if (engine == null) { - LOGGER.info("Creating engine with endpoint selection"); - String fedEngineUrl = TripleStoreProvider.getEndpointUrl(TripleStoreProvider.NAMESPACE_RDF4J_EMPTY); - ServiceDescriptionIndexer indexer = getIndexer(); - endpoints = indexer.getEndpointUrls(); - Map host2host = TripleStoreProvider.getHostConversionMap(); - engine = FederatedQueryFactory.createWithEndpointSelection(fedEngineUrl, indexer, host2host); - } - } - - protected void queryAndAssert(Query query) { - queryAndAssert(query.sparql, query.result); - } - - private void queryAndAssert(String sparql, String expectedResult) { - LOGGER.debug("Federated query for RDF4J with endpoint selection"); - LOGGER.debug("number of endpoints=" + endpoints.size()); - String actualJson = engine.executeFederatedQuery(sparql); - assertQueryResult(expectedResult, actualJson); - } - - // https://rdf4j.org/documentation/reference/rest-api/#repository-list - private List getRDF4JEndpoints(String serviceUrl) { - List endpoints = new ArrayList(); - - String url = serviceUrl + "/repositories"; - String accept = "application/sparql-results+json"; - HttpGet request = Http.get(url, accept); - String result = Http.execute(request); - JSONArray ja = JenaResultSetFormatter.convertToSimplifiedJsonArray(result); - for (int i=0; i endpoints = getRDF4JEndpoints(serviceUrl); - LOGGER.debug("endpoints=" + endpoints); - boolean found = false; - for (String endpoint : endpoints) { - if (endpoint.endsWith(namespace)) { - found = true; - break; - } - } - assertTrue("endpoint was not found", found); - } - - public void testSparqlDistributedLab_1() { - queryAndAssert(getSparqlDistributedLab_1()); - } - - public void testSparqlDistributedLab_2() { - queryAndAssert(getSparqlDistributedLab_2()); - } - - public void testSparqlDistributedLab_3() { - queryAndAssert(getSparqlDistributedLab_3()); - } - - public void testSparqlDistributedLab_3_inverted_service_order() { - queryAndAssert(getSparqlDistributedLab_3_inverted_service_order()); - } - - public void testSparqlOntoSpeciesOntoCompChemSmall() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemSmall()); - } - - public void testSparqlOntoSpeciesOntoCompChemMedium() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemMedium()); - } - - public void xxxtestSparqlOntoSpeciesOntoCompChemLarge() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemLarge()); - } - - public void xxxtestRemoteSparqlBiodieselCityGML() { - queryAndAssert(getSparqlBiodieselCityGML()); - } - - public void xxxtestRemoteSparqlWikidataDBpedia() { - queryAndAssert(getSparqlWikidataDBpedia()); - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedXIntegrationTest.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedXIntegrationTest.java deleted file mode 100644 index 16385ed29..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/FedXIntegrationTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.List; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.Ignore; - -@Ignore("The code this tests is not used and takes a long time to run.") -// https://rdf4j.org/documentation/programming/federation/ -/** - * One of multiple test configurations, see {@link QueryProvider} for details. - */ -public class FedXIntegrationTest extends QueryProvider { - - private static final Logger LOGGER = LogManager.getLogger(FedXIntegrationTest.class); - - @Override - public void setUp() throws Exception { - super.setUp(); - TripleStoreProvider.getInstance(); - setQueryFormatParams(false, false, false); - } - - protected void queryAndAssert(Query query) { - queryAndAssert(query.sparql, query.getEndpoints(), query.result); - } - - private void queryAndAssert(String sparql, List endpoints, String expectedResult) { - endpoints = getIndexer().getEndpointUrls(); - LOGGER.debug("FedX with number of endpoints=" + endpoints.size()); - FederatedQueryInterface repo = FederatedQueryFactory.createFedX(endpoints); - String actualJson = repo.executeFederatedQuery(sparql); - assertQueryResult(expectedResult, actualJson); - } - - public void testSparqlDistributedLab_1() { - queryAndAssert(getSparqlDistributedLab_1()); - } - - public void testSparqlDistributedLab_2() { - queryAndAssert(getSparqlDistributedLab_2()); - } - - public void testSparqlDistributedLab_3() { - queryAndAssert(getSparqlDistributedLab_3()); - } - - public void testSparqlDistributedLab_3_inverted_service_order() { - queryAndAssert(getSparqlDistributedLab_3_inverted_service_order()); - } - - public void testSparqlOntoSpeciesOntoCompChemSmall() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemSmall()); - } - - public void testSparqlOntoSpeciesOntoCompChemMedium() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemMedium()); - } - - public void testSparqlOntoSpeciesOntoCompChemLarge() { - queryAndAssert(getSparqlOntoSpeciesOntoCompChemLarge()); - } - - public void xxxtestRemoteSparqlBiodieselCityGML() { - queryAndAssert(getSparqlBiodieselCityGML()); - } - - public void xxxtestRemoteSparqlWikidataDBpedia() { - queryAndAssert(getSparqlWikidataDBpedia()); - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/QueryProvider.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/QueryProvider.java deleted file mode 100644 index 247c0a9be..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/QueryProvider.java +++ /dev/null @@ -1,601 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; - -import junit.framework.TestCase; -import uk.ac.cam.cares.jps.base.exception.JPSRuntimeException; -import uk.ac.cam.cares.jps.base.query.sparql.PrefixToUrlMap; -import uk.ac.cam.cares.jps.base.query.sparql.Prefixes; -import uk.ac.cam.cares.jps.base.query.RemoteStoreClientTest; - -/** - * This is the base class for multiple test configurations of integration tests for executing federated queries. - * The current test configurations (subclasses) are: - *

- * (1) FedX ({@link FedXIntegrationTest}): a federated query engine which is part of RDF4J. - * It accepts SPARQL 1.0 queries without SERVICE clauses as federated queries.
- * (2) RDF4J with given endpoints ({@link FedQueryRdf4jGivenEndpointsIntegrationTest}): - * The usual RDF4J server (which is different to FedX) can also be used as federated query engine - * for SPARQL 1.1 queries with SERVICE clauses and specified endpoint URLs.
- * (3) Blazegraph with given endpoints ({@link FedQueryBlazegraphGivenEndpointsIntegrationTest}): - * The usual Blazegraph server can be used for the same SPARQL 1.1 queries as in (2).
- * (4) RDF4j with unbounded SERVICE variables ({@link FedQueryRdf4jSourceSelectionIntegrationTest}): - * Given a SPARQL 1.1. queries with SERVICE clauses but unbounded SERVICe variables, - * relevant datasets / endpoints are selected and added as VALUES clauses. The derived query is - * executed as in (2).
- * (5) Blazegraph with unbounded SERVICE variables ({@link FedQueryBlazegraphSourceSelectionIntegrationTest}): - * As in (4). But the derived query is executed as in (3). - *

- * Each test configuration uses the {@link FederatedQueryFactory} to create the corresponding engine - * and the same method {@link FederatedQueryInterface#executeFederatedQuery(String)} to execute a federated query. - * An federated query example is shown in {@link FederatedQueryFactory#createForQueriesWithGivenEndpoints(String)}. - * While all test configurations use the same queries with the same basic triple patterns, - * a query may and may not include SERVICE or VALUES clauses. For this reason, a helper class {@link Query} is defined - * that allows to format the same query by means of three parameters, - * see {@link Query#formatQuery(boolean, boolean, boolean)}. - */ -public abstract class QueryProvider extends TestCase { - - /** - * A helper class to format the "same" federated query in different ways - * for different test configurations. - * - */ - public class Query { - - public class Pair { - String paramName = null; - List endpoints = new ArrayList(); - - public Pair(String paramName, List endpoints) { - this.paramName = paramName; - this.endpoints = endpoints; - } - } - - /** - * The plain SPARQL string containing some %s placeholder to insert SERVICE and VALUES clauses. - */ - String sparql = null; - List serviceList = new ArrayList(); - String result = null; - - public void addEndpoints(String paramName, String... endpoints) { - serviceList.add(new Pair(paramName, Arrays.asList(endpoints))); - } - - /** - * Returns all relevant endpoint URLs. - * - * @return - */ - public List getEndpoints() { - Set endpoints = new HashSet(); - for (Pair pair : serviceList) { - endpoints.addAll(pair.endpoints); - } - return new ArrayList(endpoints); - } - - /** - * Formats the "plain" SPARQL string containing some %s placeholders - * that can be replaced by SERVICE and VALUES clauses. - * Only the following combinations make sense: - *

- * (1) false, false, false: returns a valid SPARQL 1.0 without SERVICE and VALUES clauses as used by FedX
- * (2) true, false, false: returns a valid and complete SPARQL 1.1 query with specified endpoint URLs
- * (3) false, true, true: returns a valid and complete SPARQL 1.1 query where SERVICE variables are - * specified by VALUES clauses
- * (4) false, true, false: returns an invalid, incomplete SPARQL 1.1 query; used by the automated - * data selection procedures which adds VALUES clauses to specify the SERVICE variables - * - * @param addServiceUrls inserts SERVICE clauses with endpoint URLs at the placeholders - * @param addServiceParams inserts SERVICE clauses with SERVICE variables at the placeholders - * @param addValuesClauses inserts VALUES clauses with endpoint URLS at the placeholders - * @return - */ - public Query formatQuery(boolean addServiceUrls, boolean addServiceParams, boolean addValuesClauses) { - - if (addServiceUrls && addServiceParams) { - throw new JPSRuntimeException("either addServiceUrls or addServiceParams must be false"); - } - - List values = new ArrayList(); - String value = ""; - boolean serviceAdded = false; - if (addServiceUrls || addServiceParams) { - for (int i=0; i {\r\n"; - values.add(value); - } else if (addServiceParams) { - value = (i>0)? " }\r\n" : ""; - value += " SERVICE ?" + pair.paramName + " {\r\n"; - values.add(value); - } else { - values.add(""); - } - } - } else { - for (int i=0; i "; - } - value += " VALUES ?" + pair.paramName + " { " + concat + "}\r\n"; - } - } - values.add(value); - - Query newquery = new Query(); - newquery.sparql = String.format(sparql, values.toArray()); - newquery.serviceList = serviceList; - newquery.result = result; - - - if (true) { - // add DISTINCT to remove duplicated results rows (in case of Blazegraph) - if (!newquery.sparql.contains("DISTINCT")) { - newquery.sparql = newquery.sparql.replace("SELECT", "SELECT DISTINCT"); - } - } - - - return newquery; - } - } - - static final Logger LOGGER = LogManager.getLogger(QueryProvider.class); - - // the configuration parameters to format queries - private boolean addServiceUrls = false; - private boolean addServiceParams = false; - private boolean addValuesClauses = false; - // the parameters to manipulate endpoints URLs in DOCKER test environment - private boolean useDockerServiceUrl = false; - private String fixedServiceUrl = null; - - protected void setQueryFormatParams(boolean addServiceUrls, boolean addServiceParams, boolean addValuesClauses) { - this.addServiceUrls = addServiceUrls; - this.addServiceParams = addServiceParams; - this.addValuesClauses = addValuesClauses; - } - - protected void setServiceUrlParams(String fixedServiceUrl, boolean useDockerServiceUrl) { - this.fixedServiceUrl = fixedServiceUrl; - this.useDockerServiceUrl = useDockerServiceUrl; - } - - protected Query format(Query query) { - return query.formatQuery(addServiceUrls, addServiceParams, addValuesClauses); - } - - /* - private static ServiceDescriptionIndexer fullIndexer = null; - - public static ServiceDescriptionIndexer getFullIndexer() { - if (fullIndexer == null) { - LOGGER.debug("initializing full indexer"); - File dir = new File("D:/tmp/service_desciptions_test"); - String[] extensions = new String[] {"rdf"}; - Collection files = FileUtils.listFiles(dir, extensions, true); - fullIndexer = new ServiceDescriptionIndexer(); - for (File file : files) { - fullIndexer.addServiceDescription(file.getAbsolutePath()); - } - LOGGER.debug("initialed full indexer, service descriptions=" + files.size()); - } - return fullIndexer; - } - - protected static ServiceDescriptionIndexer getOldIndexer(boolean useAllEndpoints) { - if (useAllEndpoints) { - return getFullIndexer(); - } - return ServiceDescriptionIndexerTest.getSmallTestIndexer(); - } - */ - - public ServiceDescriptionIndexer getIndexer() { - List serviceUrls = new ArrayList(); - serviceUrls.add(TripleStoreProvider.getServiceUrl(TripleStoreProvider.ID_BLAZEGRAPH_1)); - serviceUrls.add(TripleStoreProvider.getServiceUrl(TripleStoreProvider.ID_BLAZEGRAPH_2)); - - // additional federation members for the test with remote queries - List federationMembers = new ArrayList(); - //federationMembers.add("http://www.theworldavatar.com/blazegraph/namespace/sgbiodieselplants/sparql"); - //federationMembers.add("http://www.theworldavatar.com:83/citieskg/namespace/singaporeEPSG24500/sparql"); - //federationMembers.add("http://www.theworldavatar.com/blazegraph/namespace/ontospecies/sparql"); - //federationMembers.add("http://www.theworldavatar.com/blazegraph/namespace/ontocompchem/sparql"); - - return FederatedQueryFactory.getIndexer(true, serviceUrls, federationMembers); - } - - /** - * Returns the complete endpoint URL for a given namespace / dataset. - * If useDockerServiceUrl is true, the corresponding Docker container related endpoint URL is returned. - * - * @param namespace - * @return - */ - public String endpoint(String namespace) { - if (fixedServiceUrl == null) { - if (useDockerServiceUrl) { - return TripleStoreProvider.getDockerEndpointUrl(namespace); - } else { - return TripleStoreProvider.getEndpointUrl(namespace); - } - } - return fixedServiceUrl + "/namespace/" + namespace + "/sparql"; - } - - public void assertQueryResult(String expected, String actual) { - LOGGER.debug("actual result=\n" + actual); - LOGGER.debug("expected result=\n" + expected); - - JsonParser parser = new JsonParser(); - JsonArray actualJA = (JsonArray) parser.parse(actual); - /* - JsonElement actualJson = parser.parse(actual); - JsonArray actualJA = null; - if (actualJson.isJsonArray()) { - actualJA = (JsonArray) actualJson; - } else { - actualJA = actualJson.getAsJsonObject().getAsJsonArray("results"); - } - */ - - // if expected is an integer only compare the result size - try { - int expectedSize = Integer.valueOf(expected); - LOGGER.debug("result size expected=" + expectedSize + ", actual=" + actualJA.size()); - assertEquals(expectedSize, actualJA.size()); - return; - } catch (NumberFormatException e) { - } - - JsonArray expectedJA = (JsonArray) parser.parse(expected); - - LOGGER.debug("result size expected=" + expectedJA.size() + ", actual=" + actualJA.size()); - assertEquals(expectedJA.size(), actualJA.size()); - - // although the implementation of GSON's equal method is not order-sensitive - // the following assert method does not work correctly - // if the same elements in the actual and expected result arrays are ordered differently - //assertEquals(expectedJA, actualJA); - - for (int i=0; i\r\n" - + "PREFIX ontorxn: \r\n" - + "PREFIX om: \r\n" - + "PREFIX ontovapourtec: \r\n" - + "PREFIX ontolab: \r\n" - + "PREFIX saref: \r\n" - + "PREFIX ontocaperxn: \r\n" - + "PREFIX ontospecies: " - + "\r\n"; - } - - public Query getSparqlDistributedLab_1() { - Query query = new Query(); - query.sparql = prefixes() - + "SELECT ?exp ?yield_value ?yield_unit\r\n" - + "WHERE {\r\n" - + "%s" - + " ?exp ontorxn:hasYield ?yield.\r\n" - + " ?yield om:hasValue ?measure.\r\n" - + " ?measure om:hasNumericalValue ?yield_value; om:hasUnit ?yield_unit.\r\n" - + "%s" - + " ontodoe:utilisesHistoricalData ?historical_data.\r\n" - + " ?historical_data ontodoe:refersTo ?exp.\r\n" - + "%s" - + "}\r\n"; - //query.addEndpoints("service1", "http://localhost:8080/blazegraph/namespace/lab_1/sparql", "http://localhost:8080/blazegraph/namespace/lab_2/sparql"); - //query.addEndpoints("service2", "http://localhost:8080/blazegraph/namespace/doe_chemrxn/sparql"); - query.addEndpoints("service1", endpoint(TripleStoreProvider.NAMESPACE_LAB_1), endpoint(TripleStoreProvider.NAMESPACE_LAB_2)); - query.addEndpoints("service2", endpoint(TripleStoreProvider.NAMESPACE_DOE_CHEMRXN)); - query.result = "[{\"yield_value\":\"47.7\",\"yield_unit\":\"http://www.ontology-of-units-of-measure.org/resource/om-2/percent\",\"exp\":\"https://www.example.com/triplestore/ontorxn/ReactionExperiment_1/RxnExp_1\"},{\"yield_value\":\"40.0\",\"yield_unit\":\"http://www.ontology-of-units-of-measure.org/resource/om-2/percent\",\"exp\":\"https://www.example.com/triplestore/ontorxn/ReactionExperiment_2/RxnExp_1\"},{\"yield_value\":\"54.1\",\"yield_unit\":\"http://www.ontology-of-units-of-measure.org/resource/om-2/percent\",\"exp\":\"https://www.example.com/triplestore/ontorxn/ReactionExperiment_3/RxnExp_1\"},{\"yield_value\":\"8.7\",\"yield_unit\":\"http://www.ontology-of-units-of-measure.org/resource/om-2/percent\",\"exp\":\"https://www.example.com/triplestore/ontorxn/ReactionExperiment_4/RxnExp_1\"},{\"yield_value\":\"47.9\",\"yield_unit\":\"http://www.ontology-of-units-of-measure.org/resource/om-2/percent\",\"exp\":\"https://www.example.com/triplestore/ontorxn/ReactionExperiment_5/RxnExp_1\"}]"; - return format(query); - } - - public Query getSparqlDistributedLab_2() { - Query query = new Query(); - query.sparql = prefixes() - + "SELECT ?rs400 ?lab\r\n" - + "WHERE {\r\n" - + "%s" - + " ?rs400 a ontovapourtec:VapourtecRS400.\r\n" - + " ?rs400 saref:hasState ontovapourtec:Idle.\r\n" - + " ?rs400 ontolab:isContainedIn ?lab.\r\n" - + "%s" - + "}"; - //query.addEndpoints("service", "http://localhost:8080/blazegraph/namespace/lab_1/sparql", "http://localhost:8080/blazegraph/namespace/lab_2/sparql"); - query.addEndpoints("service", endpoint(TripleStoreProvider.NAMESPACE_LAB_1), endpoint(TripleStoreProvider.NAMESPACE_LAB_2)); - query.result = "[{\"rs400\":\"http://example.com/blazegraph/namespace/testlab/dummy_lab_1/VapourtecRS400_Dummy\",\"lab\":\"http://example.com/blazegraph/namespace/testlab/dummy_lab_1/Laboratory_Dummy\"},{\"rs400\":\"http://example.com/blazegraph/namespace/testlab/dummy_lab_2/VapourtecRS400_Dummy\",\"lab\":\"http://example.com/blazegraph/namespace/testlab/dummy_lab_2/Laboratory_Dummy\"}]"; - return format(query); - } - - public Query getSparqlDistributedLab_3() { - Query query = new Query(); - query.sparql = prefixes() - + "SELECT ?species ?molar_weight_val ?molar_weight_unit\r\n" - + "WHERE {\r\n" - + "%s" - + " ontorxn:isOccurenceOf ?rxn.\r\n" - + "%s" - + " ?rxn ontocaperxn:hasReactant ?reactant.\r\n" - + " ?reactant ontospecies:hasUniqueSpecies ?species.\r\n" - + " ?species ontospecies:hasMolecularWeight ?molar_weight.\r\n" - + " ?molar_weight ontospecies:value ?molar_weight_val.\r\n" - + " ?molar_weight ontospecies:units ?molar_weight_unit.\r\n" - + "%s" - + "}"; - //query.addEndpoints("servA", "http://localhost:8080/blazegraph/namespace/lab_1/sparql", "http://localhost:8080/blazegraph/namespace/lab_2/sparql"); - //query.addEndpoints("servB", "http://localhost:8080/blazegraph/namespace/doe_chemrxn/sparql"); - query.addEndpoints("servA", endpoint(TripleStoreProvider.NAMESPACE_LAB_1), endpoint(TripleStoreProvider.NAMESPACE_LAB_2)); - query.addEndpoints("servB", endpoint(TripleStoreProvider.NAMESPACE_DOE_CHEMRXN)); - query.result = "[{\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_353d4667-e25d-476a-bd74-5c34723c8ea3\",\"molar_weight_unit\":\"g/mol\",\"molar_weight_val\":\"58.08\"},{\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_54d8b46b-17bc-4bbd-a3cc-3b3a16d6ae4b\",\"molar_weight_unit\":\"g/mol\",\"molar_weight_val\":\"106.124\"}]"; - return format(query); - } - - public Query getSparqlDistributedLab_3_inverted_service_order() { - Query query = new Query(); - query.sparql = prefixes() - + "SELECT ?species ?molar_weight_val ?molar_weight_unit\r\n" - + "WHERE {\r\n" - + "%s" - + " ?rxn ontocaperxn:hasReactant ?reactant.\r\n" - + " ?reactant ontospecies:hasUniqueSpecies ?species.\r\n" - + " ?species ontospecies:hasMolecularWeight ?molar_weight.\r\n" - + " ?molar_weight ontospecies:value ?molar_weight_val.\r\n" - + " ?molar_weight ontospecies:units ?molar_weight_unit.\r\n" - + "%s" - + " ontorxn:isOccurenceOf ?rxn.\r\n" - + "%s" - + "}"; - //query.addEndpoints("servB", "http://localhost:8080/blazegraph/namespace/doe_chemrxn/sparql"); - //query.addEndpoints("servA", "http://localhost:8080/blazegraph/namespace/lab_1/sparql", "http://localhost:8080/blazegraph/namespace/lab_2/sparql"); - query.addEndpoints("servB", endpoint(TripleStoreProvider.NAMESPACE_DOE_CHEMRXN)); - query.addEndpoints("servA", endpoint(TripleStoreProvider.NAMESPACE_LAB_1), endpoint(TripleStoreProvider.NAMESPACE_LAB_2)); - query.result = "[{\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_353d4667-e25d-476a-bd74-5c34723c8ea3\",\"molar_weight_unit\":\"g/mol\",\"molar_weight_val\":\"58.08\"},{\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_54d8b46b-17bc-4bbd-a3cc-3b3a16d6ae4b\",\"molar_weight_unit\":\"g/mol\",\"molar_weight_val\":\"106.124\"}]"; - return format(query); - } - - /** - * A federated query constructed from two separate queries in - * {@link https://github.com/cambridge-cares/TheWorldAvatar/blob/main/JPS_BIODIESELPLANT/src/uk/ac/cam/cares/jps/bio/CrossDomainQuery.java}. - * - * @return - */ - public Query getSparqlBiodieselCityGML() { - Query query = new Query(); - query.sparql = PrefixToUrlMap.getPrefixesForSPARQL(Prefixes.OCPSYST, Prefixes.OCPPERF, Prefixes.ONTOCITYGML, Prefixes.BLAZEGRAPH_GEO) - + "SELECT ?IRIs ?Cost\r\n" - + "WHERE {\r\n" - + "%s" - + " ?EquipC OCPPERF:isCostOfPlantItem ?Equip .\r\n" - + " ?EquipC OCPSYST:hasValue ?EquipCost .\r\n" - + " ?EquipCost OCPSYST:numericalValue ?Cost.\r\n" - + " FILTER(?Cost > 30000)\r\n" - + " BIND( STR(?Equip) AS ?IRIs)\r\n" - + "%s" - + " GRAPH {\r\n" - + " ?s OCGML:attrName 'BioDiesel_Power_Plant_IRI' ;\r\n" - + " OCGML:uriVal ?IRIs ;\r\n" - + " OCGML:cityObjectId ?cityObject .\r\n" - + " }\r\n" - + " GRAPH {\r\n" - + " ?cityObject OCGML:EnvelopeType ?envelopes .\r\n" - + " SERVICE BLAZEGEO:search {\r\n" - + " ?cityObject BLAZEGEO:predicate OCGML:EnvelopeType.\r\n" - + " ?cityObject BLAZEGEO:searchDatatype .\r\n" - + " ?cityObject BLAZEGEO:customFields \"X0#Y0#Z0#X1#Y1#Z1#X2#Y2#Z2#X3#Y3#Z3#X4#Y4#Z4\".\r\n" - + " ?cityObject BLAZEGEO:customFieldsLowerBounds \"10428#26648#0#10428#26648#0#10428#26648#0#10428#26648#0#10428#26648#0\".\r\n" - + " ?cityObject BLAZEGEO:customFieldsUpperBounds \"10880#26955#10#10880#26955#10#10880#26955#10#10880#26955#10#10880#26955#10\". \r\n" - + " }\r\n" - + " }\r\n" - + "%s" - + "}"; - query.addEndpoints("service1", "http://www.theworldavatar.com/blazegraph/namespace/sgbiodieselplants/sparql"); - query.addEndpoints("service2", "http://www.theworldavatar.com:83/citieskg/namespace/singaporeEPSG24500/sparql"); - query.result = "[{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/E-301.owl#E-301\",\"Cost\":\"63800.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/C-301.owl#C-301\",\"Cost\":\"900900.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/E-302.owl#E-302\",\"Cost\":\"76900.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/E-303.owl#E-303\",\"Cost\":\"64000.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/E-304.owl#E-304\",\"Cost\":\"73900.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/E-306.owl#E-306\",\"Cost\":\"171400.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/E-305.owl#E-305\",\"Cost\":\"72900.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/P-301.owl#P-301\",\"Cost\":\"33850.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/E-307.owl#E-307\",\"Cost\":\"102700.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/T-301.owl#T-301\",\"Cost\":\"242800.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/T-302.owl#T-302\",\"Cost\":\"178100.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/T-303.owl#T-303\",\"Cost\":\"1404900.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/R-301.owl#R-301\",\"Cost\":\"149400.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/R-302.owl#R-302\",\"Cost\":\"148300.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/R-303.owl#R-303\",\"Cost\":\"371400.0\"},{\"IRIs\":\"http://www.jparksimulator.com/kb/sgp/jurongisland/biodieselplant3/P-302.owl#P-302\",\"Cost\":\"31100.0\"}]"; - return format(query); - } - - public Query getSparqlLocalWikidataWithPubChemCID887() { - Query query = new Query(); - query.sparql = PrefixToUrlMap.getPrefixesForSPARQL(Prefixes.XSD, Prefixes.WIKIDATA, Prefixes.WIKIDATAT, Prefixes.ONTOSPECIES) - + "SELECT ?species ?pid ?wdcompound\r\n" - + "WHERE {\r\n" - + "%s" - + " ?species OSPECIES:pubChemCID ?pid .\r\n" - + " FILTER ( ?pid = \"887\" )\r\n" - + "%s" - + " ?wdcompound wdt:P662 ?pid .\r\n" - + "%s" - + "}"; - //query.addEndpoints("serva", "http://www.theworldavatar.com/blazegraph/namespace/ontospecies/sparql", "http://localhost:8080/blazegraph/namespace/doe_chemrxn/sparql"); - //query.addEndpoints("servb", "http://localhost:8080/blazegraph/namespace/wikidata_small/sparql"); - query.addEndpoints("serva", "http://www.theworldavatar.com/blazegraph/namespace/ontospecies/sparql", endpoint(TripleStoreProvider.NAMESPACE_DOE_CHEMRXN)); - query.addEndpoints("servb", endpoint(TripleStoreProvider.NAMESPACE_WIKIDATA_SMALL)); - - query.result = "[{\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_bbfd8e83-6c58-4ff3-820c-2095d2ab6998\",\"pid\":\"887\",\"wdcompound\":\"http://www.wikidata.org/entity/Q14982\"},{\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f157c9d6-8656-4e1c-be52-314888caf917\",\"pid\":\"887\",\"wdcompound\":\"http://www.wikidata.org/entity/Q14982\"}]"; - return format(query); - } - - /** - * An federated query for dbpedia and wikidata used in from {@link https://rdf4j.org/documentation/programming/federation/} . - * @return - */ - public Query getSparqlWikidataDBpedia() { - Query query = new Query(); - query.sparql = PrefixToUrlMap.getPrefixesForSPARQL(Prefixes.WIKIDATA, Prefixes.WIKIDATAT) - + "SELECT ?country ?countrySameAs ?gdp\r\n" - + "WHERE {\r\n" - + "%s" - + " ?country a .\r\n" - + " ?country ?countrySameAs .\r\n" - + "%s" - + " ?countrySameAs wdt:P2131 ?gdp .\r\n" - + "%s" - + "}\r\n"; - query.addEndpoints("service1", "http://dbpedia.org/sparql"); - query.addEndpoints("service2", "https://query.wikidata.org/sparql"); - query.result = "[{\"country\":\"http://dbpedia.org/resource/Netherlands\",\"gdp\":\"830572618850\",\"countrySameAs\":\"http://www.wikidata.org/entity/Q29999\"},{\"country\":\"http://dbpedia.org/resource/Czech_Republic\",\"gdp\":\"250681000000\",\"countrySameAs\":\"http://www.wikidata.org/entity/Q213\"}]\r\n"; - return format(query); - } - - private void addEndpointsForSparqlOntoSpeciesOntoCompChem(Query query) { - //query.addEndpoints("service1", "http://www.theworldavatar.com/blazegraph/namespace/ontospecies/sparql"); - //query.addEndpoints("service2", "http://www.theworldavatar.com/blazegraph/namespace/ontocompchem/sparql"); - //query.addEndpoints("service1", "http://localhost:8080/blazegraph/namespace/ontospecies/sparql"); - //query.addEndpoints("service2", "http://localhost:8080/blazegraph/namespace/ontocompchemcloned/sparql"); - //query.addEndpoints("service2", "http://localhost:8080/blazegraph/namespace/ontocompchemhasuniqespecies/sparql"); - //query.addEndpoints("service2", "http://localhost:8080/blazegraph/namespace/ontocompchem/sparql"); - query.addEndpoints("service1", endpoint(TripleStoreProvider.NAMESPACE_ONTOSPECIES)); - query.addEndpoints("service2", endpoint(TripleStoreProvider.NAMESPACE_ONTOCOMPCHEM)); - } - - /** - * A federated query as in {@link RemoteStoreClientTest#performMechanismCountQueryTest()}. - * - * @return - */ - public Query getSparqlOntoSpeciesOntoCompChemLarge() { - - //jsonObject.put("scfEnergyValue", "-464.940687165"); - Query query = new Query(); - query.sparql = "PREFIX ontospecies: \r\n" - + "PREFIX ontocompchem: \r\n" - + "PREFIX gc: \r\n" - + "SELECT ?species ?compchemspecies ?crid ?atomicBond ?geometry ?enthalpyOfFormationValue ?scfEnergyValue ?zeroEnergyValue\r\n" - + "WHERE {\r\n" - + "%s" - + " ?species ontospecies:casRegistryID ?crid .\r\n" - + " ?species ontospecies:hasAtomicBond ?atomicBond .\r\n" - + " ?species ontospecies:hasGeometry ?geometry . \r\n" - + " ?species ontospecies:hasStandardEnthalpyOfFormation ?enthalpy .\r\n" - + " ?enthalpy ontospecies:value ?enthalpyOfFormationValue .\r\n" - + "%s" - + " ?compchemspecies ontocompchem:hasUniqueSpecies ?species .\r\n" - + " ?compchemspecies gc:isCalculationOn ?scfEnergy .\r\n" - + " ?scfEnergy a ontocompchem:ScfEnergy . \r\n" - + " ?scfEnergy gc:hasElectronicEnergy ?scfElectronicEnergy .\r\n" - + " ?scfElectronicEnergy gc:hasValue ?scfEnergyValue .\r\n" - + " ?compchemspecies gc:isCalculationOn ?zeroEnergy .\r\n" - + " ?zeroEnergy a ontocompchem:ZeroPointEnergy .\r\n" - + " ?zeroEnergy gc:hasElectronicEnergy ?zeroElectronicEnergy .\r\n" - + " ?zeroElectronicEnergy gc:hasValue ?zeroEnergyValue .\r\n" - + "%s" - + "}"; - - addEndpointsForSparqlOntoSpeciesOntoCompChem(query); - //query.result = "[]"; - query.result = "25"; - return format(query); - } - - /** - * A federated query adapted from {@link RemoteStoreClientTest#performMechanismCountQueryTest()} - * with only one basic triple pattern for datasource ontospecies. - * - * @return - */ - public Query getSparqlOntoSpeciesOntoCompChemMedium() { - Query query = new Query(); - query.sparql = "PREFIX ontospecies: \r\n" - + "PREFIX ontocompchem: \r\n" - + "PREFIX gc: \r\n" - + "SELECT *\r\n" - + "WHERE {\r\n" - + "%s" - + " ?species ontospecies:casRegistryID ?crid .\r\n" - + "%s" - + " ?compchemspecies ontocompchem:hasUniqueSpecies ?species .\r\n" - + " ?compchemspecies gc:isCalculationOn ?scfEnergy .\r\n" - + " ?scfEnergy a ontocompchem:ScfEnergy .\r\n" - + " ?scfEnergy gc:hasElectronicEnergy ?scfElectronicEnergy .\r\n" - + " ?scfElectronicEnergy gc:hasValue ?scfEnergyValue .\r\n" - + " ?compchemspecies gc:isCalculationOn ?zeroEnergy .\r\n" - + " ?zeroEnergy a ontocompchem:ZeroPointEnergy .\r\n" - + " ?zeroEnergy gc:hasElectronicEnergy ?zeroElectronicEnergy .\r\n" - + " ?zeroElectronicEnergy gc:hasValue ?zeroEnergyValue .\r\n" - + "%s" - + "}"; - addEndpointsForSparqlOntoSpeciesOntoCompChem(query); - // result size = 157 - //query.result = "[{\"scfEnergyValue\":\"-118.508864576\",\"crid\":\"2143-61-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_48929d84-722b-4359-939d-f51d94083138\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_b53c1b3c-bf4b-41c0-ba1a-c248031ec4e5\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b53c1b3c-bf4b-41c0-ba1a-c248031ec4e5\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_b53c1b3c-bf4b-41c0-ba1a-c248031ec4e5\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b53c1b3c-bf4b-41c0-ba1a-c248031ec4e5_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b53c1b3c-bf4b-41c0-ba1a-c248031ec4e5_ScfEnergy\",\"zeroEnergyValue\":\"0.08785857599998792\"},{\"scfEnergyValue\":\"-119.181082492\",\"crid\":\"74-98-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3756e7eb-8648-4dfa-ac60-2242ea26a116\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_9b3682be-ba33-4889-b6fc-788f6d6349a7\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_9b3682be-ba33-4889-b6fc-788f6d6349a7\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_9b3682be-ba33-4889-b6fc-788f6d6349a7\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_9b3682be-ba33-4889-b6fc-788f6d6349a7_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_9b3682be-ba33-4889-b6fc-788f6d6349a7_ScfEnergy\",\"zeroEnergyValue\":\"0.10288649199999611\"},{\"scfEnergyValue\":\"-194.424251448\",\"crid\":\"67-63-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_6979a7f1-5c89-4b4b-b6d0-7d41ec56034a\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_bcf2e9db-9182-4f4d-8ba2-d2e0b5205cfa\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_bcf2e9db-9182-4f4d-8ba2-d2e0b5205cfa\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_bcf2e9db-9182-4f4d-8ba2-d2e0b5205cfa\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_bcf2e9db-9182-4f4d-8ba2-d2e0b5205cfa_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_bcf2e9db-9182-4f4d-8ba2-d2e0b5205cfa_ScfEnergy\",\"zeroEnergyValue\":\"0.10747944800002074\"},{\"scfEnergyValue\":\"-118.515432413\",\"crid\":\"2025-55-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c6384a33-227d-4eb5-bee5-d314a3b229aa\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_a9eccda6-4732-4b98-ae57-9b620edd601c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_a9eccda6-4732-4b98-ae57-9b620edd601c\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_a9eccda6-4732-4b98-ae57-9b620edd601c\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_a9eccda6-4732-4b98-ae57-9b620edd601c_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_a9eccda6-4732-4b98-ae57-9b620edd601c_ScfEnergy\",\"zeroEnergyValue\":\"0.08743641300000604\"},{\"scfEnergyValue\":\"-194.419220498\",\"crid\":\"71-23-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2caeb3cd-cc2d-4500-be2c-5cb5008cf144\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_38d39135-7aff-4411-8596-67edb5c08c24\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_38d39135-7aff-4411-8596-67edb5c08c24\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_38d39135-7aff-4411-8596-67edb5c08c24\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_38d39135-7aff-4411-8596-67edb5c08c24_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_38d39135-7aff-4411-8596-67edb5c08c24_ScfEnergy\",\"zeroEnergyValue\":\"0.10805649799999628\"},{\"scfEnergyValue\":\"-194.404500813\",\"crid\":\"540-67-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_cc6e4765-ba77-4595-bb07-995fb420f826\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_eb528e75-5ea1-48a6-913a-a0b54cbbdb55\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_eb528e75-5ea1-48a6-913a-a0b54cbbdb55\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_eb528e75-5ea1-48a6-913a-a0b54cbbdb55\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_eb528e75-5ea1-48a6-913a-a0b54cbbdb55_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_eb528e75-5ea1-48a6-913a-a0b54cbbdb55_ScfEnergy\",\"zeroEnergyValue\":\"0.10775381299998799\"},{\"scfEnergyValue\":\"-264.805276007\",\"crid\":\"504-64-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f0959f5c-85a6-4eaa-95c6-0d5fb036410f\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_4e8942de-4e89-4f24-8aff-659004fc405a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_4e8942de-4e89-4f24-8aff-659004fc405a\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_4e8942de-4e89-4f24-8aff-659004fc405a\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_4e8942de-4e89-4f24-8aff-659004fc405a_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_4e8942de-4e89-4f24-8aff-659004fc405a_ScfEnergy\",\"zeroEnergyValue\":\"0.022071006999965448\"},{\"scfEnergyValue\":\"-190.919119796\",\"crid\":\"3031-73-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_bd3e0b6d-68f8-4395-bbeb-9d66b6fb090e\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_a14c59c0-f467-497f-85cd-98f3cd19620b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_a14c59c0-f467-497f-85cd-98f3cd19620b\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_a14c59c0-f467-497f-85cd-98f3cd19620b\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_a14c59c0-f467-497f-85cd-98f3cd19620b_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_a14c59c0-f467-497f-85cd-98f3cd19620b_ScfEnergy\",\"zeroEnergyValue\":\"0.05437979599997789\"},{\"scfEnergyValue\":\"-113.85266021\",\"crid\":\"2597-44-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_6d9422b5-8d1d-414d-9b8c-0e8e3407e700\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_c8ee81aa-c601-40a4-bae4-8f2642719bd2\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_c8ee81aa-c601-40a4-bae4-8f2642719bd2\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_c8ee81aa-c601-40a4-bae4-8f2642719bd2\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_c8ee81aa-c601-40a4-bae4-8f2642719bd2_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_c8ee81aa-c601-40a4-bae4-8f2642719bd2_ScfEnergy\",\"zeroEnergyValue\":\"0.014101209999992648\"},{\"scfEnergyValue\":\"-113.349050281\",\"crid\":\"630-08-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c510ad6b-5fe7-4de3-ae7c-29c2497d70a4\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_3723f466-4dcd-4196-ae91-2efe04d14fa4\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_3723f466-4dcd-4196-ae91-2efe04d14fa4\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_3723f466-4dcd-4196-ae91-2efe04d14fa4\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_3723f466-4dcd-4196-ae91-2efe04d14fa4_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_3723f466-4dcd-4196-ae91-2efe04d14fa4_ScfEnergy\",\"zeroEnergyValue\":\"0.005038280999997369\"},{\"scfEnergyValue\":\"-0.502155930031\",\"crid\":\"12385-13-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_ea684392-7ac2-4519-8a72-ecb5ab768cf9\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_1123a1e9-22de-436b-99a1-afc32aca170e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1123a1e9-22de-436b-99a1-afc32aca170e\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_1123a1e9-22de-436b-99a1-afc32aca170e\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1123a1e9-22de-436b-99a1-afc32aca170e_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1123a1e9-22de-436b-99a1-afc32aca170e_ScfEnergy\",\"zeroEnergyValue\":\"-6.996900003830575e-08\"},{\"scfEnergyValue\":\"-0.502155930031\",\"crid\":\"1333-74-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_ea684392-7ac2-4519-8a72-ecb5ab768cf9\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_1123a1e9-22de-436b-99a1-afc32aca170e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1123a1e9-22de-436b-99a1-afc32aca170e\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_1123a1e9-22de-436b-99a1-afc32aca170e\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1123a1e9-22de-436b-99a1-afc32aca170e_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1123a1e9-22de-436b-99a1-afc32aca170e_ScfEnergy\",\"zeroEnergyValue\":\"-6.996900003830575e-08\"},{\"scfEnergyValue\":\"-1.1795710228\",\"crid\":\"1333-74-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_70f5eb2c-e74c-4147-8bae-41dbeff35255\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_256bdc6d-375c-44b6-820b-b0d69916829e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_256bdc6d-375c-44b6-820b-b0d69916829e\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_256bdc6d-375c-44b6-820b-b0d69916829e\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_256bdc6d-375c-44b6-820b-b0d69916829e_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_256bdc6d-375c-44b6-820b-b0d69916829e_ScfEnergy\",\"zeroEnergyValue\":\"0.010068022800000076\"},{\"scfEnergyValue\":\"-116.695349569\",\"crid\":\"463-49-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_192e43f9-6662-42a8-b174-662a33eb1334\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_c01578c8-e9fd-418a-aef2-cc1172a79f23\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_c01578c8-e9fd-418a-aef2-cc1172a79f23\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_c01578c8-e9fd-418a-aef2-cc1172a79f23\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_c01578c8-e9fd-418a-aef2-cc1172a79f23_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_c01578c8-e9fd-418a-aef2-cc1172a79f23_ScfEnergy\",\"zeroEnergyValue\":\"0.05485956900000133\"},{\"scfEnergyValue\":\"-116.654317975\",\"crid\":\"2781-85-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_6555b1a0-6e58-40f3-83e6-659589bee021\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_6fe17749-550b-4eb4-aea8-07f9ddd74960\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6fe17749-550b-4eb4-aea8-07f9ddd74960\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_6fe17749-550b-4eb4-aea8-07f9ddd74960\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6fe17749-550b-4eb4-aea8-07f9ddd74960_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6fe17749-550b-4eb4-aea8-07f9ddd74960_ScfEnergy\",\"zeroEnergyValue\":\"0.055710974999996665\"},{\"scfEnergyValue\":\"-191.940581519\",\"crid\":\"5009-27-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2fb70cfe-6707-4d6c-b977-bae913c4878f\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_874cfeb4-6d9e-4063-84ed-7dec4aca7867\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_874cfeb4-6d9e-4063-84ed-7dec4aca7867\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_874cfeb4-6d9e-4063-84ed-7dec4aca7867\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_874cfeb4-6d9e-4063-84ed-7dec4aca7867_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_874cfeb4-6d9e-4063-84ed-7dec4aca7867_ScfEnergy\",\"zeroEnergyValue\":\"0.0605585190000113\"},{\"scfEnergyValue\":\"-117.298251088\",\"crid\":\"1981-80-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_1affa5ba-c003-49ac-8f35-8c2582945f99\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_125a3c04-4606-4e3c-a866-bd04c546f469\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_125a3c04-4606-4e3c-a866-bd04c546f469\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_125a3c04-4606-4e3c-a866-bd04c546f469\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_125a3c04-4606-4e3c-a866-bd04c546f469_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_125a3c04-4606-4e3c-a866-bd04c546f469_ScfEnergy\",\"zeroEnergyValue\":\"0.06584208799999658\"},{\"scfEnergyValue\":\"-117.248576564\",\"crid\":\"2417-82-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_69f35e93-b66b-4136-8146-ebb2d03b080b\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_30dc7a5c-0ec8-4230-8c55-6214ba427d0a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_30dc7a5c-0ec8-4230-8c55-6214ba427d0a\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_30dc7a5c-0ec8-4230-8c55-6214ba427d0a\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_30dc7a5c-0ec8-4230-8c55-6214ba427d0a_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_30dc7a5c-0ec8-4230-8c55-6214ba427d0a_ScfEnergy\",\"zeroEnergyValue\":\"0.06635056400000394\"},{\"scfEnergyValue\":\"-117.930904744\",\"crid\":\"75-19-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8b7d26b6-1f33-4ca7-8d08-e5404fee4323\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_d3478691-877a-4919-8043-948842541d49\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_d3478691-877a-4919-8043-948842541d49\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_d3478691-877a-4919-8043-948842541d49\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_d3478691-877a-4919-8043-948842541d49_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_d3478691-877a-4919-8043-948842541d49_ScfEnergy\",\"zeroEnergyValue\":\"0.08090474400000858\"},{\"scfEnergyValue\":\"-117.945576146\",\"crid\":\"115-07-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f8650220-7b3d-4504-a2d7-b56c604b20f8\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_fdd1ce35-ff5c-40c1-9e82-e74e1bdf692c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_fdd1ce35-ff5c-40c1-9e82-e74e1bdf692c\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_fdd1ce35-ff5c-40c1-9e82-e74e1bdf692c\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_fdd1ce35-ff5c-40c1-9e82-e74e1bdf692c_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_fdd1ce35-ff5c-40c1-9e82-e74e1bdf692c_ScfEnergy\",\"zeroEnergyValue\":\"0.0792671459999923\"},{\"scfEnergyValue\":\"-117.826312424\",\"crid\":\"6700-78-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_050d6d0a-3c3e-4bbb-8e07-b156b3738b53\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_da858b54-3c5f-42c8-93e9-7f03bbbbd115\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_da858b54-3c5f-42c8-93e9-7f03bbbbd115\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_da858b54-3c5f-42c8-93e9-7f03bbbbd115\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_da858b54-3c5f-42c8-93e9-7f03bbbbd115_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_da858b54-3c5f-42c8-93e9-7f03bbbbd115_ScfEnergy\",\"zeroEnergyValue\":\"0.07580642399999249\"},{\"scfEnergyValue\":\"-117.826312424\",\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_050d6d0a-3c3e-4bbb-8e07-b156b3738b53\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_da858b54-3c5f-42c8-93e9-7f03bbbbd115\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_da858b54-3c5f-42c8-93e9-7f03bbbbd115\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_da858b54-3c5f-42c8-93e9-7f03bbbbd115\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_da858b54-3c5f-42c8-93e9-7f03bbbbd115_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_da858b54-3c5f-42c8-93e9-7f03bbbbd115_ScfEnergy\",\"zeroEnergyValue\":\"0.07580642399999249\"},{\"scfEnergyValue\":\"-117.83432987\",\"crid\":\"32458-33-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_733eb552-79ee-43cc-afd0-3ee4324d407f\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_e9c02871-716d-4153-b059-4fb7e4a5d7a0\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e9c02871-716d-4153-b059-4fb7e4a5d7a0\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_e9c02871-716d-4153-b059-4fb7e4a5d7a0\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e9c02871-716d-4153-b059-4fb7e4a5d7a0_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e9c02871-716d-4153-b059-4fb7e4a5d7a0_ScfEnergy\",\"zeroEnergyValue\":\"0.07271887000000277\"},{\"scfEnergyValue\":\"-117.83432987\",\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_733eb552-79ee-43cc-afd0-3ee4324d407f\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_e9c02871-716d-4153-b059-4fb7e4a5d7a0\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e9c02871-716d-4153-b059-4fb7e4a5d7a0\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_e9c02871-716d-4153-b059-4fb7e4a5d7a0\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e9c02871-716d-4153-b059-4fb7e4a5d7a0_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e9c02871-716d-4153-b059-4fb7e4a5d7a0_ScfEnergy\",\"zeroEnergyValue\":\"0.07271887000000277\"},{\"scfEnergyValue\":\"-55.9003796478\",\"crid\":\"13770-40-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_efd401ff-51bd-4fec-afb7-3650e92910a1\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_7c240a02-d1c5-460a-a703-e16c4e0b13aa\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_7c240a02-d1c5-460a-a703-e16c4e0b13aa\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_7c240a02-d1c5-460a-a703-e16c4e0b13aa\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_7c240a02-d1c5-460a-a703-e16c4e0b13aa_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_7c240a02-d1c5-460a-a703-e16c4e0b13aa_ScfEnergy\",\"zeroEnergyValue\":\"0.018918647799999633\"},{\"scfEnergyValue\":\"-55.9003796478\",\"crid\":\"7664-41-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_efd401ff-51bd-4fec-afb7-3650e92910a1\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_7c240a02-d1c5-460a-a703-e16c4e0b13aa\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_7c240a02-d1c5-460a-a703-e16c4e0b13aa\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_7c240a02-d1c5-460a-a703-e16c4e0b13aa\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_7c240a02-d1c5-460a-a703-e16c4e0b13aa_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_7c240a02-d1c5-460a-a703-e16c4e0b13aa_ScfEnergy\",\"zeroEnergyValue\":\"0.018918647799999633\"},{\"scfEnergyValue\":\"-75.7623379819\",\"crid\":\"7732-18-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d668de75-6ebd-4db6-9540-25d4b0f1fcb0\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_75937aef-7433-4d0a-a8e4-05b763d0c4be\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_75937aef-7433-4d0a-a8e4-05b763d0c4be\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_75937aef-7433-4d0a-a8e4-05b763d0c4be\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_75937aef-7433-4d0a-a8e4-05b763d0c4be_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_75937aef-7433-4d0a-a8e4-05b763d0c4be_ScfEnergy\",\"zeroEnergyValue\":\"0.0084469819000077\"},{\"scfEnergyValue\":\"-75.7623379819\",\"crid\":\"3352-57-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d668de75-6ebd-4db6-9540-25d4b0f1fcb0\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_75937aef-7433-4d0a-a8e4-05b763d0c4be\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_75937aef-7433-4d0a-a8e4-05b763d0c4be\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_75937aef-7433-4d0a-a8e4-05b763d0c4be\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_75937aef-7433-4d0a-a8e4-05b763d0c4be_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_75937aef-7433-4d0a-a8e4-05b763d0c4be_ScfEnergy\",\"zeroEnergyValue\":\"0.0084469819000077\"},{\"scfEnergyValue\":\"-188.641138763\",\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_testID-111-111-111\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_testID-111-111-111\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_testID-111-111-111\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_testID-111-111-111_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_testID-111-111-111_ScfEnergy\",\"zeroEnergyValue\":\"0.011717762999978731\"},{\"scfEnergyValue\":\"-37.8572670751\",\"crid\":\"7440-44-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3230df3d-2767-452d-ba73-e34a67ad285c\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_30b7a0f3-4e6b-4a82-93ce-e13063b9235b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_30b7a0f3-4e6b-4a82-93ce-e13063b9235b\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_30b7a0f3-4e6b-4a82-93ce-e13063b9235b\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_30b7a0f3-4e6b-4a82-93ce-e13063b9235b_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_30b7a0f3-4e6b-4a82-93ce-e13063b9235b_ScfEnergy\",\"zeroEnergyValue\":\"7.509999733201767e-08\"},{\"scfEnergyValue\":\"-37.8572670751\",\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3230df3d-2767-452d-ba73-e34a67ad285c\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_30b7a0f3-4e6b-4a82-93ce-e13063b9235b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_30b7a0f3-4e6b-4a82-93ce-e13063b9235b\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_30b7a0f3-4e6b-4a82-93ce-e13063b9235b\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_30b7a0f3-4e6b-4a82-93ce-e13063b9235b_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_30b7a0f3-4e6b-4a82-93ce-e13063b9235b_ScfEnergy\",\"zeroEnergyValue\":\"7.509999733201767e-08\"},{\"scfEnergyValue\":\"-527.553884294\",\"crid\":\"7440-37-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a359ce1b-a518-409f-a1f7-0df40f322a7d\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_98a3d744-8c53-4009-9e28-66e13ff502bf\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_98a3d744-8c53-4009-9e28-66e13ff502bf\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_98a3d744-8c53-4009-9e28-66e13ff502bf\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_98a3d744-8c53-4009-9e28-66e13ff502bf_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_98a3d744-8c53-4009-9e28-66e13ff502bf_ScfEnergy\",\"zeroEnergyValue\":\"2.9399996037682286e-07\"},{\"scfEnergyValue\":\"-37.8572670751\",\"crid\":\"7440-44-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3230df3d-2767-452d-ba73-e34a67ad285c\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_f4f60a69-bb7b-4a04-a39a-f644dc7debc2\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f4f60a69-bb7b-4a04-a39a-f644dc7debc2\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_f4f60a69-bb7b-4a04-a39a-f644dc7debc2\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f4f60a69-bb7b-4a04-a39a-f644dc7debc2_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f4f60a69-bb7b-4a04-a39a-f644dc7debc2_ScfEnergy\",\"zeroEnergyValue\":\"7.509999733201767e-08\"},{\"scfEnergyValue\":\"-37.8572670751\",\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3230df3d-2767-452d-ba73-e34a67ad285c\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_f4f60a69-bb7b-4a04-a39a-f644dc7debc2\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f4f60a69-bb7b-4a04-a39a-f644dc7debc2\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_f4f60a69-bb7b-4a04-a39a-f644dc7debc2\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f4f60a69-bb7b-4a04-a39a-f644dc7debc2_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f4f60a69-bb7b-4a04-a39a-f644dc7debc2_ScfEnergy\",\"zeroEnergyValue\":\"7.509999733201767e-08\"},{\"scfEnergyValue\":\"-385.988889381\",\"crid\":\"91-20-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_4fa4fdea-ed3d-4b0a-aee5-1f4e97dd2340\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_061bcb86-0a3a-4767-82dc-ac61b0429046\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_061bcb86-0a3a-4767-82dc-ac61b0429046\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_061bcb86-0a3a-4767-82dc-ac61b0429046\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_061bcb86-0a3a-4767-82dc-ac61b0429046_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_061bcb86-0a3a-4767-82dc-ac61b0429046_ScfEnergy\",\"zeroEnergyValue\":\"0.14689438099998142\"},{\"scfEnergyValue\":\"-385.935090416\",\"crid\":\"275-51-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c7a324f0-8071-42e5-80e4-576ffc3e7569\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_7b751a96-0987-476e-945a-67543df8d66a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_7b751a96-0987-476e-945a-67543df8d66a\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_7b751a96-0987-476e-945a-67543df8d66a\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_7b751a96-0987-476e-945a-67543df8d66a_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_7b751a96-0987-476e-945a-67543df8d66a_ScfEnergy\",\"zeroEnergyValue\":\"0.1453694159999941\"},{\"scfEnergyValue\":\"-424.004790727\",\"crid\":\"286-85-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f9c30144-ec36-41cb-b537-7ed0bbe8e75a\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_223c314c-91bb-43ca-8911-235fb764eabb\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_223c314c-91bb-43ca-8911-235fb764eabb\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_223c314c-91bb-43ca-8911-235fb764eabb\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_223c314c-91bb-43ca-8911-235fb764eabb_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_223c314c-91bb-43ca-8911-235fb764eabb_ScfEnergy\",\"zeroEnergyValue\":\"0.15077272700000321\"},{\"scfEnergyValue\":\"-462.198483982\",\"crid\":\"208-96-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d26eb5b7-8dbd-4a2a-9800-c0dd86363893\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_44130cfd-7c51-4f62-80a9-57d3163b5794\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_44130cfd-7c51-4f62-80a9-57d3163b5794\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_44130cfd-7c51-4f62-80a9-57d3163b5794\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_44130cfd-7c51-4f62-80a9-57d3163b5794_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_44130cfd-7c51-4f62-80a9-57d3163b5794_ScfEnergy\",\"zeroEnergyValue\":\"0.15861898200000724\"},{\"scfEnergyValue\":\"-76.6225658293\",\"crid\":\"2122-48-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5a9700cc-3c8b-4e27-a7cc-298ca12fae40\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_b8114c73-a226-4f1b-a727-8c1acda6e30f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b8114c73-a226-4f1b-a727-8c1acda6e30f\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_b8114c73-a226-4f1b-a727-8c1acda6e30f\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b8114c73-a226-4f1b-a727-8c1acda6e30f_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b8114c73-a226-4f1b-a727-8c1acda6e30f_ScfEnergy\",\"zeroEnergyValue\":\"0.016042829300005224\"},{\"scfEnergyValue\":\"-158.506434481\",\"crid\":\"75-28-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c74e26f9-75b8-4180-b793-f2cf4abaeccb\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_00e5b245-1333-40c0-9723-7120d58c8547\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_00e5b245-1333-40c0-9723-7120d58c8547\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_00e5b245-1333-40c0-9723-7120d58c8547\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_00e5b245-1333-40c0-9723-7120d58c8547_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_00e5b245-1333-40c0-9723-7120d58c8547_ScfEnergy\",\"zeroEnergyValue\":\"0.13082048100000065\"},{\"scfEnergyValue\":\"-232.519344406\",\"crid\":\"56640-70-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5a165fec-28f2-4b69-8bab-75919ac50307\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_2863e336-730f-441c-bfbd-c622c48532c0\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_2863e336-730f-441c-bfbd-c622c48532c0\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_2863e336-730f-441c-bfbd-c622c48532c0\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_2863e336-730f-441c-bfbd-c622c48532c0_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_2863e336-730f-441c-bfbd-c622c48532c0_ScfEnergy\",\"zeroEnergyValue\":\"0.1116464059999771\"},{\"scfEnergyValue\":\"-157.838807669\",\"crid\":\"2348-55-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d638f1e4-bcf4-4d52-b999-dc6822fb72a1\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_21990f99-8da8-4b91-8673-e3b7a9b22dd5\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_21990f99-8da8-4b91-8673-e3b7a9b22dd5\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_21990f99-8da8-4b91-8673-e3b7a9b22dd5\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_21990f99-8da8-4b91-8673-e3b7a9b22dd5_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_21990f99-8da8-4b91-8673-e3b7a9b22dd5_ScfEnergy\",\"zeroEnergyValue\":\"0.11648366900001861\"},{\"scfEnergyValue\":\"-188.646914769\",\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_85949b34-1d08-4287-b2d2-5748933797ce\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_85949b34-1d08-4287-b2d2-5748933797ce\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_85949b34-1d08-4287-b2d2-5748933797ce\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_85949b34-1d08-4287-b2d2-5748933797ce_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_85949b34-1d08-4287-b2d2-5748933797ce_ScfEnergy\",\"zeroEnergyValue\":\"0.011685768999996071\"},{\"scfEnergyValue\":\"-151.972778174\",\"crid\":\"51095-15-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_82216f39-6a17-4951-930f-8af65cdfa307\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_8bcb2fcb-9241-4ec5-b986-f6ca00a5dccd\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_8bcb2fcb-9241-4ec5-b986-f6ca00a5dccd\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_8bcb2fcb-9241-4ec5-b986-f6ca00a5dccd\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_8bcb2fcb-9241-4ec5-b986-f6ca00a5dccd_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_8bcb2fcb-9241-4ec5-b986-f6ca00a5dccd_ScfEnergy\",\"zeroEnergyValue\":\"0.019225174000013112\"},{\"scfEnergyValue\":\"-155.98921025\",\"crid\":\"3100-04-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_89a9c49b-c64c-41a5-b741-6843f3a7e910\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_6c4c7272-d1db-44c4-98fd-529cb9b9ecb1\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6c4c7272-d1db-44c4-98fd-529cb9b9ecb1\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_6c4c7272-d1db-44c4-98fd-529cb9b9ecb1\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6c4c7272-d1db-44c4-98fd-529cb9b9ecb1_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6c4c7272-d1db-44c4-98fd-529cb9b9ecb1_ScfEnergy\",\"zeroEnergyValue\":\"0.08393925000001445\"},{\"scfEnergyValue\":\"-156.008295141\",\"crid\":\"6142-73-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_44698b0e-35ab-4328-8a0b-fcf32b6ff8f5\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_26d66d3e-e1c9-4fab-a679-6faa394b2e37\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_26d66d3e-e1c9-4fab-a679-6faa394b2e37\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_26d66d3e-e1c9-4fab-a679-6faa394b2e37\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_26d66d3e-e1c9-4fab-a679-6faa394b2e37_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_26d66d3e-e1c9-4fab-a679-6faa394b2e37_ScfEnergy\",\"zeroEnergyValue\":\"0.08464014099999417\"},{\"scfEnergyValue\":\"-231.299912608\",\"crid\":\"78-85-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_12238c7c-98b6-49e3-8c14-31c1edc97a9c\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_7db61428-1ff9-4163-a0bb-131a37f68f01\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_7db61428-1ff9-4163-a0bb-131a37f68f01\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_7db61428-1ff9-4163-a0bb-131a37f68f01\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_7db61428-1ff9-4163-a0bb-131a37f68f01_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_7db61428-1ff9-4163-a0bb-131a37f68f01_ScfEnergy\",\"zeroEnergyValue\":\"0.08872760799999924\"},{\"scfEnergyValue\":\"-231.307121837\",\"crid\":\"78-94-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_03abefa5-5453-4e4d-b900-bbc0def43c51\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_dc901906-20a3-45f8-878f-2b5a9be9a91a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_dc901906-20a3-45f8-878f-2b5a9be9a91a\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_dc901906-20a3-45f8-878f-2b5a9be9a91a\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_dc901906-20a3-45f8-878f-2b5a9be9a91a_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_dc901906-20a3-45f8-878f-2b5a9be9a91a_ScfEnergy\",\"zeroEnergyValue\":\"0.08886783700000933\"},{\"scfEnergyValue\":\"-231.269401529\",\"crid\":\"109-93-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_15ffd444-51f3-4e30-9960-82fe7e258475\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_e94be489-3030-48d7-999b-4e72f051c07b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e94be489-3030-48d7-999b-4e72f051c07b\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_e94be489-3030-48d7-999b-4e72f051c07b\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e94be489-3030-48d7-999b-4e72f051c07b_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e94be489-3030-48d7-999b-4e72f051c07b_ScfEnergy\",\"zeroEnergyValue\":\"0.08921552900000052\"},{\"scfEnergyValue\":\"-75.0898794536\",\"crid\":\"7732-18-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a8173444-de42-4489-a366-8292dd86e8fb\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_ffe3d10d-cc83-48e4-b1a7-b016384ca3ec\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_ffe3d10d-cc83-48e4-b1a7-b016384ca3ec\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_ffe3d10d-cc83-48e4-b1a7-b016384ca3ec\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_ffe3d10d-cc83-48e4-b1a7-b016384ca3ec_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_ffe3d10d-cc83-48e4-b1a7-b016384ca3ec_ScfEnergy\",\"zeroEnergyValue\":\"4.5360000910932285e-07\"},{\"scfEnergyValue\":\"-150.308955847\",\"crid\":\"7782-44-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_dc415280-b8f4-478f-8929-935ef6c1337b\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_65f52d70-f8be-4549-9555-6d9815b09e1b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_65f52d70-f8be-4549-9555-6d9815b09e1b\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_65f52d70-f8be-4549-9555-6d9815b09e1b\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_65f52d70-f8be-4549-9555-6d9815b09e1b_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_65f52d70-f8be-4549-9555-6d9815b09e1b_ScfEnergy\",\"zeroEnergyValue\":\"0.003693846999993866\"},{\"scfEnergyValue\":\"-225.480560006\",\"crid\":\"10028-15-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_355109b1-2989-4a06-9547-21271b40e19b\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_88aa7bfb-a0e6-47f0-953c-36519b45354b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_88aa7bfb-a0e6-47f0-953c-36519b45354b\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_88aa7bfb-a0e6-47f0-953c-36519b45354b\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_88aa7bfb-a0e6-47f0-953c-36519b45354b_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_88aa7bfb-a0e6-47f0-953c-36519b45354b_ScfEnergy\",\"zeroEnergyValue\":\"0.007233005999978559\"},{\"scfEnergyValue\":\"-92.7055207684\",\"crid\":\"2074-87-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_1eceb125-0f98-4c5a-826d-70809e560035\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_58fa4851-60fe-4c02-ab66-4509811a00e5\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_58fa4851-60fe-4c02-ab66-4509811a00e5\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_58fa4851-60fe-4c02-ab66-4509811a00e5\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_58fa4851-60fe-4c02-ab66-4509811a00e5_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_58fa4851-60fe-4c02-ab66-4509811a00e5_ScfEnergy\",\"zeroEnergyValue\":\"0.004241768400007118\"},{\"scfEnergyValue\":\"-92.7055207684\",\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_1eceb125-0f98-4c5a-826d-70809e560035\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_58fa4851-60fe-4c02-ab66-4509811a00e5\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_58fa4851-60fe-4c02-ab66-4509811a00e5\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_58fa4851-60fe-4c02-ab66-4509811a00e5\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_58fa4851-60fe-4c02-ab66-4509811a00e5_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_58fa4851-60fe-4c02-ab66-4509811a00e5_ScfEnergy\",\"zeroEnergyValue\":\"0.004241768400007118\"},{\"scfEnergyValue\":\"-113.824232741\",\"crid\":\"67-56-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f157c9d6-8656-4e1c-be52-314888caf917\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_b211adff-54b4-4ac6-9c12-359ef7e8897a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b211adff-54b4-4ac6-9c12-359ef7e8897a\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_b211adff-54b4-4ac6-9c12-359ef7e8897a\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b211adff-54b4-4ac6-9c12-359ef7e8897a_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b211adff-54b4-4ac6-9c12-359ef7e8897a_ScfEnergy\",\"zeroEnergyValue\":\"0.01318074099999933\"},{\"scfEnergyValue\":\"-113.824232741\",\"crid\":\"71080-92-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f157c9d6-8656-4e1c-be52-314888caf917\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_b211adff-54b4-4ac6-9c12-359ef7e8897a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b211adff-54b4-4ac6-9c12-359ef7e8897a\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_b211adff-54b4-4ac6-9c12-359ef7e8897a\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b211adff-54b4-4ac6-9c12-359ef7e8897a_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b211adff-54b4-4ac6-9c12-359ef7e8897a_ScfEnergy\",\"zeroEnergyValue\":\"0.01318074099999933\"},{\"scfEnergyValue\":\"-39.1588466725\",\"crid\":\"2465-56-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a3755d47-cd9a-4d9d-b50f-b3efd8bc70f7\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_f5723bca-a907-4126-8be9-d3b0b94257a5\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f5723bca-a907-4126-8be9-d3b0b94257a5\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_f5723bca-a907-4126-8be9-d3b0b94257a5\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f5723bca-a907-4126-8be9-d3b0b94257a5_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f5723bca-a907-4126-8be9-d3b0b94257a5_ScfEnergy\",\"zeroEnergyValue\":\"0.01536867249999574\"},{\"scfEnergyValue\":\"-39.1588466725\",\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a3755d47-cd9a-4d9d-b50f-b3efd8bc70f7\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_f5723bca-a907-4126-8be9-d3b0b94257a5\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f5723bca-a907-4126-8be9-d3b0b94257a5\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_f5723bca-a907-4126-8be9-d3b0b94257a5\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f5723bca-a907-4126-8be9-d3b0b94257a5_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f5723bca-a907-4126-8be9-d3b0b94257a5_ScfEnergy\",\"zeroEnergyValue\":\"0.01536867249999574\"},{\"scfEnergyValue\":\"-152.592559272\",\"crid\":\"32038-79-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8f579fe4-1a03-4f11-8811-d708db9638ea\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_1e88ddf9-767e-484b-a2f9-08f66d3bc409\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1e88ddf9-767e-484b-a2f9-08f66d3bc409\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_1e88ddf9-767e-484b-a2f9-08f66d3bc409\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1e88ddf9-767e-484b-a2f9-08f66d3bc409_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1e88ddf9-767e-484b-a2f9-08f66d3bc409_ScfEnergy\",\"zeroEnergyValue\":\"0.031760271999985434\"},{\"scfEnergyValue\":\"-77.9289628342\",\"crid\":\"2669-89-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8e1ad157-2911-4740-a851-cd1b4735704c\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_39adf818-502a-42fd-b7d6-45b6bde44df0\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_39adf818-502a-42fd-b7d6-45b6bde44df0\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_39adf818-502a-42fd-b7d6-45b6bde44df0\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_39adf818-502a-42fd-b7d6-45b6bde44df0_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_39adf818-502a-42fd-b7d6-45b6bde44df0_ScfEnergy\",\"zeroEnergyValue\":\"0.03630083419999153\"},{\"scfEnergyValue\":\"-78.6155123107\",\"crid\":\"74-85-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0021961d-cdf8-470a-b2d3-4c6faff43948\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_fc2d91db-ab3c-49e0-a43b-d49051f501b1\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_fc2d91db-ab3c-49e0-a43b-d49051f501b1\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_fc2d91db-ab3c-49e0-a43b-d49051f501b1\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_fc2d91db-ab3c-49e0-a43b-d49051f501b1_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_fc2d91db-ab3c-49e0-a43b-d49051f501b1_ScfEnergy\",\"zeroEnergyValue\":\"0.050790310699994734\"},{\"scfEnergyValue\":\"-78.4944265526\",\"crid\":\"4218-50-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f2ee9b6e-13f3-46c3-bdce-379ec972f8b7\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_cdd30304-b183-4b45-b6f5-4579246c3cae\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_cdd30304-b183-4b45-b6f5-4579246c3cae\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_cdd30304-b183-4b45-b6f5-4579246c3cae\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_cdd30304-b183-4b45-b6f5-4579246c3cae_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_cdd30304-b183-4b45-b6f5-4579246c3cae_ScfEnergy\",\"zeroEnergyValue\":\"0.04650555260000999\"},{\"scfEnergyValue\":\"-78.4944265526\",\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f2ee9b6e-13f3-46c3-bdce-379ec972f8b7\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_cdd30304-b183-4b45-b6f5-4579246c3cae\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_cdd30304-b183-4b45-b6f5-4579246c3cae\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_cdd30304-b183-4b45-b6f5-4579246c3cae\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_cdd30304-b183-4b45-b6f5-4579246c3cae_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_cdd30304-b183-4b45-b6f5-4579246c3cae_ScfEnergy\",\"zeroEnergyValue\":\"0.04650555260000999\"},{\"scfEnergyValue\":\"-153.88214794\",\"crid\":\"75-07-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_7bd49e3d-fb8b-4089-a8c7-2b13178773f9\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_d02e63c8-f83c-4a74-abd4-4b414a8925db\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_d02e63c8-f83c-4a74-abd4-4b414a8925db\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_d02e63c8-f83c-4a74-abd4-4b414a8925db\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_d02e63c8-f83c-4a74-abd4-4b414a8925db_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_d02e63c8-f83c-4a74-abd4-4b414a8925db_ScfEnergy\",\"zeroEnergyValue\":\"0.05518194000001131\"},{\"scfEnergyValue\":\"-153.836040676\",\"crid\":\"75-21-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_ac81baa1-aafd-4124-88d0-92a4df71d4b9\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_658b5cee-c4fe-476b-9a48-3abbaeee115c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_658b5cee-c4fe-476b-9a48-3abbaeee115c\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_658b5cee-c4fe-476b-9a48-3abbaeee115c\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_658b5cee-c4fe-476b-9a48-3abbaeee115c_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_658b5cee-c4fe-476b-9a48-3abbaeee115c_ScfEnergy\",\"zeroEnergyValue\":\"0.057129676000016616\"},{\"scfEnergyValue\":\"-153.865597472\",\"crid\":\"557-75-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5b5ac265-1a38-4dbf-9207-eb6b6739dd60\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_c2c4a2e9-8cb3-49f6-aa54-207501a641f9\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_c2c4a2e9-8cb3-49f6-aa54-207501a641f9\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_c2c4a2e9-8cb3-49f6-aa54-207501a641f9\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_c2c4a2e9-8cb3-49f6-aa54-207501a641f9_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_c2c4a2e9-8cb3-49f6-aa54-207501a641f9_ScfEnergy\",\"zeroEnergyValue\":\"0.05637147199999504\"},{\"scfEnergyValue\":\"-153.865597472\",\"crid\":\"9002-89-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5b5ac265-1a38-4dbf-9207-eb6b6739dd60\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_c2c4a2e9-8cb3-49f6-aa54-207501a641f9\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_c2c4a2e9-8cb3-49f6-aa54-207501a641f9\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_c2c4a2e9-8cb3-49f6-aa54-207501a641f9\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_c2c4a2e9-8cb3-49f6-aa54-207501a641f9_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_c2c4a2e9-8cb3-49f6-aa54-207501a641f9_ScfEnergy\",\"zeroEnergyValue\":\"0.05637147199999504\"},{\"scfEnergyValue\":\"-79.1850181825\",\"crid\":\"2025-56-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5c91f127-7fc7-4a32-b4bf-b34476b379de\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_af9c0fc5-b708-4989-9b89-ba4fb8618d53\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_af9c0fc5-b708-4989-9b89-ba4fb8618d53\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_af9c0fc5-b708-4989-9b89-ba4fb8618d53\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_af9c0fc5-b708-4989-9b89-ba4fb8618d53_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_af9c0fc5-b708-4989-9b89-ba4fb8618d53_ScfEnergy\",\"zeroEnergyValue\":\"0.05899518249999858\"},{\"scfEnergyValue\":\"-79.8565463069\",\"crid\":\"74-84-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b026cc7a-f7c6-4a16-97a1-a13f930d5e52\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_d8728c67-ea17-4f1d-b92d-86ac6d32acfa\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_d8728c67-ea17-4f1d-b92d-86ac6d32acfa\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_d8728c67-ea17-4f1d-b92d-86ac6d32acfa\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_d8728c67-ea17-4f1d-b92d-86ac6d32acfa_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_d8728c67-ea17-4f1d-b92d-86ac6d32acfa_ScfEnergy\",\"zeroEnergyValue\":\"0.07432430689999592\"},{\"scfEnergyValue\":\"-231.297903717\",\"crid\":\"1191-95-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_6eeda496-71c9-406d-985f-923c4c029862\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_e93f7ba1-b372-48f1-b437-1bdc2f1f2362\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e93f7ba1-b372-48f1-b437-1bdc2f1f2362\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_e93f7ba1-b372-48f1-b437-1bdc2f1f2362\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e93f7ba1-b372-48f1-b437-1bdc2f1f2362_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e93f7ba1-b372-48f1-b437-1bdc2f1f2362_ScfEnergy\",\"zeroEnergyValue\":\"0.09027871699998968\"},{\"scfEnergyValue\":\"-231.290766656\",\"crid\":\"1191-99-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d444b030-3656-4410-8c7b-9312dc9961cb\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_b27993b7-4a11-4831-99d3-67289baf2dff\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b27993b7-4a11-4831-99d3-67289baf2dff\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_b27993b7-4a11-4831-99d3-67289baf2dff\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b27993b7-4a11-4831-99d3-67289baf2dff_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b27993b7-4a11-4831-99d3-67289baf2dff_ScfEnergy\",\"zeroEnergyValue\":\"0.09246265599998083\"},{\"scfEnergyValue\":\"-231.306640851\",\"crid\":\"4170-30-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b5642744-e411-4e74-8d70-08dbe1e39797\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_477567ee-57ea-48c6-9d56-4fbdbbdad0dd\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_477567ee-57ea-48c6-9d56-4fbdbbdad0dd\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_477567ee-57ea-48c6-9d56-4fbdbbdad0dd\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_477567ee-57ea-48c6-9d56-4fbdbbdad0dd_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_477567ee-57ea-48c6-9d56-4fbdbbdad0dd_ScfEnergy\",\"zeroEnergyValue\":\"0.08914585099998362\"},{\"scfEnergyValue\":\"-231.306640851\",\"crid\":\"123-73-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b5642744-e411-4e74-8d70-08dbe1e39797\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_477567ee-57ea-48c6-9d56-4fbdbbdad0dd\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_477567ee-57ea-48c6-9d56-4fbdbbdad0dd\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_477567ee-57ea-48c6-9d56-4fbdbbdad0dd\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_477567ee-57ea-48c6-9d56-4fbdbbdad0dd_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_477567ee-57ea-48c6-9d56-4fbdbbdad0dd_ScfEnergy\",\"zeroEnergyValue\":\"0.08914585099998362\"},{\"scfEnergyValue\":\"-462.142414214\",\"crid\":\"259-79-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b7b97c21-4214-4a9e-9c24-5a7a9d4fca32\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_724af967-8938-44e6-aee8-74ad38941514\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_724af967-8938-44e6-aee8-74ad38941514\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_724af967-8938-44e6-aee8-74ad38941514\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_724af967-8938-44e6-aee8-74ad38941514_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_724af967-8938-44e6-aee8-74ad38941514_ScfEnergy\",\"zeroEnergyValue\":\"0.15763921399997116\"},{\"scfEnergyValue\":\"-155.077036183\",\"crid\":\"115-10-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f046412c-1c10-40f4-943c-d53b24c7f318\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_cc0e30d8-ecd6-4a21-8dc6-229b99f112e8\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_cc0e30d8-ecd6-4a21-8dc6-229b99f112e8\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_cc0e30d8-ecd6-4a21-8dc6-229b99f112e8\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_cc0e30d8-ecd6-4a21-8dc6-229b99f112e8_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_cc0e30d8-ecd6-4a21-8dc6-229b99f112e8_ScfEnergy\",\"zeroEnergyValue\":\"0.079258182999979\"},{\"scfEnergyValue\":\"-157.833756685\",\"crid\":\"2492-36-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_7e8d571f-1a2e-4130-a27d-7f03fe9cafba\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_095033b8-97d7-4161-b56d-f86d9bc30cee\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_095033b8-97d7-4161-b56d-f86d9bc30cee\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_095033b8-97d7-4161-b56d-f86d9bc30cee\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_095033b8-97d7-4161-b56d-f86d9bc30cee_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_095033b8-97d7-4161-b56d-f86d9bc30cee_ScfEnergy\",\"zeroEnergyValue\":\"0.11619868500000052\"},{\"scfEnergyValue\":\"-157.83432433\",\"crid\":\"4630-45-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_6ff0d6ca-b9a3-4c9a-89a8-26475f8e638e\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_77314bcb-19c9-4132-af20-65f9b985de81\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_77314bcb-19c9-4132-af20-65f9b985de81\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_77314bcb-19c9-4132-af20-65f9b985de81\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_77314bcb-19c9-4132-af20-65f9b985de81_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_77314bcb-19c9-4132-af20-65f9b985de81_ScfEnergy\",\"zeroEnergyValue\":\"0.11593132999999511\"},{\"scfEnergyValue\":\"-352.66296041\",\"crid\":\"39124-79-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e179b9f4-ab21-4f46-b83a-0065ce2553b2\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_ea4fcb53-36e5-44a6-a648-14a9763c199e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_ea4fcb53-36e5-44a6-a648-14a9763c199e\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_ea4fcb53-36e5-44a6-a648-14a9763c199e\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_ea4fcb53-36e5-44a6-a648-14a9763c199e_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_ea4fcb53-36e5-44a6-a648-14a9763c199e_ScfEnergy\",\"zeroEnergyValue\":\"0.23236341000000493\"},{\"scfEnergyValue\":\"-352.66296041\",\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e179b9f4-ab21-4f46-b83a-0065ce2553b2\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_ea4fcb53-36e5-44a6-a648-14a9763c199e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_ea4fcb53-36e5-44a6-a648-14a9763c199e\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_ea4fcb53-36e5-44a6-a648-14a9763c199e\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_ea4fcb53-36e5-44a6-a648-14a9763c199e_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_ea4fcb53-36e5-44a6-a648-14a9763c199e_ScfEnergy\",\"zeroEnergyValue\":\"0.23236341000000493\"},{\"scfEnergyValue\":\"-353.907880732\",\"crid\":\"1678-92-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_48076567-dfe1-4d4a-93c1-20946ba68bf6\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_b556764c-d007-4c7f-b485-d5a8b5bc26f8\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b556764c-d007-4c7f-b485-d5a8b5bc26f8\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_b556764c-d007-4c7f-b485-d5a8b5bc26f8\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b556764c-d007-4c7f-b485-d5a8b5bc26f8_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b556764c-d007-4c7f-b485-d5a8b5bc26f8_ScfEnergy\",\"zeroEnergyValue\":\"0.2538977320000413\"},{\"scfEnergyValue\":\"-353.906175867\",\"crid\":\"2040-95-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0092c497-ad02-458d-a1cb-7be57784a159\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_5c4a8f8c-6c1e-4053-a218-3434ffec625a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_5c4a8f8c-6c1e-4053-a218-3434ffec625a\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_5c4a8f8c-6c1e-4053-a218-3434ffec625a\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_5c4a8f8c-6c1e-4053-a218-3434ffec625a_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_5c4a8f8c-6c1e-4053-a218-3434ffec625a_ScfEnergy\",\"zeroEnergyValue\":\"0.25318486700001586\"},{\"scfEnergyValue\":\"-355.122964829\",\"crid\":\"111-84-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_7cba9b1d-79c6-4df4-ae92-eaedb7476f20\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_34486bee-f786-4bd2-ba1b-f7d82cadb88a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_34486bee-f786-4bd2-ba1b-f7d82cadb88a\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_34486bee-f786-4bd2-ba1b-f7d82cadb88a\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_34486bee-f786-4bd2-ba1b-f7d82cadb88a_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_34486bee-f786-4bd2-ba1b-f7d82cadb88a_ScfEnergy\",\"zeroEnergyValue\":\"0.2735638290000111\"},{\"scfEnergyValue\":\"-150.957985003\",\"crid\":\"3170-83-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_92e851ca-20f7-410d-b33a-82db8c36bb42\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_fffc684c-f1bc-4bd9-9958-dfd2be10e008\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_fffc684c-f1bc-4bd9-9958-dfd2be10e008\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_fffc684c-f1bc-4bd9-9958-dfd2be10e008\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_fffc684c-f1bc-4bd9-9958-dfd2be10e008_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_fffc684c-f1bc-4bd9-9958-dfd2be10e008_ScfEnergy\",\"zeroEnergyValue\":\"0.014081003000001147\"},{\"scfEnergyValue\":\"-226.133120716\",\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_453fe568-f93c-4229-b08b-8c05b937faa4\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_94c3a415-477e-4c43-b474-d3e6f6f9ef33\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_94c3a415-477e-4c43-b474-d3e6f6f9ef33\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_94c3a415-477e-4c43-b474-d3e6f6f9ef33\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_94c3a415-477e-4c43-b474-d3e6f6f9ef33_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_94c3a415-477e-4c43-b474-d3e6f6f9ef33_ScfEnergy\",\"zeroEnergyValue\":\"0.017307716000004802\"},{\"scfEnergyValue\":\"-54.6007233624\",\"crid\":\"7664-41-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_fbf65357-0142-4a9e-9e38-98b6f076b6fb\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_b2457b8e-964f-4722-9a6e-9e03eca41980\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b2457b8e-964f-4722-9a6e-9e03eca41980\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_b2457b8e-964f-4722-9a6e-9e03eca41980\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b2457b8e-964f-4722-9a6e-9e03eca41980_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b2457b8e-964f-4722-9a6e-9e03eca41980_ScfEnergy\",\"zeroEnergyValue\":\"3.6239999445797366e-07\"},{\"scfEnergyValue\":\"-109.559693682\",\"crid\":\"7727-37-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_798ae810-0c06-40e2-acae-e9e227aeca43\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_555e9d05-3009-478f-905f-45bddb44d88f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_555e9d05-3009-478f-905f-45bddb44d88f\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_555e9d05-3009-478f-905f-45bddb44d88f\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_555e9d05-3009-478f-905f-45bddb44d88f_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_555e9d05-3009-478f-905f-45bddb44d88f_ScfEnergy\",\"zeroEnergyValue\":\"0.005569682000000853\"},{\"scfEnergyValue\":\"-184.718226101\",\"crid\":\"10024-97-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_fd7a83cf-dc61-4bec-ab69-b5855f472e2f\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_ed568dd0-831e-4294-88fc-519e69d757df\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_ed568dd0-831e-4294-88fc-519e69d757df\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_ed568dd0-831e-4294-88fc-519e69d757df\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_ed568dd0-831e-4294-88fc-519e69d757df_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_ed568dd0-831e-4294-88fc-519e69d757df_ScfEnergy\",\"zeroEnergyValue\":\"0.011007100999989916\"},{\"scfEnergyValue\":\"-129.931656575\",\"crid\":\"10102-43-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e5a47ea5-910a-4292-abd7-773793a66ca0\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_b5c73ced-2117-4905-a6b2-977c9926ea8c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b5c73ced-2117-4905-a6b2-977c9926ea8c\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_b5c73ced-2117-4905-a6b2-977c9926ea8c\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b5c73ced-2117-4905-a6b2-977c9926ea8c_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b5c73ced-2117-4905-a6b2-977c9926ea8c_ScfEnergy\",\"zeroEnergyValue\":\"0.004509575000014365\"},{\"scfEnergyValue\":\"-115.374198839\",\"crid\":\"2008-19-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f7ea6030-fdc6-4013-927a-5b3dcff4b85a\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f001f496-1cb5-41b5-89cb-f29dfe09a4b6_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f001f496-1cb5-41b5-89cb-f29dfe09a4b6_ScfEnergy\",\"zeroEnergyValue\":\"0.024992839000006484\"},{\"scfEnergyValue\":\"-115.374198839\",\"crid\":\"67152-18-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f7ea6030-fdc6-4013-927a-5b3dcff4b85a\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f001f496-1cb5-41b5-89cb-f29dfe09a4b6_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f001f496-1cb5-41b5-89cb-f29dfe09a4b6_ScfEnergy\",\"zeroEnergyValue\":\"0.024992839000006484\"},{\"scfEnergyValue\":\"-115.374198839\",\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f7ea6030-fdc6-4013-927a-5b3dcff4b85a\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f001f496-1cb5-41b5-89cb-f29dfe09a4b6_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_f001f496-1cb5-41b5-89cb-f29dfe09a4b6_ScfEnergy\",\"zeroEnergyValue\":\"0.024992839000006484\"},{\"scfEnergyValue\":\"-115.301673852\",\"crid\":\"16165-40-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b915a6d9-6013-4cab-80a4-56f1504e98fe\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_e55c113f-dec6-4da7-8020-e71df374ea67\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e55c113f-dec6-4da7-8020-e71df374ea67\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_e55c113f-dec6-4da7-8020-e71df374ea67\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e55c113f-dec6-4da7-8020-e71df374ea67_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e55c113f-dec6-4da7-8020-e71df374ea67_ScfEnergy\",\"zeroEnergyValue\":\"0.02765985199999932\"},{\"scfEnergyValue\":\"-115.301673852\",\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b915a6d9-6013-4cab-80a4-56f1504e98fe\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_e55c113f-dec6-4da7-8020-e71df374ea67\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e55c113f-dec6-4da7-8020-e71df374ea67\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_e55c113f-dec6-4da7-8020-e71df374ea67\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e55c113f-dec6-4da7-8020-e71df374ea67_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e55c113f-dec6-4da7-8020-e71df374ea67_ScfEnergy\",\"zeroEnergyValue\":\"0.02765985199999932\"},{\"scfEnergyValue\":\"-115.277427774\",\"crid\":\"60731-11-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2c0cd6f1-ecaa-4c70-801d-7f43d3be89bb\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_0895c702-0f6a-4b85-b384-cfbfde72fce4\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_0895c702-0f6a-4b85-b384-cfbfde72fce4\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_0895c702-0f6a-4b85-b384-cfbfde72fce4\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_0895c702-0f6a-4b85-b384-cfbfde72fce4_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_0895c702-0f6a-4b85-b384-cfbfde72fce4_ScfEnergy\",\"zeroEnergyValue\":\"0.027219774000002417\"},{\"scfEnergyValue\":\"-230.028126683\",\"crid\":\"103905-52-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_772804ac-e72d-44af-b414-5c237af61445\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_1b5cb9c5-94ad-449a-972e-4074bb6a1bae\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1b5cb9c5-94ad-449a-972e-4074bb6a1bae\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_1b5cb9c5-94ad-449a-972e-4074bb6a1bae\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1b5cb9c5-94ad-449a-972e-4074bb6a1bae_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1b5cb9c5-94ad-449a-972e-4074bb6a1bae_ScfEnergy\",\"zeroEnergyValue\":\"0.06553968299999724\"},{\"scfEnergyValue\":\"-156.040812905\",\"crid\":\"106-99-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c2ebdaaf-1cd5-46ae-a2fe-f2e33cffc455\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_2b2739bc-d19d-459e-80e8-1972d6dba575\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_2b2739bc-d19d-459e-80e8-1972d6dba575\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_2b2739bc-d19d-459e-80e8-1972d6dba575\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_2b2739bc-d19d-459e-80e8-1972d6dba575_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_2b2739bc-d19d-459e-80e8-1972d6dba575_ScfEnergy\",\"zeroEnergyValue\":\"0.0847479050000004\"},{\"scfEnergyValue\":\"-156.016893039\",\"crid\":\"107-00-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_78b569d8-2592-4ff3-a479-565d29c7536d\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_d41353e1-1a7e-4bbe-a17c-b13a90df2b90\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_d41353e1-1a7e-4bbe-a17c-b13a90df2b90\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_d41353e1-1a7e-4bbe-a17c-b13a90df2b90\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_d41353e1-1a7e-4bbe-a17c-b13a90df2b90_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_d41353e1-1a7e-4bbe-a17c-b13a90df2b90_ScfEnergy\",\"zeroEnergyValue\":\"0.0843660390000025\"},{\"scfEnergyValue\":\"-155.991132629\",\"crid\":\"157-33-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b34c3f37-ce40-421d-bc8e-d64d614e1e37\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_0c5814de-c030-4771-b7bd-8da8ba9fe9f7\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_0c5814de-c030-4771-b7bd-8da8ba9fe9f7\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_0c5814de-c030-4771-b7bd-8da8ba9fe9f7\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_0c5814de-c030-4771-b7bd-8da8ba9fe9f7_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_0c5814de-c030-4771-b7bd-8da8ba9fe9f7_ScfEnergy\",\"zeroEnergyValue\":\"0.08584262899998407\"},{\"scfEnergyValue\":\"-156.026788629\",\"crid\":\"503-17-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_9826b2e4-4e2f-49ae-861d-4a549316c748\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_35e6af0b-75ad-4f69-a361-9e7e1668035f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_35e6af0b-75ad-4f69-a361-9e7e1668035f\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_35e6af0b-75ad-4f69-a361-9e7e1668035f\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_35e6af0b-75ad-4f69-a361-9e7e1668035f_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_35e6af0b-75ad-4f69-a361-9e7e1668035f_ScfEnergy\",\"zeroEnergyValue\":\"0.08379162900001802\"},{\"scfEnergyValue\":\"-156.023430037\",\"crid\":\"590-19-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e7976e7f-0170-4266-8120-fee624d1e4b3\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_76fc3d1d-5998-4611-a0d8-d645d0392400\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_76fc3d1d-5998-4611-a0d8-d645d0392400\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_76fc3d1d-5998-4611-a0d8-d645d0392400\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_76fc3d1d-5998-4611-a0d8-d645d0392400_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_76fc3d1d-5998-4611-a0d8-d645d0392400_ScfEnergy\",\"zeroEnergyValue\":\"0.08355803699998887\"},{\"scfEnergyValue\":\"-156.017231522\",\"crid\":\"822-35-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_404f4b0a-1b43-4867-b0f8-1f9f62517eba\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_9baaa72d-13e0-4f01-b200-7f734530db7f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_9baaa72d-13e0-4f01-b200-7f734530db7f\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_9baaa72d-13e0-4f01-b200-7f734530db7f\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_9baaa72d-13e0-4f01-b200-7f734530db7f_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_9baaa72d-13e0-4f01-b200-7f734530db7f_ScfEnergy\",\"zeroEnergyValue\":\"0.08601952200001506\"},{\"scfEnergyValue\":\"-76.4584627435\",\"crid\":\"7732-18-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_9a49de29-8090-482e-b802-edda16dc68bf\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_8102986a-3c9d-4592-90ef-bc3b80005cb9\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_8102986a-3c9d-4592-90ef-bc3b80005cb9\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_8102986a-3c9d-4592-90ef-bc3b80005cb9\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_8102986a-3c9d-4592-90ef-bc3b80005cb9_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_8102986a-3c9d-4592-90ef-bc3b80005cb9_ScfEnergy\",\"zeroEnergyValue\":\"0.021281743499997674\"},{\"scfEnergyValue\":\"-151.602068646\",\"crid\":\"7722-84-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_663e4fd4-1fcd-4b07-9521-19eedf78c55d\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_99765f25-77cf-4734-8a83-cc8da748fdff\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_99765f25-77cf-4734-8a83-cc8da748fdff\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_99765f25-77cf-4734-8a83-cc8da748fdff\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_99765f25-77cf-4734-8a83-cc8da748fdff_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_99765f25-77cf-4734-8a83-cc8da748fdff_ScfEnergy\",\"zeroEnergyValue\":\"0.026444645999987415\"},{\"scfEnergyValue\":\"-115.277427774\",\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2c0cd6f1-ecaa-4c70-801d-7f43d3be89bb\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_0895c702-0f6a-4b85-b384-cfbfde72fce4\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_0895c702-0f6a-4b85-b384-cfbfde72fce4\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_0895c702-0f6a-4b85-b384-cfbfde72fce4\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_0895c702-0f6a-4b85-b384-cfbfde72fce4_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_0895c702-0f6a-4b85-b384-cfbfde72fce4_ScfEnergy\",\"zeroEnergyValue\":\"0.027219774000002417\"},{\"scfEnergyValue\":\"-116.039698027\",\"crid\":\"2932-78-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_268196b3-6d26-48ed-af35-53d744e2d24e\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_2f11d04c-d26a-4076-804e-7a30b979a19b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_2f11d04c-d26a-4076-804e-7a30b979a19b\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_2f11d04c-d26a-4076-804e-7a30b979a19b\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_2f11d04c-d26a-4076-804e-7a30b979a19b_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_2f11d04c-d26a-4076-804e-7a30b979a19b_ScfEnergy\",\"zeroEnergyValue\":\"0.041020027000001846\"},{\"scfEnergyValue\":\"-116.039698027\",\"crid\":\"6401-87-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_268196b3-6d26-48ed-af35-53d744e2d24e\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_2f11d04c-d26a-4076-804e-7a30b979a19b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_2f11d04c-d26a-4076-804e-7a30b979a19b\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_2f11d04c-d26a-4076-804e-7a30b979a19b\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_2f11d04c-d26a-4076-804e-7a30b979a19b_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_2f11d04c-d26a-4076-804e-7a30b979a19b_ScfEnergy\",\"zeroEnergyValue\":\"0.041020027000001846\"},{\"scfEnergyValue\":\"-115.986159718\",\"crid\":\"28933-84-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_7a754131-2633-4c95-bc64-2cba4db37d29\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_8036c915-4fb3-42e7-a7fa-13b39514cae9\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_8036c915-4fb3-42e7-a7fa-13b39514cae9\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_8036c915-4fb3-42e7-a7fa-13b39514cae9\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_8036c915-4fb3-42e7-a7fa-13b39514cae9_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_8036c915-4fb3-42e7-a7fa-13b39514cae9_ScfEnergy\",\"zeroEnergyValue\":\"0.04224171799999965\"},{\"scfEnergyValue\":\"-116.692792803\",\"crid\":\"74-99-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d5024c74-8791-485a-a907-981390ae1bc6\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_00a4f486-881b-449c-8a69-aa3f51b55814\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_00a4f486-881b-449c-8a69-aa3f51b55814\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_00a4f486-881b-449c-8a69-aa3f51b55814\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_00a4f486-881b-449c-8a69-aa3f51b55814_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_00a4f486-881b-449c-8a69-aa3f51b55814_ScfEnergy\",\"zeroEnergyValue\":\"0.05549480300000198\"},{\"scfEnergyValue\":\"-230.087850977\",\"crid\":\"110-00-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_9c6589a5-bc50-4d01-80f1-80d2635f879b\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_5887435c-680d-403b-96a1-603330055273\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_5887435c-680d-403b-96a1-603330055273\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_5887435c-680d-403b-96a1-603330055273\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_5887435c-680d-403b-96a1-603330055273_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_5887435c-680d-403b-96a1-603330055273_ScfEnergy\",\"zeroEnergyValue\":\"0.06969197699999086\"},{\"scfEnergyValue\":\"-231.287841033\",\"crid\":\"59120-04-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_9f218b08-05c6-488f-ae8c-0aad7da57508\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_1c525427-9383-4ece-9931-91a8876c1878\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1c525427-9383-4ece-9931-91a8876c1878\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_1c525427-9383-4ece-9931-91a8876c1878\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1c525427-9383-4ece-9931-91a8876c1878_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1c525427-9383-4ece-9931-91a8876c1878_ScfEnergy\",\"zeroEnergyValue\":\"0.08937803300000269\"},{\"scfEnergyValue\":\"-231.287764841\",\"crid\":\"70411-98-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e10df2bb-9798-4c72-828b-1cfd6b967a0a\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_6197ae41-ba7b-4b7b-a3d9-0a04feb3f8ee\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6197ae41-ba7b-4b7b-a3d9-0a04feb3f8ee\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_6197ae41-ba7b-4b7b-a3d9-0a04feb3f8ee\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6197ae41-ba7b-4b7b-a3d9-0a04feb3f8ee_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6197ae41-ba7b-4b7b-a3d9-0a04feb3f8ee_ScfEnergy\",\"zeroEnergyValue\":\"0.08950884100002554\"},{\"scfEnergyValue\":\"-157.269659353\",\"crid\":\"106-98-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_799e5430-f3ae-43c0-a02e-f1f9a7164143\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_183cafee-fac9-4d13-b26c-e460a21822d9\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_183cafee-fac9-4d13-b26c-e460a21822d9\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_183cafee-fac9-4d13-b26c-e460a21822d9\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_183cafee-fac9-4d13-b26c-e460a21822d9_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_183cafee-fac9-4d13-b26c-e460a21822d9_ScfEnergy\",\"zeroEnergyValue\":\"0.10789935300002185\"},{\"scfEnergyValue\":\"-157.272560113\",\"crid\":\"107-01-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_cde61822-fbcd-4ee3-b56d-b8f277b00000\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_da5c0aad-293b-4e92-b478-b1ba58a2561b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_da5c0aad-293b-4e92-b478-b1ba58a2561b\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_da5c0aad-293b-4e92-b478-b1ba58a2561b\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_da5c0aad-293b-4e92-b478-b1ba58a2561b_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_da5c0aad-293b-4e92-b478-b1ba58a2561b_ScfEnergy\",\"zeroEnergyValue\":\"0.10745111299999621\"},{\"scfEnergyValue\":\"-157.272560113\",\"crid\":\"590-18-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_cde61822-fbcd-4ee3-b56d-b8f277b00000\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_da5c0aad-293b-4e92-b478-b1ba58a2561b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_da5c0aad-293b-4e92-b478-b1ba58a2561b\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_da5c0aad-293b-4e92-b478-b1ba58a2561b\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_da5c0aad-293b-4e92-b478-b1ba58a2561b_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_da5c0aad-293b-4e92-b478-b1ba58a2561b_ScfEnergy\",\"zeroEnergyValue\":\"0.10745111299999621\"},{\"scfEnergyValue\":\"-157.257151838\",\"crid\":\"287-23-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5719aa5a-b2a7-4c99-b276-2201cf5c92d8\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_86b57472-ca82-4e2c-9234-2d12b2ba75ca\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_86b57472-ca82-4e2c-9234-2d12b2ba75ca\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_86b57472-ca82-4e2c-9234-2d12b2ba75ca\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_86b57472-ca82-4e2c-9234-2d12b2ba75ca_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_86b57472-ca82-4e2c-9234-2d12b2ba75ca_ScfEnergy\",\"zeroEnergyValue\":\"0.11020083799999725\"},{\"scfEnergyValue\":\"-157.272560115\",\"crid\":\"590-18-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0ca50a74-c772-46d5-95d7-aece9e96d1e7\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_41301e6e-c647-4fd5-b117-fb21af4695d4\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_41301e6e-c647-4fd5-b117-fb21af4695d4\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_41301e6e-c647-4fd5-b117-fb21af4695d4\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_41301e6e-c647-4fd5-b117-fb21af4695d4_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_41301e6e-c647-4fd5-b117-fb21af4695d4_ScfEnergy\",\"zeroEnergyValue\":\"0.10745111500000348\"},{\"scfEnergyValue\":\"-157.257937672\",\"crid\":\"594-11-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0fab244a-e9bb-4143-bb39-76198ecf750d\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_17856d2b-91bf-48a0-afb0-b90994d5b508\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_17856d2b-91bf-48a0-afb0-b90994d5b508\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_17856d2b-91bf-48a0-afb0-b90994d5b508\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_17856d2b-91bf-48a0-afb0-b90994d5b508_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_17856d2b-91bf-48a0-afb0-b90994d5b508_ScfEnergy\",\"zeroEnergyValue\":\"0.10887867200000301\"},{\"scfEnergyValue\":\"-205.140697005\",\"crid\":\"10102-44-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8aeb1e24-a6b7-4754-8a3c-9090029dcee6\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_5dbd02b5-345a-4cb8-82d5-7bfbcfd4efa8\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_5dbd02b5-345a-4cb8-82d5-7bfbcfd4efa8\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_5dbd02b5-345a-4cb8-82d5-7bfbcfd4efa8\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_5dbd02b5-345a-4cb8-82d5-7bfbcfd4efa8_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_5dbd02b5-345a-4cb8-82d5-7bfbcfd4efa8_ScfEnergy\",\"zeroEnergyValue\":\"0.008787004999987857\"},{\"scfEnergyValue\":\"-117.823972054\",\"crid\":\"40852-89-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e9532098-f9b4-494b-bf38-da79382e2cce\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_19c1e44a-df2d-4199-a986-de7f0238aaa8\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_19c1e44a-df2d-4199-a986-de7f0238aaa8\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_19c1e44a-df2d-4199-a986-de7f0238aaa8\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_19c1e44a-df2d-4199-a986-de7f0238aaa8_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_19c1e44a-df2d-4199-a986-de7f0238aaa8_ScfEnergy\",\"zeroEnergyValue\":\"0.0739050539999937\"},{\"scfEnergyValue\":\"-117.823972054\",\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e9532098-f9b4-494b-bf38-da79382e2cce\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_19c1e44a-df2d-4199-a986-de7f0238aaa8\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_19c1e44a-df2d-4199-a986-de7f0238aaa8\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_19c1e44a-df2d-4199-a986-de7f0238aaa8\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_19c1e44a-df2d-4199-a986-de7f0238aaa8_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_19c1e44a-df2d-4199-a986-de7f0238aaa8_ScfEnergy\",\"zeroEnergyValue\":\"0.0739050539999937\"},{\"scfEnergyValue\":\"-193.218176383\",\"crid\":\"67-64-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_353d4667-e25d-476a-bd74-5c34723c8ea3\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_b2bbcf6b-3287-46cc-a461-ab489037d289\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b2bbcf6b-3287-46cc-a461-ab489037d289\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_b2bbcf6b-3287-46cc-a461-ab489037d289\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b2bbcf6b-3287-46cc-a461-ab489037d289_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b2bbcf6b-3287-46cc-a461-ab489037d289_ScfEnergy\",\"zeroEnergyValue\":\"0.08303338300001428\"},{\"scfEnergyValue\":\"-193.168385988\",\"crid\":\"75-56-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_81bbd0e3-2f04-4be6-881f-90471ddf7054\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_6dcabf7e-fec4-481e-8066-4c598980d757\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6dcabf7e-fec4-481e-8066-4c598980d757\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_6dcabf7e-fec4-481e-8066-4c598980d757\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6dcabf7e-fec4-481e-8066-4c598980d757_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6dcabf7e-fec4-481e-8066-4c598980d757_ScfEnergy\",\"zeroEnergyValue\":\"0.08506298800000422\"},{\"scfEnergyValue\":\"-193.168385988\",\"crid\":\"15448-47-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_81bbd0e3-2f04-4be6-881f-90471ddf7054\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_6dcabf7e-fec4-481e-8066-4c598980d757\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6dcabf7e-fec4-481e-8066-4c598980d757\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_6dcabf7e-fec4-481e-8066-4c598980d757\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6dcabf7e-fec4-481e-8066-4c598980d757_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6dcabf7e-fec4-481e-8066-4c598980d757_ScfEnergy\",\"zeroEnergyValue\":\"0.08506298800000422\"},{\"scfEnergyValue\":\"-193.182998123\",\"crid\":\"107-18-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d9f56185-3445-492b-9665-70edcf7541f1\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_218af3e1-6c1d-431c-a6fa-d6f1f86f85d2\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_218af3e1-6c1d-431c-a6fa-d6f1f86f85d2\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_218af3e1-6c1d-431c-a6fa-d6f1f86f85d2\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_218af3e1-6c1d-431c-a6fa-d6f1f86f85d2_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_218af3e1-6c1d-431c-a6fa-d6f1f86f85d2_ScfEnergy\",\"zeroEnergyValue\":\"0.08491412300000434\"},{\"scfEnergyValue\":\"-193.205971199\",\"crid\":\"123-38-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_9c351a4b-a9c9-42a5-aed2-c799c2f2ed20\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_5ea0bd40-ed69-4f0c-964f-03689c597b4f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_5ea0bd40-ed69-4f0c-964f-03689c597b4f\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_5ea0bd40-ed69-4f0c-964f-03689c597b4f\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_5ea0bd40-ed69-4f0c-964f-03689c597b4f_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_5ea0bd40-ed69-4f0c-964f-03689c597b4f_ScfEnergy\",\"zeroEnergyValue\":\"0.08397319900001321\"},{\"scfEnergyValue\":\"-193.164242124\",\"crid\":\"503-30-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c23597ce-5d31-425c-a4ae-ca1c8ba0e02f\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_66ce90c0-0ee6-4580-b271-20e97cfc584b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_66ce90c0-0ee6-4580-b271-20e97cfc584b\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_66ce90c0-0ee6-4580-b271-20e97cfc584b\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_66ce90c0-0ee6-4580-b271-20e97cfc584b_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_66ce90c0-0ee6-4580-b271-20e97cfc584b_ScfEnergy\",\"zeroEnergyValue\":\"0.08658512400000973\"},{\"scfEnergyValue\":\"-193.198596818\",\"crid\":\"29456-04-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_91313c2a-8fef-48ef-a6d5-7ef0396ebbea\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_a42465aa-256f-4468-ad40-227db2ea0104\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_a42465aa-256f-4468-ad40-227db2ea0104\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_a42465aa-256f-4468-ad40-227db2ea0104\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_a42465aa-256f-4468-ad40-227db2ea0104_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_a42465aa-256f-4468-ad40-227db2ea0104_ScfEnergy\",\"zeroEnergyValue\":\"0.08426281799998492\"},{\"scfEnergyValue\":\"-193.192420942\",\"crid\":\"57642-95-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_71a329c2-eebd-4af0-b588-0e1ea5ba3b1b\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_21d82a0d-be24-44b1-ba88-d0bc06fdc21f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_21d82a0d-be24-44b1-ba88-d0bc06fdc21f\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_21d82a0d-be24-44b1-ba88-d0bc06fdc21f\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_21d82a0d-be24-44b1-ba88-d0bc06fdc21f_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_21d82a0d-be24-44b1-ba88-d0bc06fdc21f_ScfEnergy\",\"zeroEnergyValue\":\"0.08449294200002555\"},{\"scfEnergyValue\":\"-158.504162226\",\"crid\":\"106-97-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0fd442ee-472d-43ed-afc2-e45febe6dfbf\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_73310fe7-1fd8-4003-8ff3-376f029ed74c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_73310fe7-1fd8-4003-8ff3-376f029ed74c\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_73310fe7-1fd8-4003-8ff3-376f029ed74c\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_73310fe7-1fd8-4003-8ff3-376f029ed74c_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_73310fe7-1fd8-4003-8ff3-376f029ed74c_ScfEnergy\",\"zeroEnergyValue\":\"0.13145322600001919\"},{\"scfEnergyValue\":\"-153.530975838\",\"crid\":\"460-12-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_bc505883-de11-4f57-ad91-8762cfe68687\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_7654adcd-12b0-4f67-a19f-ed8464275aaf\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_7654adcd-12b0-4f67-a19f-ed8464275aaf\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_7654adcd-12b0-4f67-a19f-ed8464275aaf\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_7654adcd-12b0-4f67-a19f-ed8464275aaf_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_7654adcd-12b0-4f67-a19f-ed8464275aaf_ScfEnergy\",\"zeroEnergyValue\":\"0.0376018380000005\"},{\"scfEnergyValue\":\"-154.783330641\",\"crid\":\"689-97-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e0ddbbd5-c735-4f72-b939-1a5f1bf25e41\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_d480627d-bd9c-423d-9b39-076755148c15\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_d480627d-bd9c-423d-9b39-076755148c15\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_d480627d-bd9c-423d-9b39-076755148c15\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_d480627d-bd9c-423d-9b39-076755148c15_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_d480627d-bd9c-423d-9b39-076755148c15_ScfEnergy\",\"zeroEnergyValue\":\"0.060913640999984864\"},{\"scfEnergyValue\":\"-154.721160471\",\"crid\":\"1120-53-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a475f430-65f1-4b30-96a7-4ad855fb7d7d\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_6b217b4d-a40e-4be5-815e-1f844ba9a37e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6b217b4d-a40e-4be5-815e-1f844ba9a37e\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_6b217b4d-a40e-4be5-815e-1f844ba9a37e\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6b217b4d-a40e-4be5-815e-1f844ba9a37e_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6b217b4d-a40e-4be5-815e-1f844ba9a37e_ScfEnergy\",\"zeroEnergyValue\":\"0.060891470999990815\"},{\"scfEnergyValue\":\"-154.777635102\",\"crid\":\"2873-50-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c7bc0de0-6b09-45cf-9bb4-3c8eadfd9f47\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_066cc755-4eb0-4354-a818-a865ba058c9e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_066cc755-4eb0-4354-a818-a865ba058c9e\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_066cc755-4eb0-4354-a818-a865ba058c9e\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_066cc755-4eb0-4354-a818-a865ba058c9e_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_066cc755-4eb0-4354-a818-a865ba058c9e_ScfEnergy\",\"zeroEnergyValue\":\"0.05986310200000844\"},{\"scfEnergyValue\":\"-155.094962914\",\"crid\":\"64-17-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_63fefc5a-d49d-4841-a946-2cdb5f356983\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_1af78f6e-8ceb-4c46-9f81-0e3a0109536f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1af78f6e-8ceb-4c46-9f81-0e3a0109536f\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_1af78f6e-8ceb-4c46-9f81-0e3a0109536f\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1af78f6e-8ceb-4c46-9f81-0e3a0109536f_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_1af78f6e-8ceb-4c46-9f81-0e3a0109536f_ScfEnergy\",\"zeroEnergyValue\":\"0.07970191399999749\"},{\"scfEnergyValue\":\"-157.274513893\",\"crid\":\"624-64-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f7231649-db01-467c-9355-44813832d221\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_b03a9436-0551-42a6-8be3-ea274a29ced3\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b03a9436-0551-42a6-8be3-ea274a29ced3\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_b03a9436-0551-42a6-8be3-ea274a29ced3\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b03a9436-0551-42a6-8be3-ea274a29ced3_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b03a9436-0551-42a6-8be3-ea274a29ced3_ScfEnergy\",\"zeroEnergyValue\":\"0.1072858930000109\"},{\"scfEnergyValue\":\"-232.53181518\",\"crid\":\"78-84-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_10f8db59-4d8e-4a43-89eb-5b1d9c7e9821\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_89d03546-1671-4920-9a36-56106c579876\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_89d03546-1671-4920-9a36-56106c579876\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_89d03546-1671-4920-9a36-56106c579876\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_89d03546-1671-4920-9a36-56106c579876_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_89d03546-1671-4920-9a36-56106c579876_ScfEnergy\",\"zeroEnergyValue\":\"0.11194018000000483\"},{\"scfEnergyValue\":\"-232.542954378\",\"crid\":\"78-93-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8e464df3-ba41-4b9a-aa72-466d54c6e2fd\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_55c3c9db-b24c-4785-bc13-2a2bdc1fd389\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_55c3c9db-b24c-4785-bc13-2a2bdc1fd389\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_55c3c9db-b24c-4785-bc13-2a2bdc1fd389\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_55c3c9db-b24c-4785-bc13-2a2bdc1fd389_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_55c3c9db-b24c-4785-bc13-2a2bdc1fd389_ScfEnergy\",\"zeroEnergyValue\":\"0.11168237799998337\"},{\"scfEnergyValue\":\"-232.503572449\",\"crid\":\"109-92-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a0324a14-466c-4efd-9212-1f26c984db8d\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_dea66509-5134-47b0-b37b-cf488864e8c4\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_dea66509-5134-47b0-b37b-cf488864e8c4\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_dea66509-5134-47b0-b37b-cf488864e8c4\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_dea66509-5134-47b0-b37b-cf488864e8c4_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_dea66509-5134-47b0-b37b-cf488864e8c4_ScfEnergy\",\"zeroEnergyValue\":\"0.11215044899998361\"},{\"scfEnergyValue\":\"-232.51868947\",\"crid\":\"109-99-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_793ebc48-c552-4a74-85a8-90e0b9bc8e1d\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_cf0fc840-df00-4d37-9a79-26a9e0116100\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_cf0fc840-df00-4d37-9a79-26a9e0116100\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_cf0fc840-df00-4d37-9a79-26a9e0116100\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_cf0fc840-df00-4d37-9a79-26a9e0116100_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_cf0fc840-df00-4d37-9a79-26a9e0116100_ScfEnergy\",\"zeroEnergyValue\":\"0.11619647000000555\"},{\"scfEnergyValue\":\"-232.501234649\",\"crid\":\"116-11-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_00e0e336-4c75-4d5c-9242-29b4c9aacbff\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_b539ab22-e47e-4839-ac10-f7125f6b4f53\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b539ab22-e47e-4839-ac10-f7125f6b4f53\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_b539ab22-e47e-4839-ac10-f7125f6b4f53\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b539ab22-e47e-4839-ac10-f7125f6b4f53_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_b539ab22-e47e-4839-ac10-f7125f6b4f53_ScfEnergy\",\"zeroEnergyValue\":\"0.11215664899998501\"},{\"scfEnergyValue\":\"-232.530442358\",\"crid\":\"123-72-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_51949c88-4c82-40d9-af73-b47f59fac77a\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_6eb657ab-5708-473c-acd6-f24b6cdda92c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6eb657ab-5708-473c-acd6-f24b6cdda92c\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_6eb657ab-5708-473c-acd6-f24b6cdda92c\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6eb657ab-5708-473c-acd6-f24b6cdda92c_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6eb657ab-5708-473c-acd6-f24b6cdda92c_ScfEnergy\",\"zeroEnergyValue\":\"0.11247835799997574\"},{\"scfEnergyValue\":\"-232.502501751\",\"crid\":\"2919-23-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8b4e661c-11cb-4296-b3d1-4cbca0a0237c\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_490711ec-3846-4239-9d14-bca148887bbf\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_490711ec-3846-4239-9d14-bca148887bbf\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_490711ec-3846-4239-9d14-bca148887bbf\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_490711ec-3846-4239-9d14-bca148887bbf_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_490711ec-3846-4239-9d14-bca148887bbf_ScfEnergy\",\"zeroEnergyValue\":\"0.11461575100000232\"},{\"scfEnergyValue\":\"-77.3566457906\",\"crid\":\"74-86-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2e8f9829-37ca-46ad-91bc-010f37835b4f\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_92039ac2-80a0-45d3-83ab-3460cf8c371a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_92039ac2-80a0-45d3-83ab-3460cf8c371a\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_92039ac2-80a0-45d3-83ab-3460cf8c371a\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_92039ac2-80a0-45d3-83ab-3460cf8c371a_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_92039ac2-80a0-45d3-83ab-3460cf8c371a_ScfEnergy\",\"zeroEnergyValue\":\"0.027028790599999297\"},{\"scfEnergyValue\":\"-77.2878346262\",\"crid\":\"2143-69-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8710f12f-3edc-4172-98f5-b4465c9b8dd0\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_80aa04c3-374c-4f1f-a83d-aec6d98d4bc5\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_80aa04c3-374c-4f1f-a83d-aec6d98d4bc5\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_80aa04c3-374c-4f1f-a83d-aec6d98d4bc5\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_80aa04c3-374c-4f1f-a83d-aec6d98d4bc5_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_80aa04c3-374c-4f1f-a83d-aec6d98d4bc5_ScfEnergy\",\"zeroEnergyValue\":\"0.023538626199993473\"},{\"scfEnergyValue\":\"-152.651574382\",\"crid\":\"463-51-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3769c137-40fa-40fa-a2b9-f321da3dc0c0\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_84bb3d78-ac42-4dc0-ac04-b1fdcd88f809\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_84bb3d78-ac42-4dc0-ac04-b1fdcd88f809\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_84bb3d78-ac42-4dc0-ac04-b1fdcd88f809\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_84bb3d78-ac42-4dc0-ac04-b1fdcd88f809_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_84bb3d78-ac42-4dc0-ac04-b1fdcd88f809_ScfEnergy\",\"zeroEnergyValue\":\"0.03151138200001924\"},{\"scfEnergyValue\":\"-38.4940050197\",\"crid\":\"3315-37-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_afe27844-7010-49fa-9674-73be295bf11d\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_a0fd97ff-7768-4eb5-9792-c2cf11be228e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_a0fd97ff-7768-4eb5-9792-c2cf11be228e\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_a0fd97ff-7768-4eb5-9792-c2cf11be228e\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_a0fd97ff-7768-4eb5-9792-c2cf11be228e_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_a0fd97ff-7768-4eb5-9792-c2cf11be228e_ScfEnergy\",\"zeroEnergyValue\":\"0.006429019700000538\"},{\"scfEnergyValue\":\"-38.4940050197\",\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_afe27844-7010-49fa-9674-73be295bf11d\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_a0fd97ff-7768-4eb5-9792-c2cf11be228e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_a0fd97ff-7768-4eb5-9792-c2cf11be228e\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_a0fd97ff-7768-4eb5-9792-c2cf11be228e\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_a0fd97ff-7768-4eb5-9792-c2cf11be228e_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_a0fd97ff-7768-4eb5-9792-c2cf11be228e_ScfEnergy\",\"zeroEnergyValue\":\"0.006429019700000538\"},{\"scfEnergyValue\":\"-114.541755866\",\"crid\":\"50-00-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_cba9378c-b272-45b1-a614-52c80d11ba0f\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_992f0128-1408-4299-843c-fc47dbee467c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_992f0128-1408-4299-843c-fc47dbee467c\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_992f0128-1408-4299-843c-fc47dbee467c\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_992f0128-1408-4299-843c-fc47dbee467c_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_992f0128-1408-4299-843c-fc47dbee467c_ScfEnergy\",\"zeroEnergyValue\":\"0.026495866000004753\"},{\"scfEnergyValue\":\"-39.8551669672\",\"crid\":\"2229-07-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_008ee48a-78a8-4d7b-84e9-897d691cde24\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5_ScfEnergy\",\"zeroEnergyValue\":\"0.029643967200001953\"},{\"scfEnergyValue\":\"-39.8551669672\",\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_008ee48a-78a8-4d7b-84e9-897d691cde24\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5_ScfEnergy\",\"zeroEnergyValue\":\"0.029643967200001953\"},{\"scfEnergyValue\":\"-115.092213368\",\"crid\":\"2143-68-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f7194422-7fc7-4c05-ab1a-e64a12df4cde\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_6c23df9b-59c4-441c-a80f-7ca198b98262\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6c23df9b-59c4-441c-a80f-7ca198b98262\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_6c23df9b-59c4-441c-a80f-7ca198b98262\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6c23df9b-59c4-441c-a80f-7ca198b98262_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6c23df9b-59c4-441c-a80f-7ca198b98262_ScfEnergy\",\"zeroEnergyValue\":\"0.03611636800000895\"},{\"scfEnergyValue\":\"-115.102155362\",\"crid\":\"2597-43-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0ab3dbfa-d3ce-4c7c-be5b-660e3601b6e2\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_6c93883c-31c7-46f0-a86c-c71ad373d4da\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6c93883c-31c7-46f0-a86c-c71ad373d4da\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_6c93883c-31c7-46f0-a86c-c71ad373d4da\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6c93883c-31c7-46f0-a86c-c71ad373d4da_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_6c93883c-31c7-46f0-a86c-c71ad373d4da_ScfEnergy\",\"zeroEnergyValue\":\"0.03603036200000531\"},{\"scfEnergyValue\":\"-40.5339279838\",\"crid\":\"74-82-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_1e7d8a91-2ea9-4c75-b9ed-8396f13573bb\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_e17a0cec-0662-4d21-ac38-19873ee1aef2\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e17a0cec-0662-4d21-ac38-19873ee1aef2\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_e17a0cec-0662-4d21-ac38-19873ee1aef2\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e17a0cec-0662-4d21-ac38-19873ee1aef2_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e17a0cec-0662-4d21-ac38-19873ee1aef2_ScfEnergy\",\"zeroEnergyValue\":\"0.044533983800000954\"},{\"scfEnergyValue\":\"-40.5339279838\",\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_1e7d8a91-2ea9-4c75-b9ed-8396f13573bb\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_e17a0cec-0662-4d21-ac38-19873ee1aef2\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e17a0cec-0662-4d21-ac38-19873ee1aef2\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_e17a0cec-0662-4d21-ac38-19873ee1aef2\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e17a0cec-0662-4d21-ac38-19873ee1aef2_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e17a0cec-0662-4d21-ac38-19873ee1aef2_ScfEnergy\",\"zeroEnergyValue\":\"0.044533983800000954\"},{\"scfEnergyValue\":\"-115.764943665\",\"crid\":\"67-56-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_bbfd8e83-6c58-4ff3-820c-2095d2ab6998\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_e660c08e-d5c1-44f1-a863-eeed09f6bb2e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e660c08e-d5c1-44f1-a863-eeed09f6bb2e\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_e660c08e-d5c1-44f1-a863-eeed09f6bb2e\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e660c08e-d5c1-44f1-a863-eeed09f6bb2e_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_e660c08e-d5c1-44f1-a863-eeed09f6bb2e_ScfEnergy\",\"zeroEnergyValue\":\"0.05105366499999775\"},{\"scfEnergyValue\":\"-56.5826355219\",\"crid\":\"7664-41-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e3b2d2f7-c248-46b3-bbbe-07ce1dd908d4\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_84014e03-89b4-4fb7-b1cf-b7d1874efcd5\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_84014e03-89b4-4fb7-b1cf-b7d1874efcd5\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_84014e03-89b4-4fb7-b1cf-b7d1874efcd5\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_84014e03-89b4-4fb7-b1cf-b7d1874efcd5_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_84014e03-89b4-4fb7-b1cf-b7d1874efcd5_ScfEnergy\",\"zeroEnergyValue\":\"0.03423952190000534\"},{\"scfEnergyValue\":\"-55.2410487251\",\"crid\":\"7664-41-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2ed8ca6a-2ae6-4ff0-a5e0-f42c7d2515e6\",\"zeroEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ZeroPointEnergy_bceae5c9-5367-4702-b7ff-98e065bea3d6\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_bceae5c9-5367-4702-b7ff-98e065bea3d6\",\"scfEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/ScfEnergy_bceae5c9-5367-4702-b7ff-98e065bea3d6\",\"zeroElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_bceae5c9-5367-4702-b7ff-98e065bea3d6_ZeroPointEnergy\",\"scfElectronicEnergy\":\"http://www.theworldavatar.com/kb/ontocompchem/FloatValue_bceae5c9-5367-4702-b7ff-98e065bea3d6_ScfEnergy\",\"zeroEnergyValue\":\"0.00741472509999852\"}]"; - query.result = "25"; - return format(query); - } - - /** - * A federated query adapted from {@link RemoteStoreClientTest#performMechanismCountQueryTest()} - * with only one basic triple patterns for datasources ontospecies and ontocompchem. - * - * @return - */ - public Query getSparqlOntoSpeciesOntoCompChemSmall() { - Query query = new Query(); - query.sparql = "PREFIX ontospecies: \r\n" - + "PREFIX ontocompchem: \r\n" - + "PREFIX gc: \r\n" - + "SELECT ?species ?crid ?compchemspecies\r\n" - + "WHERE {\r\n" - + "%s" - + " ?species ontospecies:casRegistryID ?crid .\r\n" - + "%s" - + " ?compchemspecies ontocompchem:hasUniqueSpecies ?species .\r\n" - + "%s" - + "}"; - addEndpointsForSparqlOntoSpeciesOntoCompChem(query); - // result size = 165 - //query.result = "[{\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e9532098-f9b4-494b-bf38-da79382e2cce\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_19c1e44a-df2d-4199-a986-de7f0238aaa8\"},{\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f2ee9b6e-13f3-46c3-bdce-379ec972f8b7\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_cdd30304-b183-4b45-b6f5-4579246c3cae\"},{\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f7ea6030-fdc6-4013-927a-5b3dcff4b85a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\"},{\"crid\":\"2597-43-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0ab3dbfa-d3ce-4c7c-be5b-660e3601b6e2\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6c93883c-31c7-46f0-a86c-c71ad373d4da\"},{\"crid\":\"2932-78-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_268196b3-6d26-48ed-af35-53d744e2d24e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_2f11d04c-d26a-4076-804e-7a30b979a19b\"},{\"crid\":\"287-23-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5719aa5a-b2a7-4c99-b276-2201cf5c92d8\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_86b57472-ca82-4e2c-9234-2d12b2ba75ca\"},{\"crid\":\"2781-85-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_6555b1a0-6e58-40f3-83e6-659589bee021\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6fe17749-550b-4eb4-aea8-07f9ddd74960\"},{\"crid\":\"2417-82-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_69f35e93-b66b-4136-8146-ebb2d03b080b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_30dc7a5c-0ec8-4230-8c55-6214ba427d0a\"},{\"crid\":\"2597-44-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_6d9422b5-8d1d-414d-9b8c-0e8e3407e700\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_c8ee81aa-c601-40a4-bae4-8f2642719bd2\"},{\"crid\":\"28933-84-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_7a754131-2633-4c95-bc64-2cba4db37d29\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_8036c915-4fb3-42e7-a7fa-13b39514cae9\"},{\"crid\":\"2492-36-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_7e8d571f-1a2e-4130-a27d-7f03fe9cafba\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_095033b8-97d7-4161-b56d-f86d9bc30cee\"},{\"crid\":\"2919-23-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8b4e661c-11cb-4296-b3d1-4cbca0a0237c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_490711ec-3846-4239-9d14-bca148887bbf\"},{\"crid\":\"2669-89-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8e1ad157-2911-4740-a851-cd1b4735704c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_39adf818-502a-42fd-b7d6-45b6bde44df0\"},{\"crid\":\"2465-56-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a3755d47-cd9a-4d9d-b50f-b3efd8bc70f7\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f5723bca-a907-4126-8be9-d3b0b94257a5\"},{\"crid\":\"2873-50-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c7bc0de0-6b09-45cf-9bb4-3c8eadfd9f47\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_066cc755-4eb0-4354-a818-a865ba058c9e\"},{\"crid\":\"2348-55-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d638f1e4-bcf4-4d52-b999-dc6822fb72a1\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_21990f99-8da8-4b91-8673-e3b7a9b22dd5\"},{\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_050d6d0a-3c3e-4bbb-8e07-b156b3738b53\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_da858b54-3c5f-42c8-93e9-7f03bbbbd115\"},{\"crid\":\"10028-15-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_355109b1-2989-4a06-9547-21271b40e19b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_88aa7bfb-a0e6-47f0-953c-36519b45354b\"},{\"crid\":\"10102-43-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e5a47ea5-910a-4292-abd7-773793a66ca0\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b5c73ced-2117-4905-a6b2-977c9926ea8c\"},{\"crid\":\"10024-97-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_fd7a83cf-dc61-4bec-ab69-b5855f472e2f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_ed568dd0-831e-4294-88fc-519e69d757df\"},{\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_733eb552-79ee-43cc-afd0-3ee4324d407f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e9c02871-716d-4153-b059-4fb7e4a5d7a0\"},{\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b915a6d9-6013-4cab-80a4-56f1504e98fe\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e55c113f-dec6-4da7-8020-e71df374ea67\"},{\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e179b9f4-ab21-4f46-b83a-0065ce2553b2\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_ea4fcb53-36e5-44a6-a648-14a9763c199e\"},{\"crid\":\"78-94-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_03abefa5-5453-4e4d-b900-bbc0def43c51\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_dc901906-20a3-45f8-878f-2b5a9be9a91a\"},{\"crid\":\"78-84-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_10f8db59-4d8e-4a43-89eb-5b1d9c7e9821\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_89d03546-1671-4920-9a36-56106c579876\"},{\"crid\":\"78-85-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_12238c7c-98b6-49e3-8c14-31c1edc97a9c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_7db61428-1ff9-4163-a0bb-131a37f68f01\"},{\"crid\":\"7722-84-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_663e4fd4-1fcd-4b07-9521-19eedf78c55d\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_99765f25-77cf-4734-8a83-cc8da748fdff\"},{\"crid\":\"7727-37-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_798ae810-0c06-40e2-acae-e9e227aeca43\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_555e9d05-3009-478f-905f-45bddb44d88f\"},{\"crid\":\"78-93-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8e464df3-ba41-4b9a-aa72-466d54c6e2fd\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_55c3c9db-b24c-4785-bc13-2a2bdc1fd389\"},{\"crid\":\"7732-18-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_9a49de29-8090-482e-b802-edda16dc68bf\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_8102986a-3c9d-4592-90ef-bc3b80005cb9\"},{\"crid\":\"7732-18-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a8173444-de42-4489-a366-8292dd86e8fb\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_ffe3d10d-cc83-48e4-b1a7-b016384ca3ec\"},{\"crid\":\"7732-18-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d668de75-6ebd-4db6-9540-25d4b0f1fcb0\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_75937aef-7433-4d0a-a8e4-05b763d0c4be\"},{\"crid\":\"7782-44-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_dc415280-b8f4-478f-8929-935ef6c1337b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_65f52d70-f8be-4549-9555-6d9815b09e1b\"},{\"crid\":\"7664-41-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e3b2d2f7-c248-46b3-bbbe-07ce1dd908d4\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_84014e03-89b4-4fb7-b1cf-b7d1874efcd5\"},{\"crid\":\"7664-41-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_efd401ff-51bd-4fec-afb7-3650e92910a1\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_7c240a02-d1c5-460a-a703-e16c4e0b13aa\"},{\"crid\":\"7664-41-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_fbf65357-0142-4a9e-9e38-98b6f076b6fb\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b2457b8e-964f-4722-9a6e-9e03eca41980\"},{\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_1eceb125-0f98-4c5a-826d-70809e560035\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_58fa4851-60fe-4c02-ab66-4509811a00e5\"},{\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2c0cd6f1-ecaa-4c70-801d-7f43d3be89bb\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_0895c702-0f6a-4b85-b384-cfbfde72fce4\"},{\"crid\":\"[]\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_453fe568-f93c-4229-b08b-8c05b937faa4\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_94c3a415-477e-4c43-b474-d3e6f6f9ef33\"},{\"crid\":\"2229-07-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_008ee48a-78a8-4d7b-84e9-897d691cde24\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5\"},{\"crid\":\"2040-95-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0092c497-ad02-458d-a1cb-7be57784a159\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_5c4a8f8c-6c1e-4053-a218-3434ffec625a\"},{\"crid\":\"1981-80-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_1affa5ba-c003-49ac-8f35-8c2582945f99\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_125a3c04-4606-4e3c-a866-bd04c546f469\"},{\"crid\":\"2074-87-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_1eceb125-0f98-4c5a-826d-70809e560035\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_58fa4851-60fe-4c02-ab66-4509811a00e5\"},{\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3230df3d-2767-452d-ba73-e34a67ad285c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_30b7a0f3-4e6b-4a82-93ce-e13063b9235b\"},{\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3230df3d-2767-452d-ba73-e34a67ad285c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f4f60a69-bb7b-4a04-a39a-f644dc7debc2\"},{\"crid\":\"1678-92-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_48076567-dfe1-4d4a-93c1-20946ba68bf6\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b556764c-d007-4c7f-b485-d5a8b5bc26f8\"},{\"crid\":\"2143-61-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_48929d84-722b-4359-939d-f51d94083138\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b53c1b3c-bf4b-41c0-ba1a-c248031ec4e5\"},{\"crid\":\"2025-56-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5c91f127-7fc7-4a32-b4bf-b34476b379de\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_af9c0fc5-b708-4989-9b89-ba4fb8618d53\"},{\"crid\":\"15448-47-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_81bbd0e3-2f04-4be6-881f-90471ddf7054\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6dcabf7e-fec4-481e-8066-4c598980d757\"},{\"crid\":\"2143-69-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8710f12f-3edc-4172-98f5-b4465c9b8dd0\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_80aa04c3-374c-4f1f-a83d-aec6d98d4bc5\"},{\"crid\":\"157-33-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b34c3f37-ce40-421d-bc8e-d64d614e1e37\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_0c5814de-c030-4771-b7bd-8da8ba9fe9f7\"},{\"crid\":\"16165-40-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b915a6d9-6013-4cab-80a4-56f1504e98fe\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e55c113f-dec6-4da7-8020-e71df374ea67\"},{\"crid\":\"2025-55-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c6384a33-227d-4eb5-bee5-d314a3b229aa\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_a9eccda6-4732-4b98-ae57-9b620edd601c\"},{\"crid\":\"2143-68-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f7194422-7fc7-4c05-ab1a-e64a12df4cde\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6c23df9b-59c4-441c-a80f-7ca198b98262\"},{\"crid\":\"2008-19-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f7ea6030-fdc6-4013-927a-5b3dcff4b85a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\"},{\"crid\":\"463-49-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_192e43f9-6662-42a8-b174-662a33eb1334\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_c01578c8-e9fd-418a-aef2-cc1172a79f23\"},{\"crid\":\"463-51-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3769c137-40fa-40fa-a2b9-f321da3dc0c0\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_84bb3d78-ac42-4dc0-ac04-b1fdcd88f809\"},{\"crid\":\"32458-33-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_733eb552-79ee-43cc-afd0-3ee4324d407f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e9c02871-716d-4153-b059-4fb7e4a5d7a0\"},{\"crid\":\"3100-04-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_89a9c49b-c64c-41a5-b741-6843f3a7e910\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6c4c7272-d1db-44c4-98fd-529cb9b9ecb1\"},{\"crid\":\"32038-79-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8f579fe4-1a03-4f11-8811-d708db9638ea\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1e88ddf9-767e-484b-a2f9-08f66d3bc409\"},{\"crid\":\"29456-04-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_91313c2a-8fef-48ef-a6d5-7ef0396ebbea\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_a42465aa-256f-4468-ad40-227db2ea0104\"},{\"crid\":\"3170-83-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_92e851ca-20f7-410d-b33a-82db8c36bb42\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_fffc684c-f1bc-4bd9-9958-dfd2be10e008\"},{\"crid\":\"3315-37-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_afe27844-7010-49fa-9674-73be295bf11d\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_a0fd97ff-7768-4eb5-9792-c2cf11be228e\"},{\"crid\":\"4170-30-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b5642744-e411-4e74-8d70-08dbe1e39797\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_477567ee-57ea-48c6-9d56-4fbdbbdad0dd\"},{\"crid\":\"460-12-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_bc505883-de11-4f57-ad91-8762cfe68687\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_7654adcd-12b0-4f67-a19f-ed8464275aaf\"},{\"crid\":\"3031-73-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_bd3e0b6d-68f8-4395-bbeb-9d66b6fb090e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_a14c59c0-f467-497f-85cd-98f3cd19620b\"},{\"crid\":\"3352-57-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d668de75-6ebd-4db6-9540-25d4b0f1fcb0\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_75937aef-7433-4d0a-a8e4-05b763d0c4be\"},{\"crid\":\"39124-79-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e179b9f4-ab21-4f46-b83a-0065ce2553b2\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_ea4fcb53-36e5-44a6-a648-14a9763c199e\"},{\"crid\":\"40852-89-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e9532098-f9b4-494b-bf38-da79382e2cce\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_19c1e44a-df2d-4199-a986-de7f0238aaa8\"},{\"crid\":\"4218-50-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f2ee9b6e-13f3-46c3-bdce-379ec972f8b7\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_cdd30304-b183-4b45-b6f5-4579246c3cae\"},{\"crid\":\"106-97-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0fd442ee-472d-43ed-afc2-e45febe6dfbf\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_73310fe7-1fd8-4003-8ff3-376f029ed74c\"},{\"crid\":\"109-93-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_15ffd444-51f3-4e30-9960-82fe7e258475\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e94be489-3030-48d7-999b-4e72f051c07b\"},{\"crid\":\"103905-52-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_772804ac-e72d-44af-b414-5c237af61445\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1b5cb9c5-94ad-449a-972e-4074bb6a1bae\"},{\"crid\":\"107-00-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_78b569d8-2592-4ff3-a479-565d29c7536d\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_d41353e1-1a7e-4bbe-a17c-b13a90df2b90\"},{\"crid\":\"109-99-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_793ebc48-c552-4a74-85a8-90e0b9bc8e1d\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_cf0fc840-df00-4d37-9a79-26a9e0116100\"},{\"crid\":\"106-98-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_799e5430-f3ae-43c0-a02e-f1f9a7164143\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_183cafee-fac9-4d13-b26c-e460a21822d9\"},{\"crid\":\"111-84-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_7cba9b1d-79c6-4df4-ae92-eaedb7476f20\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_34486bee-f786-4bd2-ba1b-f7d82cadb88a\"},{\"crid\":\"10102-44-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8aeb1e24-a6b7-4754-8a3c-9090029dcee6\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_5dbd02b5-345a-4cb8-82d5-7bfbcfd4efa8\"},{\"crid\":\"110-00-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_9c6589a5-bc50-4d01-80f1-80d2635f879b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_5887435c-680d-403b-96a1-603330055273\"},{\"crid\":\"109-92-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a0324a14-466c-4efd-9212-1f26c984db8d\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_dea66509-5134-47b0-b37b-cf488864e8c4\"},{\"crid\":\"1120-53-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a475f430-65f1-4b30-96a7-4ad855fb7d7d\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6b217b4d-a40e-4be5-815e-1f844ba9a37e\"},{\"crid\":\"106-99-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c2ebdaaf-1cd5-46ae-a2fe-f2e33cffc455\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_2b2739bc-d19d-459e-80e8-1972d6dba575\"},{\"crid\":\"107-01-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_cde61822-fbcd-4ee3-b56d-b8f277b00000\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_da5c0aad-293b-4e92-b478-b1ba58a2561b\"},{\"crid\":\"107-18-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d9f56185-3445-492b-9665-70edcf7541f1\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_218af3e1-6c1d-431c-a6fa-d6f1f86f85d2\"},{\"crid\":\"115-07-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f8650220-7b3d-4504-a2d7-b56c604b20f8\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_fdd1ce35-ff5c-40c1-9e82-e74e1bdf692c\"},{\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_008ee48a-78a8-4d7b-84e9-897d691cde24\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_af0747d5-2d94-4b80-a13a-dc99a3f4f9f5\"},{\"crid\":\"116-11-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_00e0e336-4c75-4d5c-9242-29b4c9aacbff\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b539ab22-e47e-4839-ac10-f7125f6b4f53\"},{\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_1e7d8a91-2ea9-4c75-b9ed-8396f13573bb\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e17a0cec-0662-4d21-ac38-19873ee1aef2\"},{\"crid\":\"123-72-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_51949c88-4c82-40d9-af73-b47f59fac77a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6eb657ab-5708-473c-acd6-f24b6cdda92c\"},{\"crid\":\"1191-95-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_6eeda496-71c9-406d-985f-923c4c029862\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e93f7ba1-b372-48f1-b437-1bdc2f1f2362\"},{\"crid\":\"1333-74-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_70f5eb2c-e74c-4147-8bae-41dbeff35255\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_256bdc6d-375c-44b6-820b-b0d69916829e\"},{\"crid\":\"123-38-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_9c351a4b-a9c9-42a5-aed2-c799c2f2ed20\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_5ea0bd40-ed69-4f0c-964f-03689c597b4f\"},{\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a3755d47-cd9a-4d9d-b50f-b3efd8bc70f7\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f5723bca-a907-4126-8be9-d3b0b94257a5\"},{\"crid\":\"14493-06-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_afe27844-7010-49fa-9674-73be295bf11d\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_a0fd97ff-7768-4eb5-9792-c2cf11be228e\"},{\"crid\":\"123-73-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b5642744-e411-4e74-8d70-08dbe1e39797\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_477567ee-57ea-48c6-9d56-4fbdbbdad0dd\"},{\"crid\":\"1191-99-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d444b030-3656-4410-8c7b-9312dc9961cb\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b27993b7-4a11-4831-99d3-67289baf2dff\"},{\"crid\":\"12385-13-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_ea684392-7ac2-4519-8a72-ecb5ab768cf9\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1123a1e9-22de-436b-99a1-afc32aca170e\"},{\"crid\":\"1333-74-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_ea684392-7ac2-4519-8a72-ecb5ab768cf9\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1123a1e9-22de-436b-99a1-afc32aca170e\"},{\"crid\":\"13770-40-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_efd401ff-51bd-4fec-afb7-3650e92910a1\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_7c240a02-d1c5-460a-a703-e16c4e0b13aa\"},{\"crid\":\"115-10-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f046412c-1c10-40f4-943c-d53b24c7f318\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_cc0e30d8-ecd6-4a21-8dc6-229b99f112e8\"},{\"crid\":\"74-85-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0021961d-cdf8-470a-b2d3-4c6faff43948\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_fc2d91db-ab3c-49e0-a43b-d49051f501b1\"},{\"crid\":\"74-82-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_1e7d8a91-2ea9-4c75-b9ed-8396f13573bb\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e17a0cec-0662-4d21-ac38-19873ee1aef2\"},{\"crid\":\"71-23-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2caeb3cd-cc2d-4500-be2c-5cb5008cf144\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_38d39135-7aff-4411-8596-67edb5c08c24\"},{\"crid\":\"74-86-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2e8f9829-37ca-46ad-91bc-010f37835b4f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_92039ac2-80a0-45d3-83ab-3460cf8c371a\"},{\"crid\":\"7664-41-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2ed8ca6a-2ae6-4ff0-a5e0-f42c7d2515e6\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_bceae5c9-5367-4702-b7ff-98e065bea3d6\"},{\"crid\":\"74-98-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3756e7eb-8648-4dfa-ac60-2242ea26a116\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_9b3682be-ba33-4889-b6fc-788f6d6349a7\"},{\"crid\":\"75-07-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_7bd49e3d-fb8b-4089-a8c7-2b13178773f9\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_d02e63c8-f83c-4a74-abd4-4b414a8925db\"},{\"crid\":\"75-56-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_81bbd0e3-2f04-4be6-881f-90471ddf7054\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6dcabf7e-fec4-481e-8066-4c598980d757\"},{\"crid\":\"75-19-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_8b7d26b6-1f33-4ca7-8d08-e5404fee4323\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_d3478691-877a-4919-8043-948842541d49\"},{\"crid\":\"75-21-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_ac81baa1-aafd-4124-88d0-92a4df71d4b9\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_658b5cee-c4fe-476b-9a48-3abbaeee115c\"},{\"crid\":\"74-84-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b026cc7a-f7c6-4a16-97a1-a13f930d5e52\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_d8728c67-ea17-4f1d-b92d-86ac6d32acfa\"},{\"crid\":\"75-28-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c74e26f9-75b8-4180-b793-f2cf4abaeccb\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_00e5b245-1333-40c0-9723-7120d58c8547\"},{\"crid\":\"74-99-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d5024c74-8791-485a-a907-981390ae1bc6\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_00a4f486-881b-449c-8a69-aa3f51b55814\"},{\"crid\":\"70411-98-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e10df2bb-9798-4c72-828b-1cfd6b967a0a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_6197ae41-ba7b-4b7b-a3d9-0a04feb3f8ee\"},{\"crid\":\"71080-92-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f157c9d6-8656-4e1c-be52-314888caf917\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b211adff-54b4-4ac6-9c12-359ef7e8897a\"},{\"crid\":\"6700-78-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_050d6d0a-3c3e-4bbb-8e07-b156b3738b53\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_da858b54-3c5f-42c8-93e9-7f03bbbbd115\"},{\"crid\":\"594-11-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0fab244a-e9bb-4143-bb39-76198ecf750d\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_17856d2b-91bf-48a0-afb0-b90994d5b508\"},{\"crid\":\"6401-87-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_268196b3-6d26-48ed-af35-53d744e2d24e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_2f11d04c-d26a-4076-804e-7a30b979a19b\"},{\"crid\":\"60731-11-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2c0cd6f1-ecaa-4c70-801d-7f43d3be89bb\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_0895c702-0f6a-4b85-b384-cfbfde72fce4\"},{\"crid\":\"67-64-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_353d4667-e25d-476a-bd74-5c34723c8ea3\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b2bbcf6b-3287-46cc-a461-ab489037d289\"},{\"crid\":\"6142-73-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_44698b0e-35ab-4328-8a0b-fcf32b6ff8f5\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_26d66d3e-e1c9-4fab-a679-6faa394b2e37\"},{\"crid\":\"64-17-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_63fefc5a-d49d-4841-a946-2cdb5f356983\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1af78f6e-8ceb-4c46-9f81-0e3a0109536f\"},{\"crid\":\"67-63-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_6979a7f1-5c89-4b4b-b6d0-7d41ec56034a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_bcf2e9db-9182-4f4d-8ba2-d2e0b5205cfa\"},{\"crid\":\"67-56-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_bbfd8e83-6c58-4ff3-820c-2095d2ab6998\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_e660c08e-d5c1-44f1-a863-eeed09f6bb2e\"},{\"crid\":\"630-08-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c510ad6b-5fe7-4de3-ae7c-29c2497d70a4\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_3723f466-4dcd-4196-ae91-2efe04d14fa4\"},{\"crid\":\"689-97-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e0ddbbd5-c735-4f72-b939-1a5f1bf25e41\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_d480627d-bd9c-423d-9b39-076755148c15\"},{\"crid\":\"67-56-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f157c9d6-8656-4e1c-be52-314888caf917\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b211adff-54b4-4ac6-9c12-359ef7e8897a\"},{\"crid\":\"624-64-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f7231649-db01-467c-9355-44813832d221\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b03a9436-0551-42a6-8be3-ea274a29ced3\"},{\"crid\":\"67152-18-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f7ea6030-fdc6-4013-927a-5b3dcff4b85a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f001f496-1cb5-41b5-89cb-f29dfe09a4b6\"},{\"crid\":\"590-18-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_0ca50a74-c772-46d5-95d7-aece9e96d1e7\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_41301e6e-c647-4fd5-b117-fb21af4695d4\"},{\"crid\":\"5009-27-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_2fb70cfe-6707-4d6c-b977-bae913c4878f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_874cfeb4-6d9e-4063-84ed-7dec4aca7867\"},{\"crid\":\"56640-70-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5a165fec-28f2-4b69-8bab-75919ac50307\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_2863e336-730f-441c-bfbd-c622c48532c0\"},{\"crid\":\"557-75-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5b5ac265-1a38-4dbf-9207-eb6b6739dd60\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_c2c4a2e9-8cb3-49f6-aa54-207501a641f9\"},{\"crid\":\"4630-45-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_6ff0d6ca-b9a3-4c9a-89a8-26475f8e638e\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_77314bcb-19c9-4132-af20-65f9b985de81\"},{\"crid\":\"57642-95-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_71a329c2-eebd-4af0-b588-0e1ea5ba3b1b\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_21d82a0d-be24-44b1-ba88-d0bc06fdc21f\"},{\"crid\":\"51095-15-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_82216f39-6a17-4951-930f-8af65cdfa307\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_8bcb2fcb-9241-4ec5-b986-f6ca00a5dccd\"},{\"crid\":\"503-17-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_9826b2e4-4e2f-49ae-861d-4a549316c748\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_35e6af0b-75ad-4f69-a361-9e7e1668035f\"},{\"crid\":\"59120-04-6\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_9f218b08-05c6-488f-ae8c-0aad7da57508\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_1c525427-9383-4ece-9931-91a8876c1878\"},{\"crid\":\"503-30-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c23597ce-5d31-425c-a4ae-ca1c8ba0e02f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_66ce90c0-0ee6-4580-b271-20e97cfc584b\"},{\"crid\":\"50-00-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_cba9378c-b272-45b1-a614-52c80d11ba0f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_992f0128-1408-4299-843c-fc47dbee467c\"},{\"crid\":\"540-67-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_cc6e4765-ba77-4595-bb07-995fb420f826\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_eb528e75-5ea1-48a6-913a-a0b54cbbdb55\"},{\"crid\":\"590-18-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_cde61822-fbcd-4ee3-b56d-b8f277b00000\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_da5c0aad-293b-4e92-b478-b1ba58a2561b\"},{\"crid\":\"590-19-2\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_e7976e7f-0170-4266-8120-fee624d1e4b3\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_76fc3d1d-5998-4611-a0d8-d645d0392400\"},{\"crid\":\"504-64-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f0959f5c-85a6-4eaa-95c6-0d5fb036410f\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_4e8942de-4e89-4f24-8aff-659004fc405a\"},{\"crid\":\"822-35-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_404f4b0a-1b43-4867-b0f8-1f9f62517eba\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_9baaa72d-13e0-4f01-b200-7f734530db7f\"},{\"crid\":\"9002-89-5\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5b5ac265-1a38-4dbf-9207-eb6b6739dd60\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_c2c4a2e9-8cb3-49f6-aa54-207501a641f9\"},{\"crid\":\"208-96-8\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_d26eb5b7-8dbd-4a2a-9800-c0dd86363893\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_44130cfd-7c51-4f62-80a9-57d3163b5794\"},{\"crid\":\"259-79-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_b7b97c21-4214-4a9e-9c24-5a7a9d4fca32\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_724af967-8938-44e6-aee8-74ad38941514\"},{\"crid\":\"275-51-4\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_c7a324f0-8071-42e5-80e4-576ffc3e7569\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_7b751a96-0987-476e-945a-67543df8d66a\"},{\"crid\":\"286-85-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_f9c30144-ec36-41cb-b537-7ed0bbe8e75a\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_223c314c-91bb-43ca-8911-235fb764eabb\"},{\"crid\":\"7440-44-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3230df3d-2767-452d-ba73-e34a67ad285c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_30b7a0f3-4e6b-4a82-93ce-e13063b9235b\"},{\"crid\":\"7440-44-0\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_3230df3d-2767-452d-ba73-e34a67ad285c\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_f4f60a69-bb7b-4a04-a39a-f644dc7debc2\"},{\"crid\":\"7440-37-1\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_a359ce1b-a518-409f-a1f7-0df40f322a7d\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_98a3d744-8c53-4009-9e28-66e13ff502bf\"},{\"crid\":\"91-20-3\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_4fa4fdea-ed3d-4b0a-aee5-1f4e97dd2340\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_061bcb86-0a3a-4767-82dc-ac61b0429046\"},{\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_03edeef3-48c9-4e93-ac19-f4fa12a93b55\"},{\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_26994290-25ff-49dc-8070-0452e2e1bca0\"},{\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_2c8df7cd-a356-4303-8372-d498c7ea55d6\"},{\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_391bfe2f-0d33-4363-a63c-b31dc4cb2960\"},{\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_85949b34-1d08-4287-b2d2-5748933797ce\"},{\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_92a6b64b-f15b-44fb-927d-c9d5cdea3004\"},{\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b0f68534-8390-495d-9fcc-6e68775f6e64\"},{\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_d9cdf296-e241-4fa3-bc49-4e6bd9eb0925\"},{\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_ebb6698e-3b15-467e-bda8-7694f077f356\"},{\"crid\":\"124-38-9\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_65df9dc0-536f-4921-9c65-ced141fcf557\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_testID-111-111-111\"},{\"crid\":\"2122-48-7\",\"species\":\"http://www.theworldavatar.com/kb/ontospecies/Species_5a9700cc-3c8b-4e27-a7cc-298ca12fae40\",\"compchemspecies\":\"http://www.theworldavatar.com/kb/ontocompchem/G09_b8114c73-a226-4f1b-a727-8c1acda6e30f\"}]\r\n"; - query.result = "25"; - return format(query); - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/ServiceDescriptionIndexerTest.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/ServiceDescriptionIndexerTest.java deleted file mode 100644 index cbce74793..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/ServiceDescriptionIndexerTest.java +++ /dev/null @@ -1,254 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.jena.ontology.OntModel; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.Ignore; - -import junit.framework.TestCase; -import uk.ac.cam.cares.jps.base.query.JenaHelper; -import uk.ac.cam.cares.jps.base.query.fed.ServiceDescriptionIndexer.PostingsListElement; -import uk.ac.cam.cares.jps.base.query.fed.ServiceDescriptionIndexer.ServiceDescriptionSummary; - -@Ignore("The code this tests is not used and takes a long time to run.") -public class ServiceDescriptionIndexerTest extends TestCase { - - static final Logger LOGGER = LogManager.getLogger(ServiceDescriptionIndexerTest.class); - - private static ServiceDescriptionIndexer smallTestIndexer = null; - - private static String[] filenames = new String[] { - "service_descr_local_ontospecies.rdf", //"service_descr_claudius_ontospecies.rdf", - "service_descr_claudius_ontokin.rdf", - "service_descr_citieskg_singaporeEPSG24500.rdf", - "service_descr_claudius_sgbiodieselplants.rdf", - "service_descr_local_doe_chemrxn.rdf", - "service_descr_local_lab_1.rdf", - "service_descr_local_lab_2.rdf", - "service_descr_local_ontocompchemcloned.rdf", //"service_descr_claudius_ontocompchem.rdf" - "service_descr_wikidata_small.rdf" - }; - - static String getServiceDescrPath(int index) { - return "./src/test/resources/FedQuery/ServiceDescriptions/" + filenames[index]; - } - - public static ServiceDescriptionIndexer getSmallTestIndexer() { - if (smallTestIndexer == null) { - LOGGER.debug("initializing full indexer"); - smallTestIndexer = new ServiceDescriptionIndexer(); - for (int i=0; i map = indexer.getNumberOfClassTriples(model); - assertEquals(14, map.keySet().size()); - long number = map.get("http://www.theworldavatar.com/ontology/ontospecies/OntoSpecies.owl#MolecularWeight"); - assertEquals(5641, number); - } - - public void testGetNumberOfPropertyTriples() { - ServiceDescriptionIndexer indexer = new ServiceDescriptionIndexer(); - String path = getServiceDescrPath(0); - OntModel model = JenaHelper.createModel(path); - Map map = indexer.getNumberOfPropertyTriples(model); - assertEquals(34, map.keySet().size()); - long number = map.get("http://www.theworldavatar.com/ontology/ontospecies/OntoSpecies.owl#casRegistryID"); - assertEquals(9690, number); - } - - public void testAddOneServiceDescription() { - ServiceDescriptionIndexer indexer = new ServiceDescriptionIndexer(); - String path = getServiceDescrPath(0); - indexer.addServiceDescription(path); - - List summaries = indexer.getSummaries(); - assertEquals(1, summaries.size()); - assertEquals(path, summaries.get(0).path); - - Set keys = indexer.getKeys(); - assertEquals(48, keys.size()); - - for (String key : keys) { - Set postingsList = indexer.getPostingsList(key); - assertEquals(1, postingsList.size()); - } - } - - public void testAddTwoServiceDescriptions() { - ServiceDescriptionIndexer indexer = new ServiceDescriptionIndexer(); - // add first description - String path1 = getServiceDescrPath(1); - indexer.addServiceDescription(path1); - - Set keys = indexer.getKeys(); - assertEquals(183, keys.size()); - - // add second description - String path2 = getServiceDescrPath(0); - indexer.addServiceDescription(path2); - - keys = indexer.getKeys(); - // 15 common keys in OntoKin and OntoSpecies datasets - // 216 = 183 + 48 - 15 - assertEquals(216 , keys.size()); - - List summaries = indexer.getSummaries(); - assertEquals(2, summaries.size()); - assertEquals(path1, summaries.get(0).path); - assertEquals(path2, summaries.get(1).path); - - // assert 15 common keys - List commonKeys = new ArrayList(); - for (String key : keys) { - Set postingsList = indexer.getPostingsList(key); - if (postingsList.size() == 2) { - commonKeys.add(key); - } - } - assertEquals(15, commonKeys.size()); - LOGGER.debug("common keys (relations, types) between ontospecies and ontokin= " + commonKeys); - assertTrue(commonKeys.contains("http://www.theworldavatar.com/ontology/ontokin/OntoKin.owl#GasPhase")); - } - - public void testFillSummary() { - ServiceDescriptionIndexer indexer = new ServiceDescriptionIndexer(); - ServiceDescriptionIndexer.ServiceDescriptionSummary summary = indexer.createSummary(); - String path = getServiceDescrPath(0); - OntModel model = JenaHelper.createModel(path); - indexer.fillSummary(summary, path, model); - assertEquals(491495l, (long) summary.ntriples); - assertEquals(134368l, (long) summary.nentities); - assertEquals(34l, (long) summary.nproperties); - assertEquals(14l, (long) summary.nclasses); - assertEquals("http://localhost:8080/blazegraph/namespace/ontospecies/sparql", summary.endpointURL); - } - - public void testConjunctiveQuery_1_FourKeysOntoSpeciesOntoKin() { - ServiceDescriptionIndexer indexer = getSmallTestIndexer(); - - // both service descriptions contain "GasPhase" - String[] keys = new String[] { - "http://www.theworldavatar.com/ontology/ontokin/OntoKin.owl#GasPhase" - }; - List list = indexer.conjunctiveQuery(Arrays.asList(keys)); - assertEquals(2, list.size()); - - // only the first service description contains "hasPhase" - keys = new String[] { - "http://www.theworldavatar.com/ontology/ontospecies/OntoSpecies.owl#hasPhase" - }; - list = indexer.conjunctiveQuery(Arrays.asList(keys)); - assertEquals(1, list.size()); - - // only the first service description contains the following four keys - keys = new String[] { - "http://www.theworldavatar.com/ontology/ontokin/OntoKin.owl#GasPhase", - "http://www.theworldavatar.com/ontology/ontospecies/OntoSpecies.owl#hasPhase", - "http://www.theworldavatar.com/ontology/ontokin/OntoKin.owl#Element", - "http://www.w3.org/2000/01/rdf-schema#label" - }; - list = indexer.conjunctiveQuery(Arrays.asList(keys)); - assertEquals(1, list.size()); - assertEquals(getServiceDescrPath(0), list.get(0).path); - } - - public void testConjunctiveQuery_2_BiodieselCitiesKG() { - ServiceDescriptionIndexer indexer = getSmallTestIndexer(); - - // keys for the first subquery concerning Biodiesel plant in Singapore - String[] keys = new String[] { - "http://www.theworldavatar.com/ontology/ontocape/chemical_process_system/CPS_performance/economic_performance.owl#isCostOfPlantItem", - "http://www.theworldavatar.com/ontology/ontocape/upper_level/system.owl#hasValue", - "http://www.theworldavatar.com/ontology/ontocape/upper_level/system.owl#numericalValue" - }; - List list = indexer.conjunctiveQuery(Arrays.asList(keys)); - assertEquals(1, list.size()); - assertEquals(getServiceDescrPath(3), list.get(0).path); - } - - public void testConjunctiveQuery_3_BiodieselCitiesKG() { - ServiceDescriptionIndexer indexer = getSmallTestIndexer(); - - // keys for the second subquery concerning Biodiesel plant in Singapore - String[] keys = new String[] { - "http://www.theworldavatar.com/ontology/ontocitygml/citieskg/OntoCityGML.owl#attrName", - "http://www.theworldavatar.com/ontology/ontocitygml/citieskg/OntoCityGML.owl#uriVal", - "http://www.theworldavatar.com/ontology/ontocitygml/citieskg/OntoCityGML.owl#cityObjectId", - "http://www.theworldavatar.com/ontology/ontocitygml/citieskg/OntoCityGML.owl#EnvelopeType", - // the following predicates are Bigdata specific and used for its geo:search service - // they don't appear explicitely as part of triples of any dataset - // and their triple counts are thus zero - //"http://www.bigdata.com/rdf/geospatial#predicate", - //"http://www.bigdata.com/rdf/geospatial#searchDatatype", - //"http://www.bigdata.com/rdf/geospatial#customFields", - //"http://www.bigdata.com/rdf/geospatial#customFieldsLowerBounds", - //"http://www.bigdata.com/rdf/geospatial#customFieldsUpperBounds" - }; - List list = indexer.conjunctiveQuery(Arrays.asList(keys)); - assertEquals(1, list.size()); - assertEquals(getServiceDescrPath(2), list.get(0).path); - } - - public void testConjunctiveQuery_4_Automated_Lab() { - ServiceDescriptionIndexer indexer = getSmallTestIndexer(); - - // keys for the first subquery concerning labs - String[] keys = new String[] { - "https://github.com/cambridge-cares/TheWorldAvatar/blob/develop/JPS_Ontology/ontology/ontorxn/OntoRxn.owl#hasYield", - "http://www.ontology-of-units-of-measure.org/resource/om-2/hasValue", - "http://www.ontology-of-units-of-measure.org/resource/om-2/hasNumericalValue", - "http://www.ontology-of-units-of-measure.org/resource/om-2/hasUnit" - }; - List list = indexer.conjunctiveQuery(Arrays.asList(keys)); - assertEquals(2, list.size()); - String firstPath = list.get(0).path; - String secondPath = list.get(1).path; - if (firstPath.contains("lab_1")) { - assertEquals(getServiceDescrPath(5), firstPath); - assertEquals(getServiceDescrPath(6), secondPath); - } else { - assertEquals(getServiceDescrPath(6), firstPath); - assertEquals(getServiceDescrPath(5), secondPath); - } - } - - public void testConjunctiveQuery_5_Automated_Lab() { - ServiceDescriptionIndexer indexer = getSmallTestIndexer(); - - // keys for the second subquery concerning DoE - String[] keys = new String[] { - "https://github.com/cambridge-cares/TheWorldAvatar/blob/develop/JPS_Ontology/ontology/ontodoe/OntoDoE.owl#utilisesHistoricalData", - "https://github.com/cambridge-cares/TheWorldAvatar/blob/develop/JPS_Ontology/ontology/ontodoe/OntoDoE.owl#refersTo" - }; - List list = indexer.conjunctiveQuery(Arrays.asList(keys)); - assertEquals(1, list.size()); - assertEquals(getServiceDescrPath(4), list.get(0).path); - } - - public void testOntoCompChemHasUniqueSpecies () { - ServiceDescriptionIndexer indexer = getSmallTestIndexer(); - - // keys for the second subquery concerning DoE - String[] keys = new String[] { - "http://www.theworldavatar.com/ontology/ontocompchem/ontocompchem.owl#hasUniqueSpecies" - }; - List list = indexer.conjunctiveQuery(Arrays.asList(keys)); - assertEquals(1, list.size()); - assertEquals(getServiceDescrPath(7), list.get(0).path); - - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/SimpleMultiIndexTest.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/SimpleMultiIndexTest.java deleted file mode 100644 index ee61ce11a..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/SimpleMultiIndexTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import static org.junit.jupiter.api.Assertions.assertIterableEquals; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.junit.Ignore; - -import junit.framework.TestCase; - -@Ignore("The code this tests is not used and takes a long time to run.") -public class SimpleMultiIndexTest extends TestCase { - - public void testOneIndexWithThreePostingLists() { - SimpleMultiIndex index = new SimpleMultiIndex(); - index.add("properties", "rdfs:label", 12); - index.add("properties", "rdfs:label", 5); - index.add("properties", "foaf:friend", 50); - index.add("properties", "skos:broader", 500); - index.add("properties", "rdfs:label", 4); - index.add("properties", "foaf:friend", 40); - index.add("properties", "skos:broader", 400); - index.add("properties", "rdfs:label", 9); - - Map> propIndex = index.getIndex("properties"); - assertEquals(3, propIndex.keySet().size()); - Set postingsList = index.getPostingsList("properties", "rdfs:label"); - assertEquals(4, postingsList.size()); - // check that the postings list is sorted by id - List expected = Arrays.asList( new Integer[] {4, 5, 9, 12}); - assertIterableEquals(expected, postingsList); - } -} diff --git a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/TripleStoreProvider.java b/src/test/java/uk/ac/cam/cares/jps/base/query/fed/TripleStoreProvider.java deleted file mode 100644 index e292bc3a4..000000000 --- a/src/test/java/uk/ac/cam/cares/jps/base/query/fed/TripleStoreProvider.java +++ /dev/null @@ -1,491 +0,0 @@ -package uk.ac.cam.cares.jps.base.query.fed; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - -import org.apache.commons.io.FileUtils; -import org.apache.http.client.methods.HttpPut; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.testcontainers.containers.ContainerLaunchException; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.images.builder.ImageFromDockerfile; -import org.testcontainers.utility.DockerImageName; - -import com.github.dockerjava.api.command.InspectContainerResponse; - -import uk.ac.cam.cares.jps.base.config.AgentLocator; -import uk.ac.cam.cares.jps.base.exception.JPSRuntimeException; -import uk.ac.cam.cares.jps.base.http.Http; -import uk.ac.cam.cares.jps.base.query.RemoteStoreClient; -import uk.ac.cam.cares.jps.base.util.FileUtil; - -/** - * This class creates multiple Docker test containers on-the-fly. - * Each container hosts a triple store including SPARQL endpoints and RDF data. - * The created test environment can be used for integration tests for federated queries. - * It allows to test various engines and configurations for executing federated SPARQL queries. - *

- * The class uses the org.testcontainers framework which allows to create containers easily. - * The framework also provides - * - * communication between containers. - * However, it is not straight-forward to resolve a SPARQL endpoint URL - * which may appear in a SPARQL 1.1 SERVICE clause or in a SPARQL service description. - * This may lead to HTTP 4xx errors if a request for a SPARQL endpoint is send - * from one container to another. The class solves this problem by converting localhost - * IP addresses into Docker IP addresses. - * For instance, the endpoint URL for Blazegraph has usually the following form: - *

- * http://localhost:8080/blazegraph/namespace/lab_1/sparql
- * - * where http://localhost:8080/blazegraph is the service URL and lab_1 is the namespace (dataset). The conversion would - * replace localhost:8080 in the endpoint URL e.g. by 172.17.0.3:8080 which can be used internally for requests. - *

- * The test environment can be extended by further containers (triple stores) and datasets by - * extending the method {@link #init}. The test environment is created as singleton and the initialization is - * started as soon as {@link #getInstance()} is called. - */ -public class TripleStoreProvider { - - /** - * A helper class that contains a created container and the SPARQL service URL. - * - */ - private class ContainerInfo { - - GenericContainer container = null; - String serviceUrl = null; - - public ContainerInfo(GenericContainer container, String serviceUrl) { - this.container = container; - this.serviceUrl = serviceUrl; - } - } - - /** - * A helper class that allows to construct the complete endpoint URL, e.g. - *

-	 * http://localhost:54168/rdf4j-server/repositories/rdf4j_empty 
- * - * In this example, http://localhost:54168/rdf4j-server is the service URL - * and /repositories/rdf4j_empty is the path. - */ - private class EndpointInfo { - - String containerId = null; - String path = null; - - public EndpointInfo(String containerId, String path) { - this.containerId = containerId; - this.path = path; - } - } - - static final Logger LOGGER = LogManager.getLogger(TripleStoreProvider.class); - public final static String DIR_TEST_RESOURCES = "./src/test/resources"; - - // container IDs - public final static String ID_BLAZEGRAPH_1 = "blazegraph_1"; - public final static String ID_BLAZEGRAPH_2 = "blazegraph_2"; - public final static String ID_RDF4J_1 = "rdf4j_1"; - - // namespaces (i.e. datasets, repos, etc.) - public final static String NAMESPACE_LAB_1 = "lab_1"; - public final static String NAMESPACE_LAB_2 = "lab_2"; - public final static String NAMESPACE_DOE_CHEMRXN = "doe_chemrxn"; - public final static String NAMESPACE_WIKIDATA_SMALL = "wikidata_small"; - public final static String NAMESPACE_BLAZEGRAPH_EMTPY = "blazegraph_empty"; - public final static String NAMESPACE_ONTOSPECIES = "ontospecies"; - public final static String NAMESPACE_ONTOCOMPCHEM = "ontocompchem"; - public static final String NAMESPACE_RDF4J_EMPTY = "rdf4j_empty"; - - private static TripleStoreProvider instance = null; - /** - * maps a container id to a container info object containing the created test container and the service URL - */ - private Map id2container = new HashMap(); - /** - * maps the namespace to an endpoint info object that allows to identify the triple store (container) and - * to construct the full endpoint URL - */ - private Map namespace2endpoint = new HashMap(); - /** - * host2host is used to convert host addresses; - * conversion may necessary e.g. in a test environment with Docker containers where Blazegraph servers return endpoint URLs - * with wrong host addresses (such as "localhost:8080") - */ - private Map host2host = new HashMap(); - - private TripleStoreProvider() { - } - - public synchronized static TripleStoreProvider getInstance() { - if (instance == null) { - instance = new TripleStoreProvider(); - instance.init(); - } - return instance; - } - - /** - * Creates a container for a given image. If the image is not found in the local repository, - * it is downloaded once. - * - * @param imageName - * @return - */ - private GenericContainer createContainerByImage(String imageName) { - return new GenericContainer<>(DockerImageName.parse(imageName)); - } - - /** - * Builds an image with a Blazegraph server by using the same commands as in the - * corresponding CMCL Docker file and returns a container for this image. - * - * @param imageName if null image will be deleted after test; if not null the image can be reused when restarting the test - * @return - */ - private GenericContainer createBlazegraphContainerByBuilder(String imageName) { - ImageFromDockerfile dockerfile = null; - if (imageName == null) { - dockerfile = new ImageFromDockerfile(); - } else { - // the image is not deleted after test; this speeds up the setup when the test is restarted - dockerfile = new ImageFromDockerfile(imageName, false); - } - - dockerfile = dockerfile - .withDockerfileFromBuilder(builder -> builder - .from("tomcat:9.0-jre11-openjdk-slim-buster") - .add("https://github.com/blazegraph/database/releases/download/BLAZEGRAPH_2_1_6_RC/blazegraph.war", "/usr/local/tomcat/webapps/blazegraph.war") - .workDir("/data") - .build()); - - return new GenericContainer<>(dockerfile); - } - - /** - * Creates a container with a Blazegraph server. - * - * @param port exposed container port - * @return - */ - private GenericContainer createBlazegraphTripleStore(int port) { - String imageName = "ghcr.io/cambridge-cares/blazegraph:1.2.0"; - GenericContainer tripleStore = null; - try { - tripleStore = createContainerByImage(imageName).withExposedPorts(port); - tripleStore.start(); - LOGGER.debug("Docker image was started, name=" + imageName + ", port=" + port); - } catch (ContainerLaunchException exc) { - LOGGER.debug("Docker image was not found, name=" + imageName + ", port=" + port); - tripleStore = createBlazegraphContainerByBuilder(imageName).withExposedPorts(port); - tripleStore.start(); - LOGGER.debug("Docker image was created and started, name=" + imageName + ", port=" + port); - } - return tripleStore; - } - - /** - * Creates a container with an RDF4j server and workbench. - * - * @param port exposed container port - * @return - */ - private GenericContainer createRDF4JServer(int port) { - String imageName = "eclipse/rdf4j-workbench:3.7.7"; - GenericContainer tripleStore = createContainerByImage(imageName).withExposedPorts(port); - tripleStore.start(); - LOGGER.debug("Docker image was started, name=" + imageName + ", port=" + port); - return tripleStore; - } - - private String getLocalhost(GenericContainer container) { - return container.getHost() + ":" + container.getFirstMappedPort(); - } - - /** - * Returns the "IP:port" where IP it the IP address internally used for the container - * in the default Docker network. - * - * @param container - * @param port - * @return - */ - private String getDockerIp(GenericContainer container, int port) { - InspectContainerResponse info = container.getContainerInfo(); - String ipAddress = info.getNetworkSettings().getIpAddress(); - return ipAddress + ":" + port; - } - - /** - * Returns the service URL for a given dataset (namespace) - * - * @param namespace - * @return - */ - private static String getServiceUrlByNamespace(String namespace) { - String id = getInstance().namespace2endpoint.get(namespace).containerId; - return getInstance().id2container.get(id).serviceUrl; - } - - public static String getServiceUrl(String containerId) { - return getInstance().id2container.get(containerId).serviceUrl; - } - - public static String getEndpointUrl(String serviceUrl, String namespace) { - String path = getInstance().namespace2endpoint.get(namespace).path; - return serviceUrl + path; - } - - public static String getEndpointUrl(String namespace) { - String serviceUrl = getServiceUrlByNamespace(namespace); - return getEndpointUrl(serviceUrl, namespace); - } - - /** - * Returns the full endpoint URL for a given namespace where the IP address - * is replaced by the IP address internally used by Docker. - * - * @param namespace - * @return - */ - public static String getDockerEndpointUrl(String namespace) { - String serviceUrl = getServiceUrlByNamespace(namespace); - Map host2host = getInstance().host2host; - for (String host : host2host.keySet()) { - if (serviceUrl.contains(host)) { - String newhost = host2host.get(host); - serviceUrl = serviceUrl.replace(host, newhost); - break; - } - } - return getEndpointUrl(serviceUrl, namespace); - } - - public static Map getHostConversionMap() { - return getInstance().host2host; - } - - /** - * Reads the default properties required for creating a new dataset on Blazegraph. - * - * @return default properties - */ - public static Properties readStandardNamespacePropertiesForBlazegraph() { - try (InputStream input = new FileInputStream("./src/test/resources/FedQuery/RWStore.properties")) { - Properties props = new Properties(); - props.load(input); - return props; - } catch (IOException e) { - throw new JPSRuntimeException(e.getMessage(), e); - } - } - - /** - * Uploads the triples from a collection of files to the specified endpoint. - * - * @param endpointUrl - * @param files - * @return - */ - public static int uploadFiles(String endpointUrl, Collection files) { - RemoteStoreClient storeClient = new RemoteStoreClient(endpointUrl, endpointUrl); - //int count = 0; - //LOGGER.debug("uploading files to endpointURL=" + endpointUrl + ", number of files=" + files.size()); - for (File file : files) { - //count += 1; - //LOGGER.debug("uploading file (" + count + "/" + files.size() + ")=" + file.getName()); - storeClient.uploadFile(file); - } - LOGGER.debug("finished uploading files to endpointUrl=" + endpointUrl, ", number of files=" + files.size()); - return files.size(); - } - - /** - * If a directory is given, all contained files are added to the returned collection. - * - * @param dataDirOrFiles a mixed list of file and directory paths - * @return - */ - public static Collection getFiles(String... dataDirOrFiles) { - Collection files = new ArrayList(); - for (String current : dataDirOrFiles) { - - File file = new File(current); - if (file.isDirectory()) { - files.addAll(FileUtils.listFiles(file, null, true)); - } else { - files.add(file); - } - } - return files; - } - - /** - * Creates the test containers and datasets (endpoints). - */ - private void init() { - LOGGER.debug("initializing triple stores ..."); - String dirTestResources = DIR_TEST_RESOURCES + "/FedQuery/datasets/"; - initBlazegraph1(dirTestResources); - initBlazegraph2(dirTestResources); - initRdf4j1(dirTestResources); - initEndpointsForGeneratedDatasets(); - } - - private void initBlazegraph1(String dirTestResources) { - int port = 8080; - GenericContainer container = createBlazegraphTripleStore(port); - String host = getLocalhost(container); - String serviceUrl = "http://" + host + "/blazegraph"; - //String dockerServiceUrl = getDockerIp(container, port) + "/blazegraph"; - String dockerHost = getDockerIp(container, port); - host2host.put(host, dockerHost); - ContainerInfo info = new ContainerInfo(container, serviceUrl); - id2container.put(ID_BLAZEGRAPH_1, info); - LOGGER.debug("created container for id=" + ID_BLAZEGRAPH_1 + ", serviceUrl=" + serviceUrl + ", dockerHost" + dockerHost); - - Collection files = new ArrayList(); - String path = BlazegraphRepositoryWrapper.getPathForBlazegraph(NAMESPACE_BLAZEGRAPH_EMTPY); - createDatasetBlazegraph(ID_BLAZEGRAPH_1, NAMESPACE_BLAZEGRAPH_EMTPY, path, files); - - files = getFiles(dirTestResources + "lab_1.ttl"); - path = BlazegraphRepositoryWrapper.getPathForBlazegraph(NAMESPACE_LAB_1); - createDatasetBlazegraph(ID_BLAZEGRAPH_1, NAMESPACE_LAB_1, path, files); - - files = getFiles(dirTestResources + "doe.ttl", dirTestResources + "chemrxn.ttl"); - path = BlazegraphRepositoryWrapper.getPathForBlazegraph(NAMESPACE_DOE_CHEMRXN); - createDatasetBlazegraph(ID_BLAZEGRAPH_1, NAMESPACE_DOE_CHEMRXN, path, files); - - files = getFiles(dirTestResources + "wikidata_small.ttl"); - path = BlazegraphRepositoryWrapper.getPathForBlazegraph(NAMESPACE_WIKIDATA_SMALL); - createDatasetBlazegraph(ID_BLAZEGRAPH_1, NAMESPACE_WIKIDATA_SMALL, path, files); - } - - private void initBlazegraph2(String dirTestResources) { - int port = 8080; - GenericContainer container = createBlazegraphTripleStore(port); - String host = getLocalhost(container); - String serviceUrl = "http://" + host + "/blazegraph"; - //String dockerServiceUrl = getDockerIp(container, port) + "/blazegraph"; - String dockerHost = getDockerIp(container, port); - host2host.put(host, dockerHost); - ContainerInfo info = new ContainerInfo(container, serviceUrl); - id2container.put(ID_BLAZEGRAPH_2, info); - LOGGER.debug("created container for id=" + ID_BLAZEGRAPH_2 + ", serviceUrl=" + serviceUrl + ", dockerHost" + dockerHost); - - Collection files = getFiles(dirTestResources + "lab_2.ttl"); - String path = BlazegraphRepositoryWrapper.getPathForBlazegraph(NAMESPACE_LAB_2); - createDatasetBlazegraph(ID_BLAZEGRAPH_2, NAMESPACE_LAB_2, path, files); - } - - private void initRdf4j1(String dirTestResources) { - int port = 8080; - GenericContainer container = createRDF4JServer(port); - String host = getLocalhost(container); - String serviceUrl = "http://" + host + "/rdf4j-server"; - String dockerHost = getDockerIp(container, port); - host2host.put(host, dockerHost); - ContainerInfo info = new ContainerInfo(container, serviceUrl); - id2container.put(ID_RDF4J_1, info); - LOGGER.debug("created container for id=" + ID_RDF4J_1 + ", serviceUrl=" + serviceUrl + ", dockerHost" + dockerHost); - - createEmptyDatasetRdf4j(ID_RDF4J_1, serviceUrl, NAMESPACE_RDF4J_EMPTY); - } - - public void createDatasetBlazegraph(String containerId, String namespace, String endpointPath, Collection files) { - // create namespace - String serviceUrl = getServiceUrl(containerId); - BlazegraphRepositoryWrapper wrapper = new BlazegraphRepositoryWrapper(serviceUrl); - Properties props = readStandardNamespacePropertiesForBlazegraph(); - wrapper.createNamespace(namespace, props); - wrapper.close(); - - EndpointInfo info = new EndpointInfo(containerId, endpointPath); - namespace2endpoint.put(namespace, info); - - // upload data - String url = getEndpointUrl(serviceUrl, namespace); - if (files != null) { - uploadFiles(url, files); - } - LOGGER.debug("created endpoint with url=" + url); - } - - // see https://rdf4j.org/documentation/reference/rest-api/#repository-creation - public void createEmptyDatasetRdf4j(String containerId, String serviceUrl, String namespace) { - String endpointPath = "/repositories/" + namespace; - String endpointUrl = serviceUrl + endpointPath; - String body = "@prefix rdfs: . " - + "@prefix rep: . " - + "@prefix sr: . " - + "@prefix sail: . " - + "@prefix ms: . " - + "" - + "[] a rep:Repository ; " - + " rep:repositoryID \"" + namespace + "\" ; " - + " rdfs:label \"test memory store\" ; " - + " rep:repositoryImpl [\r\n" - + " rep:repositoryType \"openrdf:SailRepository\" ; " - + " sr:sailImpl [ " - + " sail:sailType \"openrdf:MemoryStore\" ; " - + " ms:persist true ; " - + " ms:syncDelay 120 " - + " ] " - + " ]."; - - String accept = "application/x-turtle"; - String contentType = "application/x-turtle"; - HttpPut request = Http.put(endpointUrl, body, contentType, accept); - Http.execute(request); - - EndpointInfo info = new EndpointInfo(containerId, endpointPath); - namespace2endpoint.put(namespace, info); - - LOGGER.debug("created endpoint with url=" + endpointUrl); - } - - /** - * Generates datasets (instead of reading datasets from file), - * creates endpoints and uploads the generated data. - */ - private void initEndpointsForGeneratedDatasets() { - - // the method for uploading data expects a file as input parameter - // for this reason, all generated datasets have to be stored locally - // in future, the file input parameter may be replaced by an input stream - String pwd = "./tmp/generateddatasets"; - try { - pwd = AgentLocator.getPathToJpsWorkingDir() + "/generateddatasets"; - } catch (Exception e){ - LOGGER.warn("JPS working directory was not found"); - } - LOGGER.info("initializing endpoints and generating datasets, tmp directory=" + pwd); - - String[] datasets = DatasetProvider.generateOntoSpeciesOntoCompChem(1000, 2000, 25, 100); - - String namespace = NAMESPACE_ONTOSPECIES; - String path = pwd + "/dataset_" + namespace + ".ttl"; - FileUtil.writeFileLocally(path , datasets[0]); - Collection files = getFiles(path); - path = BlazegraphRepositoryWrapper.getPathForBlazegraph(namespace); - createDatasetBlazegraph(ID_BLAZEGRAPH_1, namespace, path, files); - - - namespace = NAMESPACE_ONTOCOMPCHEM; - path = pwd + "/dataset_" + namespace + ".ttl"; - FileUtil.writeFileLocally(path , datasets[1]); - files = getFiles(path); - path = BlazegraphRepositoryWrapper.getPathForBlazegraph(namespace); - createDatasetBlazegraph(ID_BLAZEGRAPH_2, namespace, path, files); - } -}