private string ReduceUri(Uri uri) { if (namespaceMapper.ReduceToQName(uri.ToString(), out var qname)) { return(qname); } return(":" + uri); }
/** * Attempts to add an extra prefix for a given Resource. * This does nothing if the prefix does not exist or is empty. * @param resource the resource to get the namespace of */ public static void Add(IResource resource) { if (!resource.isUri() || resource.getSource().Graph == null) { return; } INamespaceMapper mapper = resource.getSource().Graph.NamespaceMap; String prefix; if (mapper.ReduceToQName(resource.Uri.ToString(), out prefix)) { prefix = prefix.Split(':')[0]; map.AddNamespace(prefix, mapper.GetNamespaceUri(prefix)); } }
/// <summary> /// Get column name by using qname compression and replacing special chars with underscores /// </summary> /// <param name="node">Node</param> /// <param name="namespaces">Namespaces</param> /// <returns></returns> private string GetColumnName(INode node, INamespaceMapper namespaces) { if (node.NodeType != NodeType.Uri) { return(null); } Uri u = ((IUriNode)node).Uri; String qname; if (!namespaces.ReduceToQName(u.AbsoluteUri, out qname)) { // Issue temporary namespaces String tempNsPrefix = "ns" + this._nextTempID; String nsUri = u.AbsoluteUri; if (nsUri.Contains("#")) { //Create a Hash Namespace Uri nsUri = nsUri.Substring(0, nsUri.LastIndexOf("#") + 1); } else if (nsUri.Contains("/")) { //Create a Slash Namespace Uri nsUri = nsUri.Substring(0, nsUri.LastIndexOf("/") + 1); } Uri tempNsUri; if (!Uri.TryCreate(nsUri, UriKind.Absolute, out tempNsUri)) { tempNsUri = u; } while (namespaces.HasNamespace(tempNsPrefix)) { this._nextTempID++; tempNsPrefix = "ns" + this._nextTempID; } namespaces.AddNamespace(tempNsPrefix, tempNsUri); if (!namespaces.ReduceToQName(u.AbsoluteUri, out qname)) { qname = null; } } if (qname == null) { // Issue temporary column name return("entityPredicateColumn" + (++this._nextTempColumnID)); } // Sanitize qname column name qname = qname.StartsWith("_") ? qname.Substring(1) : qname.Replace(':', '_'); if (SparqlSpecsHelper.IsValidVarName(qname)) { return(qname); } if (qname.Length == 0) { // Issue temporary column name return("entityPredicateColumn " + (++this._nextTempColumnID)); } // Clean up illegal characters // First Character must be from PN_CHARS_U or a digit // Add a leading p for invalid first characters char[] cs = qname.ToCharArray(); char first = cs[0]; if (!Char.IsDigit(first) || !SparqlSpecsHelper.IsPNCharsU(first)) { qname = "p" + qname; if (SparqlSpecsHelper.IsValidVarName(qname)) { return(qname); } cs = qname.ToCharArray(); } for (int i = 1; i < cs.Length; i++) { if (i >= cs.Length - 1) { continue; } // Subsequent Chars must be from PN_CHARS (except -) or a '.' // Replace invalid characters with _ if (cs[i] == '.' || cs[i] == '-') { cs[i] = '_'; } else if (!SparqlSpecsHelper.IsPNChars(cs[i])) { cs[i] = '_'; } } // Trim trailing underscores return(new string(cs).TrimEnd('_')); }