# -*- coding: utf-8 -*-
#
# Copyright IRI (c) 2013
#
# contact@iri.centrepompidou.fr
#
# This software is governed by the CeCILL-B license under French law and
# abiding by the rules of distribution of free software.  You can  use, 
# modify and/ or redistribute the software under the terms of the CeCILL-B
# license as circulated by CEA, CNRS and INRIA at the following URL
# "http://www.cecill.info". 
#
# As a counterpart to the access to the source code and  rights to copy,
# modify and redistribute granted by the license, users are provided only
# with a limited warranty  and the software's author,  the holder of the
# economic rights,  and the successive licensors  have only  limited
# liability. 
#
# In this respect, the user's attention is drawn to the risks associated
# with loading,  using,  modifying and/or developing or reproducing the
# software by the user in light of its specific status of free software,
# that may mean  that it is complicated to manipulate,  and  that  also
# therefore means  that it is reserved for developers  and  experienced
# professionals having in-depth computer knowledge. Users are therefore
# encouraged to load and test the software's suitability as regards their
# requirements in conditions enabling the security of their systems and/or 
# data to be ensured and,  more generally, to use and operate it in the 
# same conditions as regards security. 
#
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL-B license and that you accept its terms.
#

# Django settings for p4l project.
from django.conf import global_settings
import os

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('Your Name', 'your_email@example.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '',                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': '',
        'PASSWORD': '',
        'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}

# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = []

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Chicago'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

ugettext = lambda s: s

LANGUAGES = ( 
    ('fr', ugettext('French')),
    ('en', ugettext('English')),
    ('es', ugettext('Spanish')),
)


SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/var/www/example.com/media/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA_URL = ''

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = ''

# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
    'p4l.templateloaders.Loader'
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'p4l.urls'

AUTH_USER_MODEL = 'p4l.User'
INITIAL_CUSTOM_USER_MIGRATION = "0001_initial"


# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'p4l.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(os.path.dirname(__file__), 'templates'),
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django_extensions',
    'south',
    'rest_framework',
    'haystack',
    'p4l'
)

TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
    'django.core.context_processors.i18n',
    'django.core.context_processors.request',
    'p4l.context_processors.version',
)

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

NB_RECORDS_BY_PAGE = 20

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': '',
        'INDEX_NAME': 'p4l',
    },
}

HAYSTACK_SIGNAL_PROCESSOR = 'p4l.search.signals.P4lSignalProcessor'
HAYSTACK_SEARCH_RESULTS_PER_PAGE = NB_RECORDS_BY_PAGE

REALTIME_INDEXING = True

CACHES = {
    'default' : {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    },
    'indexation': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'p4l-indexation',
        'TIMEOUT': 300,
    }
}




RDF_SCHEMES = { 
    'organizations': 'http://www.iiep.unesco.org/plan4learning/scheme/Organizations',
    'audiences': '',
    'languages': 'http://www.iiep.unesco.org/plan4learning/scheme/Languages',
    'types': 'http://www.iiep.unesco.org/plan4learning/scheme/DocumentType',
    'subjects': 'http://skos.um.es/unescothes/CS000',
    'themes': 'http://www.iiep.unesco.org/plan4learning/scheme/Themes',
    'countries': 'http://skos.um.es/unescothes/CS000/Countries',    
    'projects': 'http://www.iiep.unesco.org/plan4learning/scheme/Projects'
}

REST_FRAMEWORK = {
    # Use hyperlinked styles by default.
    # Only used if the `serializer_class` attribute is not set on a view.
    'DEFAULT_MODEL_SERIALIZER_CLASS':
        'rest_framework.serializers.HyperlinkedModelSerializer',

    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ],
                  
    'PAGINATE_BY': 20,
    'PAGINATE_BY_PARAM': 'page_size' 
}

LANGUAGES_LIST = [
(u"English", "en"),
(u"French", "fr"),
(u"Spanish", "es"),
(u"Portuguese", "pt"),
(u"Arabic", "ar"),
(u"German", "de"),
(u"Japanese", "ja"),
(u"Russian", "ru"),
(u"Multilingual", "mul")
];

