/** * Populates the namespaces map with default namespaces and namespaces used by the graph. * * @param graph Graph * @throws GraphException */ protected void populateNamespaces(Graph graph) throws GraphException { // default namespaces namespaces = new HashMap<String, String>(); namespaces.put(RDF_PREFIX, RDF.BASE_URI.toString()); namespaces.put(RDFS_PREFIX, RDFS.BASE_URI.toString()); namespaces.put("owl", "http://www.w3.org/2002/07/owl#"); namespaces.put("dc", "http://purl.org/dc/elements/1.1/"); // validate graph before reading if (graph == null) { throw new IllegalArgumentException("Graph argument is null."); } // get all statements ClosableIterator<Triple> tripleIter = graph.find(null, null, null); if (tripleIter != null) { while (tripleIter.hasNext()) { // get the next triple Triple triple = tripleIter.next(); if (triple != null) { // evaluate subject SubjectNode subject = triple.getSubject(); if (subject instanceof URIReference) { addNamespaceURI(((URIReference) subject).getURI()); } // evaluate predicate (must be URIReference) PredicateNode predicate = triple.getPredicate(); addNamespaceURI(((URIReference) predicate).getURI()); // evaluate object ObjectNode object = triple.getObject(); if (object instanceof URIReference) { addNamespaceURI(((URIReference) object).getURI()); } } } // close the Iterator tripleIter.close(); } }
/** * Evaluates a URI and adds it to the namespace map as a namespace. * * @param uri URI */ protected void addNamespaceURI(URI uri) { if (uri == null) { throw new IllegalArgumentException("URI argument is null."); } // extract URI without fragment String uriString = uri.toString(); String newURI = null; if (uriString != null) { // determine what comes last a '#' or '/' int hashindex = uriString.lastIndexOf('#'); int slashindex = uriString.lastIndexOf('/'); // validate (URI must contain a forward slash) if (slashindex == -1) { // namespace may have been evaluated already return; } // is there a '/' after the '#'? if (slashindex > hashindex) { // remove everything after the last '/' int index = uriString.lastIndexOf('/'); newURI = uriString.substring(0, index) + "/"; } else { // '#' comes after last '/' (remove entire fragment) newURI = uriString.replaceAll(uri.getFragment(), ""); } // only add namespace if it is new if ((newURI != null) && (!namespaces.containsValue(newURI))) { // add to namespaces namespaces.put("ns" + namespaces.size(), newURI); } } }