Chris@0: /* This file is part of ClioPatria. Chris@0: Chris@0: Author: Chris@0: HTTP: http://e-culture.multimedian.nl/ Chris@0: GITWEB: http://gollem.science.uva.nl/git/ClioPatria.git Chris@0: GIT: git://gollem.science.uva.nl/home/git/ClioPatria.git Chris@0: GIT: http://gollem.science.uva.nl/home/git/ClioPatria.git Chris@0: Copyright: 2007, E-Culture/MultimediaN Chris@0: Chris@0: ClioPatria is free software: you can redistribute it and/or modify Chris@0: it under the terms of the GNU General Public License as published by Chris@0: the Free Software Foundation, either version 2 of the License, or Chris@0: (at your option) any later version. Chris@0: Chris@0: ClioPatria is distributed in the hope that it will be useful, Chris@0: but WITHOUT ANY WARRANTY; without even the implied warranty of Chris@0: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Chris@0: GNU General Public License for more details. Chris@0: Chris@0: You should have received a copy of the GNU General Public License Chris@0: along with ClioPatria. If not, see . Chris@0: */ Chris@0: Chris@0: :- module(serql_parms, Chris@0: [ serql_setting/3 Chris@0: ]). Chris@0: :- use_module(library(settings)). Chris@0: :- use_module(library(error)). Chris@0: :- use_module(library('semweb/rdf_db')). Chris@0: :- use_module(library('http/html_write')). Chris@0: Chris@0: Chris@0: /******************************* Chris@0: * TYPES * Chris@0: *******************************/ Chris@0: Chris@0: % make the type 'uri' work such that we can write NS:Local in Chris@0: % settings defaults. Chris@0: Chris@0: :- multifile Chris@0: error:has_type/2, Chris@0: settings:eval_default/3, Chris@0: settings:convert_text/3, Chris@0: http_settings:input_item/5. Chris@0: Chris@0: error:has_type(uri, X) :- % URI is an atom. We do not use atom Chris@0: atom(X). % to allow for conversion Chris@0: Chris@0: % Convert NS:Local Chris@0: settings:eval_default(URI, uri, URI) :- Chris@0: atom(URI), !. Chris@0: settings:eval_default(NS:Local, uri, URI) :- Chris@0: rdf_global_id(NS:Local, URI). Chris@0: Chris@0: settings:convert_text(uri, Text, URI) :- !, Chris@0: ( sub_atom(Text, B, _, A, :), Chris@0: sub_atom(Text, 0, B, _, NS), Chris@0: sub_atom(Text, _, A, 0, Local), Chris@0: identifier(NS), Chris@0: identifier(Local) Chris@0: -> rdf_global_id(NS:Local, URI) Chris@0: ; URI = Text Chris@0: ). Chris@0: Chris@0: %% identifier(+Atom) is semidet. Chris@0: % Chris@0: % True if Atom contains only alphanumerical characters or Chris@0: % undercores. Chris@0: % Chris@0: % @tbd Must we support unicode here? Check with Turtle. Chris@0: Chris@0: identifier(Text) :- Chris@0: atom_codes(Text, Codes), Chris@0: identifier_codes(Codes). Chris@0: Chris@0: identifier_codes([]). Chris@0: identifier_codes([H|T]) :- Chris@0: identifier_code(H), Chris@0: identifier_codes(T). Chris@0: Chris@0: identifier_code(C) :- Chris@0: code_type(C, csym). Chris@0: Chris@0: % Render as plain atom Chris@0: http_settings:input_item(uri, Value, Name) --> Chris@0: html(input([name(Name), size(40), value(Value)])). Chris@0: Chris@0: Chris@0: /******************************* Chris@0: * SETTINGS * Chris@0: *******************************/ Chris@0: Chris@0: %% serql_setting(+Name, -Old, +New) Chris@0: % Chris@0: % Change a setting. Not all settings are changeable without Chris@0: % restarting the server. Chris@0: % Chris@0: % @tbd Handle setting broadcasts to update server statistics Chris@0: Chris@0: serql_setting(Name, Old, New) :- Chris@0: setting(Name, Old), Chris@0: set_setting(Name, New). Chris@0: Chris@0: /******************************* Chris@0: * HTTP * Chris@0: *******************************/ Chris@0: Chris@0: :- setting(http:port, nonneg, env('PORT', 2105), Chris@0: 'Port the http server listens to'). Chris@0: :- setting(http:workers, between(1, 20), env('SERQL_WORKERS', 2), Chris@0: 'Number of server threads'). Chris@0: :- setting(http:worker_options, list(any), [ local(50000), Chris@0: global(50000), Chris@0: trail(50000) Chris@0: ], Chris@0: 'Additional options to pass to the HTTP server'). Chris@0: :- setting(http:max_idle_time, nonneg, 3600, Chris@0: 'Session timeout. If 0, session never times out'). Chris@0: :- setting(http:server_url, atom, 'http://localhost:'+setting(http:port), Chris@0: 'Url of the server itself'). Chris@0: Chris@0: Chris@0: /******************************* Chris@0: * OTHER SETTINGS * Chris@0: *******************************/ Chris@0: Chris@0: :- setting(user_data, atom, 'users.db', Chris@0: 'File holding account information'). Chris@0: :- setting(documentation_url, atom, 'http://www.openrdf.org/doc/users/', Chris@0: 'URL for OpenRDF documentation'). Chris@0: :- setting(serql_documentation_url, atom, 'http://www.openrdf.org/doc/sesame/users/ch06.html', Chris@0: 'URL for SeRQL language'). Chris@0: :- setting(default_entailment, atom, rdfs, Chris@0: 'Default entailment rules applied'). Chris@0: :- setting(optimise_query, boolean, true, Chris@0: 'Optimise queries before execution'). Chris@0: :- setting(rdf_db_namespaces, boolean, true, Chris@0: 'Allow registered namespaces in queries'). Chris@0: :- setting(title, atom, 'SWI-Prolog Semantic Web Server', Chris@0: 'Title of the web-page'). Chris@0: :- setting(persistent_store, atom, 'SeRQL-store', Chris@0: 'Directory for persistent copy of in-memory RDF'). Chris@0: :- setting(base_ontologies, list(any), [serql(rdfs)], Chris@0: 'Load these files into a virgin database').