# cf http://docs.python.org/2/library/subprocess.html#popen-constructor 
ADMIN_SCRIPT = {}

SCRIPT_WAIT = .250
SCRIPT_MAX_WAIT = 40 # * SCRIPT_WAIT = 10 sec

from config import *  # @UnusedWildImport

if not "SRC_BASE_URL" in locals():
    SRC_BASE_URL = BASE_URL + __name__.split('.')[0] + '/'
if not "LOGIN_URL" in locals():
    LOGIN_URL = SRC_BASE_URL + 'auth/login/'
if not "LOGOUT_URL" in locals():
    LOGOUT_URL = SRC_BASE_URL + 'auth/disconnect/'
if not "LOGIN_REDIRECT_URL" in locals():
    LOGIN_REDIRECT_URL = SRC_BASE_URL
if not "LOGOUT_REDIRECT_URL" in locals():
    LOGOUT_REDIRECT_URL = SRC_BASE_URL + 'auth/login'

if not "SPARQL_QUERY_ENDPOINT" in locals():    
    SPARQL_QUERY_ENDPOINT = "http://localhost:8080/openrdf-sesame/repositories/plan4learning"

if not "SPARQL_REF_QUERIES" in locals():
    SPARQL_REF_QUERIES = {
        'subjects': {
            'url' : SPARQL_QUERY_ENDPOINT,
            'filter' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label "
                "WHERE {{ "
                    "?uri a skos:Concept. "
                    "?uri skos:inScheme <http://skos.um.es/unescothes/CS000> . "
                    "?uri skos:prefLabel ?label. "
                    "FILTER (lang(?label) = {lang}). "
                    "?uri skos:prefLabel ?lab. "
                    "FILTER regex (str(?lab), ?reg, 'i'). "
                    "FILTER (lang (?lab) = {lang}). "
                    "BIND (STRLEN(STRBEFORE (str(?lab), ?reg)) AS ?place). "
                    "BIND (STRLEN(STR(?lab)) AS ?len) "
                "}} "
                "ORDER BY ?place ?len ?lab"
            ),
            "root" : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label ?type "
                "WHERE {{ "
                    "?uri a skos:Collection ; "
                         "skos:inScheme <http://skos.um.es/unescothes/CS000> ; "
                         "skos:prefLabel|rdfs:label ?label ; "
                         "rdf:type ?type . "
                    "FILTER (lang(?label) = {lang}). " 
                    "FILTER NOT EXISTS {{ [skos:member ?uri] }}. "
                "}} "
                "ORDER BY str(?label)"
            ),
            "childs" : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label ?type "
                "WHERE {{ "
                  "?uri skos:inScheme <http://skos.um.es/unescothes/CS000> . "
                  "{{ ?uri a ?type "
                    "FILTER (?type = skos:Collection || ?type = skos:Concept) }}. "
                  "?root skos:narrower|skos:member ?uri. "
                  "?uri skos:prefLabel|rdfs:label ?label. "
                  "FILTER (lang(?label) = {lang}). "
                "}} "
                "ORDER BY str(?label)"
            ),
            "child-count" : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT (COUNT(?uri) as ?nb) "
                "WHERE {{ "
                    "?uri skos:inScheme <http://skos.um.es/unescothes/CS000> . "
                    "?root skos:narrower|skos:member ?uri. "
                "}}"
            )
        },
        'themes': {
            'url' : SPARQL_QUERY_ENDPOINT,
            'filter' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label "
                "WHERE {{ "
                    "?uri a skos:Concept. "
                    "?uri skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/Themes> . "
                    "?uri skos:prefLabel ?label. "
                    "FILTER (lang(?label) = {lang}). "
                    "?uri skos:prefLabel ?lab. "
                    "FILTER regex (str(?lab), ?reg, 'i'). "
                    "FILTER (lang (?lab) = {lang}). "
                    "BIND (STRLEN(STRBEFORE (str(?lab), ?reg)) AS ?place). "
                    "BIND (STRLEN(STR(?lab)) AS ?len) "
                "}} "
                "ORDER BY ?place ?len ?lab"
            ),
            'root' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label ?type "
                "WHERE {{ "
                    "?uri a skos:Collection ; "
                         "skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/Themes> ; "    
                         "skos:prefLabel|rdfs:label ?label ; "
                         "rdf:type ?type . "
                    "FILTER (lang(?label) = {lang}). " 
                    "FILTER NOT EXISTS {{ [skos:member ?uri] }} "
                "}} "
                "ORDER BY str(?label)"
            ),
            'childs' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label ?type "
                "WHERE {{ "
                  "?uri skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/Themes> . "
                  "{{ ?uri a ?type "
                    "FILTER (?type = skos:Collection || ?type = skos:Concept) }}. "
                  "?root skos:narrower|skos:member ?uri. "
                  "?uri skos:prefLabel|rdfs:label ?label. "
                  "FILTER (lang(?label) = {lang}). "
                "}} "
                "ORDER BY str(?label)"
            ),
            'child-count' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT (COUNT(?uri) as ?nb) "
                "WHERE {{ "
                    "?uri skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/Themes> . "
                    "?root skos:narrower|skos:member ?uri. "
                "}} "
            )
        },
        'countries': {
            'url' : SPARQL_QUERY_ENDPOINT,
            'filter' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label "
                "WHERE {{ "
                    "?uri a skos:Concept. "
                    "?uri skos:inScheme <http://skos.um.es/unescothes/CS000/Countries> . "
                    "?uri skos:prefLabel ?label. "
                    "FILTER (lang(?label) = {lang}). "
                    "?uri skos:prefLabel ?lab. "
                    "FILTER regex (str(?lab), ?reg, 'i'). "
                    "FILTER (lang (?lab) = {lang}). "
                    "BIND (STRLEN(STRBEFORE (str(?lab), ?reg)) AS ?place). "
                    "BIND (STRLEN(STR(?lab)) AS ?len) "
                "}} "
                "ORDER BY ?place ?len ?lab"
            ),
            'root' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label "
                "WHERE {{ "
                    "?uri a skos:Concept ; "
                         "skos:inScheme <http://skos.um.es/unescothes/CS000/Countries> ; "    
                         "skos:prefLabel ?label . "
                    "FILTER (lang(?label) = {lang}). " 
                    "FILTER NOT EXISTS {{ [skos:narrower ?uri] }} "
                "}} "
                "ORDER BY str(?label)"
            ),
            'childs' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label "
                "WHERE {{ "
                  "?uri skos:inScheme <http://skos.um.es/unescothes/CS000/Countries> . "
                  "{{ ?uri a ?type "
                    "FILTER (?type = skos:Collection || ?type = skos:Concept) }}. "
                  "?root skos:narrower|skos:member ?uri. "
                  "?uri skos:prefLabel|rdfs:label ?label. "
                  "FILTER (lang(?label) = {lang}). "
                "}} "
                "ORDER BY str(?label)"
            ),
            'child-count' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT (COUNT(?uri) as ?nb) "
                "WHERE {{ "
                    "?uri skos:inScheme <http://skos.um.es/unescothes/CS000/Countries> . "
                    "?root skos:narrower|skos:member ?uri. "
                "}}"
            )
        },
        'languages': {
            'url' : SPARQL_QUERY_ENDPOINT,
            'filter' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label "
                "WHERE {{ "
                    "?uri a skos:Concept. "
                    "?uri skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/Languages> . "
                    "?uri skos:prefLabel ?label. "
                    "FILTER (lang(?label) = {lang}). "
                    "?uri skos:prefLabel ?lab. "
                    "FILTER regex (str(?lab), ?reg, 'i'). "
                    "FILTER (lang (?lab) = {lang}). "
                    "BIND (STRLEN(STRBEFORE (str(?lab), ?reg)) AS ?place). "
                    "BIND (STRLEN(STR(?lab)) AS ?len) "
                "}} "
                "ORDER BY ?place ?len ?lab"
            ),
            'root' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label "
                "WHERE {{ "
                    "?uri a skos:Concept ; "
                         "skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/Languages> ;     "
                         "skos:prefLabel ?label . "
                    "FILTER (lang(?label) = {lang}).  "
                    "FILTER NOT EXISTS {{ [skos:narrower ?uri] }} "
                "}} "
                "ORDER BY str(?label)"
            )
        },
        'projects': {
            'url' : SPARQL_QUERY_ENDPOINT,
            'filter' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label ?acro "
                "WHERE {{ "
                    "?uri a skos:Concept. "
                    "?uri skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/Projects> . "
                    "?uri skos:prefLabel ?label. "
                    "?uri skos:prefLabel|skos:altLabel ?lab. "
                    "OPTIONAL {{ ?uri skos:altLabel ?acro }}. "
                    "FILTER regex (str(?lab), ?reg, 'i'). "
                    "BIND (STRLEN(STRBEFORE (str(?lab), ?reg)) AS ?place). "
                    "BIND (STRLEN(STR(?lab)) AS ?len) "
                "}} "
                "ORDER BY ?place ?len ?lab"
            ),
            'root' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label ?acro "
                "WHERE {{ "
                    "?uri a skos:Concept ; "
                    "skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/Projects> ;     "
                    "skos:prefLabel ?label . "
                    "OPTIONAL {{ ?uri skos:altLabel ?acro }} "
                "}} "
                "ORDER BY str(?label)"
            )
        },
        'organizations': {
            'url' : SPARQL_QUERY_ENDPOINT,
            'filter' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label ?acro "
                "WHERE {{ "
                    "?uri a skos:Concept. "
                    "?uri skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/Organizations> . "
                    "?uri skos:prefLabel ?label. "
                    "?uri skos:prefLabel|skos:altLabel ?lab. "
                    "OPTIONAL {{ ?uri skos:altLabel ?acro }}. "
                    "FILTER regex (str(?lab), ?reg, 'i'). "
                    "BIND (STRLEN(STRBEFORE (str(?lab), ?reg)) AS ?place). "
                    "BIND (STRLEN(STR(?lab)) AS ?len) "
                "}} "
                "ORDER BY ?place ?len ?lab"
            ),
            'root' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label ?acro "
                "WHERE {{ "
                    "?uri a skos:Concept ; "
                         "skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/Organizations> ;     "
                         "skos:prefLabel ?label . "
                    "OPTIONAL {{ ?uri skos:altLabel ?acro }} "
                "}} "
                "ORDER BY str(?label)"
            )
        },
        'types': {
            'url' : SPARQL_QUERY_ENDPOINT,
            'filter' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label "
                "WHERE {{ "
                    "?uri a skos:Concept. "
                    "?uri skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/DocumentType> . "
                    "?uri skos:prefLabel ?label. "
                    "FILTER (lang(?label) = {lang}). "
                    "?uri skos:prefLabel ?lab. "
                    "FILTER regex (str(?lab), ?reg, 'i'). "
                    "FILTER (lang (?lab) = {lang}). "
                    "BIND (STRLEN(STRBEFORE (str(?lab), ?reg)) AS ?place). "
                    "BIND (STRLEN(STR(?lab)) AS ?len) "
                "}} "
                "ORDER BY ?place ?len ?lab"
            ),
            'root' : (
                "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> "
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
                "SELECT DISTINCT ?uri ?label "
                "WHERE {{ "
                    "?uri a skos:Concept ; "
                         "skos:inScheme <http://www.iiep.unesco.org/plan4learning/scheme/DocumentType> ;     "
                         "skos:prefLabel ?label . "
                    "FILTER (lang(?label) = {lang}).  "
                    "FILTER NOT EXISTS {{ [skos:narrower ?uri] }} "
                "}} "
                "ORDER BY str(?label)"
            )
        },
        'audiences': {
            'url' : SPARQL_QUERY_ENDPOINT,
            "filter" : "",
            "root" : "",
            "childs" : "",
            "child-count" : ""
        }
    }         
