private function createHierarchyPaths( $nodes, $paths = array(), $path = "" )
	{
		foreach ( $nodes as $nodeKey => $node )
		{
			$nodePath = $path . ( empty( $path ) ? "" : "/" ) . $node['label'];

			$parts = parse_url( $node['label'] );
			$taxonomy = $parts['path'] == $this->getTaxonomyXSD()
				? $this
				: $this->getTaxonomyForXSD( $parts['path'] );
			$taxonomy_element = $taxonomy->getElementById( $parts['fragment'] );
			// $key = strpos( $node['label'], "#" ) === false ? $node['label'] : $parts[ 'fragment' ];
			$key = $taxonomy_element['id'];

			if ( isset( $paths[ $key ] ) )
			{
				// Check to make sure there is no recursion.  This is indicative
				// of a circular reference but these will be formally detected
				// in the validation function.
				if ( strpos( $path, $node['label'] ) !== false )
				{
					continue;
				}
			}
			else
			{
				$paths[ $key ] = array();
			}

			$paths[ $key ][] = $nodePath;

			if ( ! isset( $node['children'] ) || count( $node['children'] ) === 0 ) continue;
			$paths = $this->createHierarchyPaths( $node['children'], $paths, $nodePath );
		}

		if ( empty( $path ) ) ksort( $paths );
		return $paths;
	}