void ParseQuerySet(XmlReader xmlReader)
        {
            string             querySetName = xmlReader.GetAttribute("Name");
            QuerySetDefinition toFind;

            if (querySetDictionary.TryGetValue(querySetName, out toFind))
            {
                throw new SlkSettingsException(xmlReader, Resources.SlkUtilitiesDuplicateQuerySetName, querySetName);
            }

            QueryDefinition unused;

            if (queryDictionary.TryGetValue(querySetName, out unused))
            {
                throw new SlkSettingsException(xmlReader, Resources.SlkUtilitiesQuerySetSameAsQuery, querySetName);
            }
            string defaultQueryName = xmlReader.GetAttribute("DefaultQueryName");

            if (!queryDictionary.TryGetValue(defaultQueryName, out unused))
            {
                throw new SlkSettingsException(xmlReader, Resources.SlkUtilitiesUndefinedQuery, defaultQueryName);
            }
            QuerySetDefinition querySetDefinition = new QuerySetDefinition(querySetName,
                                                                           xmlReader.GetAttribute("Title"), defaultQueryName);

            while (xmlReader.Read())
            {
                if (xmlReader.NodeType == XmlNodeType.EndElement)
                {
                    break;
                }
                else
                if (xmlReader.NodeType != XmlNodeType.Element)
                {
                    continue;
                }
                else
                if (xmlReader.Name == "IncludeQuery")
                {
                    string          queryName = xmlReader.GetAttribute("QueryName");
                    QueryDefinition queryDef;
                    try
                    {
                        queryDef = queryDictionary[queryName];
                    }
                    catch (KeyNotFoundException)
                    {
                        throw new SlkSettingsException(xmlReader, Resources.SlkUtilitiesUndefinedQuery, queryName);
                    }
                    querySetDefinition.AddIncludeQuery(queryDef);
                }
            }
            querySetDefinitions.Add(querySetDefinition);
            querySetDictionary.Add(querySetName, querySetDefinition);
        }
        /// <summary>
        /// Locates a <c>QuerySetDefinition</c> in a list of query sets given its name.  If requested,
        /// the list of queries is searched in addition to the list of query sets; in that case, if a
        /// query name matching the query set name is found, a <c>QuerySetDefinition</c> containing
        /// only that query is returned.
        /// </summary>
        ///
        /// <param name="querySetName">The name of the query set (or query) or query to look for.
        ///     </param>
        ///
        /// <param name="searchQueries">If <c>true</c>, the list of queries is searched (for a query
        ///     named <paramref name="querySetName"/>) in addition to the list of query sets.  If
        ///     <c>false</c>, only the list of query sets is searched.</param>
        ///
        /// <returns>
        /// The requested <c>QuerySetDefinition</c>, or <c>null</c> if none was found.
        /// </returns>
        ///
        public QuerySetDefinition FindQuerySetDefinition(string querySetName, bool searchQueries)
        {
            // Check parameters
            if (querySetName == null)
            {
                throw new ArgumentNullException("querySetName");
            }

            // search query sets
            QuerySetDefinition foundQuerySetDef = null;

            if (querySetDictionary.TryGetValue(querySetName, out foundQuerySetDef) == false)
            {
                QueryDefinition foundQueryDef;
                if (queryDictionary.TryGetValue(querySetName, out foundQueryDef))
                {
                    foundQuerySetDef = new QuerySetDefinition(foundQueryDef.Name, foundQueryDef.Title, foundQueryDef.Name);
                    foundQuerySetDef.AddIncludeQuery(foundQueryDef);
                }
            }

            return(foundQuerySetDef);
        }