paths[i] = getPath( columnNames[i] );
paths[i] = getPath( columnNames[i] ).replaceFirst("\\Q\\[@\\E.*\\Q\\]\\E","");
	public String getAncestor( )	{		String[] columnNames = this.getColumnNames( );				// If the table only contains one column. Then the root path of that		// table is the path of		// the column without the tailing attribute path(if exists)		if ( columnNames.length == 1 )			return getPath( columnNames[0] );// .replaceFirst("@.*","");		String[] paths = new String[columnNames.length];		for ( int i = 0; i < paths.length; i++ )		{			paths[i] = getPath( columnNames[i] );		}		String theLongestPath = "";		for ( int i = 0; i < paths.length; i++ )		{			if ( paths[i].split( "\\Q/\\E" ).length > theLongestPath.split( "\\Q/\\E" ).length )				theLongestPath = paths[i];		}		boolean isAbsolutePath = false;		if ( theLongestPath.startsWith( "//" ) )		{			isAbsolutePath = false;			theLongestPath = theLongestPath.replaceFirst( "\\Q//\\E", "" );		}		else		{			isAbsolutePath = true;			theLongestPath = theLongestPath.replaceFirst( "\\Q/\\E", "" );		}		String[] temp = theLongestPath.split( "\\Q/\\E" );		String prefix = isAbsolutePath ? "/" : "//";		for ( int j = 0; j < temp.length; j++ )		{			String attempedPrefix = j == 0 ? prefix + temp[j] : prefix + "/" + temp[j];			for ( int i = 0; i < paths.length; i++ )			{				if ( !paths[i].startsWith( attempedPrefix ) )					return prefix;			}			prefix = attempedPrefix;		}				return prefix;	}