/*
 * This file is part of the syndication library
 *
 * Copyright (C) 2006 Frank Osterfeld <osterfeld@kde.org>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 *
 */

#ifndef SYNDICATION_RDF_DUBLINCOREVOCAB_H
#define SYNDICATION_RDF_DUBLINCOREVOCAB_H

#include <syndication/rdf/property.h>

class QString;

namespace Syndication
{
namespace RDF
{

/**
 * Singleton holding RDF class and property constants of the Dublin Core
 * vocabulary. See http://dublincore.org/documents/dces/ for a
 * specification.
 *
 * @author Frank Osterfeld
 */
class SYNDICATION_EXPORT DublinCoreVocab
{
public:

    /**
     * returns the singleton instance
     */
    static DublinCoreVocab *self();

    /**
     * destructor
     */
    ~DublinCoreVocab();

    /**
     * the namespace of the Dublin Core vocabulary,
     * http://purl.org/dc/elements/1.1/
     */
    const QString &namespaceURI() const;

    /**
     * dc:contributor property. See DublinCore::contributor() for
     * an explanation.
     */
    PropertyPtr contributor() const;

    /**
     * dc:creator property. See DublinCore::creator() for
     * an explanation.
     */
    PropertyPtr creator() const;

    /**
     * dc:coverage property. See DublinCore::coverage() for
     * an explanation.
     */
    PropertyPtr coverage() const;

    /**
     * dc:date property. See DublinCore::date() for
     * an explanation.
     */
    PropertyPtr date() const;

    /**
     * dc:description property. See DublinCore::description() for
     * an explanation.
     */
    PropertyPtr description() const;

    /**
     * dc:format property. See DublinCore::format() for
     * an explanation.
     */
    PropertyPtr format() const;

    /**
     * dc:identifier property. See DublinCore::identifier() for
     * an explanation.
     */
    PropertyPtr identifier() const;

    /**
     * dc:language property. See DublinCore::language() for
     * an explanation.
     */
    PropertyPtr language() const;

    /**
     * dc:publisher property. See DublinCore::publisher() for
     * an explanation.
     */
    PropertyPtr publisher() const;

    /**
     * dc:relation property. See DublinCore::relation() for
     * an explanation.
     */
    PropertyPtr relation() const;

    /**
     * dc:rights property. See DublinCore::rights() for
     * an explanation.
     */
    PropertyPtr rights() const;

    /**
     * dc:source property. See DublinCore::source() for
     * an explanation.
     */
    PropertyPtr source() const;

    /**
     * dc:subject property. See DublinCore::subject() for
     * an explanation.
     */
    PropertyPtr subject() const;

    /**
     * dc:title property. See DublinCore::title() for
     * an explanation.
     */
    PropertyPtr title() const;

    /**
     * dc:type property. See DublinCore::type() for
     * an explanation.
     */
    PropertyPtr type() const;

private:
    DublinCoreVocab();
    Q_DISABLE_COPY(DublinCoreVocab)

    class DublinCoreVocabPrivate;
    DublinCoreVocabPrivate *const d;
};

} // namespace RDF
} // namespace Syndication

#endif // SYNDICATION_RDF_DUBLINCOREVOCAB_H
