module.exports = function ( graph ){ /** variable defs **/ var prefixRepresentationModule = {}; var currentPrefixModel; prefixRepresentationModule.updatePrefixModel = function (){ currentPrefixModel = graph.options().prefixList(); }; prefixRepresentationModule.validURL = function ( url ){ return validURL(url); }; function validURL( str ){ var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; return urlregex.test(str); } function splitURLIntoBaseAndResource( fullURL ){ var splitedURL = { base: "", resource: "" }; if ( fullURL === undefined ) { splitedURL = { base: "ERROR", resource: "NOT FOUND" }; return splitedURL; } var resource, base; // check if there is a last hashTag if ( fullURL.indexOf("#") > -1 ) { resource = fullURL.substring(fullURL.lastIndexOf('#') + 1); base = fullURL.substring(0, fullURL.length - resource.length); // overwrite base if it is ontologyIri; if ( base === graph.options().getGeneralMetaObjectProperty('iri') ) { base = ":"; } splitedURL.base = base; splitedURL.resource = resource; } else { resource = fullURL.substring(fullURL.lastIndexOf('/') + 1); base = fullURL.substring(0, fullURL.length - resource.length); // overwrite base if it is ontologyIri; if ( base === graph.options().getGeneralMetaObjectProperty('iri') ) { base = ":"; } splitedURL.base = base; splitedURL.resource = resource; } return splitedURL; } prefixRepresentationModule.getPrefixRepresentationForFullURI = function ( fullURL ){ prefixRepresentationModule.updatePrefixModel(); var splittedURL = splitURLIntoBaseAndResource(fullURL); // lazy approach , for // loop over prefix model for ( var name in currentPrefixModel ) { if ( currentPrefixModel.hasOwnProperty(name) ) { // THIS IS CASE SENSITIVE! if ( currentPrefixModel[name] === splittedURL.base ) { return name + ":" + splittedURL.resource; } } } if ( splittedURL.base === ":" ) { return ":" + splittedURL.resource; } return fullURL; }; return prefixRepresentationModule; };