package org.aksw.jena_sparql_api.utils; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import org.apache.jena.rdf.model.impl.Util; /** * This class does not really belong to the SPARQL api, * but still it is useful for the server component. * * Code originated from a post on stackoverflow (forgot to note the link) * * @author Claus Stadler * */ public class UriUtils { public static final Pattern replaceNamespacePattern = Pattern.compile("(?<=/)[^/]+(?=/[^/]+/*$)"); /** * Taken from Node_URI.getNameSpace() * * @return */ public static String getNameSpace(String s) { return s.substring( 0, Util.splitNamespaceXML( s ) ); } /** * Taken from Node_URI.getLocalName() * * @return */ public static String getLocalName(String s) { return s.substring( Util.splitNamespaceXML( s ) ); } /** * http://example.org/foo/bar * becomes * http://example.org/baz/bar * * * @param base * @param replacement * @return */ public static String replaceNamespace(String base, String replacement) { Matcher m = replaceNamespacePattern.matcher(base); String result = m.replaceAll(replacement); //String result = base.replace("([^/]+)/([^/]+)$", replacement); return result; } public static Multimap<String, String> parseQueryString(String queryString) { try { return parseQueryStringEx(queryString); } catch(Exception e) { throw new RuntimeException(e); } } public static Multimap<String, String> parseQueryStringEx(String queryString) throws UnsupportedEncodingException { Multimap<String, String> result = ArrayListMultimap.create(); if(queryString == null) { return result; } for (String param : queryString.split("&")) { String pair[] = param.split("="); String key = URLDecoder.decode(pair[0], "UTF-8"); String value = ""; if (pair.length > 1) { value = URLDecoder.decode(pair[1], "UTF-8"); } result.put(new String(key), new String(value)); } return result; } }