Package: django-4store
Author:Martin GalpinContact:m@66laps.comdjango-4store is a small Django application that makes developing
apps with the4Store RDF databaseeasier.Installationdjango-4store is onPyPiforeasy_installorbuildout:$ easy_install django-4storeAlternatively, clone the repository and place it either in your Django
project or within your$PYTHONPATH:$ git clone git://github.com/66laps/django-4store.gitConfigurationEdit yoursettings.pyand addfourstoreto the end ofINSTALLED_APPS.You must also add two additional settings tosettings.py:FOURSTORE_KBNAME = "demo"  # Name of 4store knowledge base
FOURSTORE_PORT = 6667      # Port for 4store HTTP serverIt is recommended (but not required) that you also set a constant to
the SPARQL endpoint at the same time:SPARQL_ENDPOINT = "http://localhost:6667/sparql/"Code that depends on this endpoint URL will continue to work during
testing (seeTest Cases.)Management CommandsTwo management commands are provided that wrap the standard4s-*commands for convenience.The first,4store-importwill create and import the specified
files into the 4store knowledge base (insettings.py):$ python manage.py 4store-import rdf/card.rdf rdf/myself.n3The flag--recursivecan be specified to recursively add any RDF
files in a directory.Note that importing data will overwrite any existing content in the
knowledge base.The second command,4storewill start the HTTP server on the port
specified insettings.py:$ python manage.py 4store
...Test CasesA subclass ofdjango.test.Testcaseis included. This provides a
mechanism for starting an isolated 4store server and automatically
importing test fixtures.For example, the following test case can be used to test any 4store
dependant code:from django.conf import settings
from HTTP4Store import HTTP4Store

from fourstore.test import Base4StoreTest

class MySemanticTestCase(Base4StoreTest):
    kbfixtures = ["card.rdf", "someone.n3"]

    def test_something(self):
        store = HTTP4Store(settings.SPARQL_ENDPOINT)
        response = store.sparql("SELECT * WHERE { ?s ?p ?o . } ")
        self.assertEquals(..., response)Test fixtures should be placed within thefixturesdirectory of
the app under testing (note the class variable iskbfixtures).The Django setting attributesettings.SPARQL_ENDPOINTis
automatically updated to the current endpoint URL.The server is reinitialised between tests and its operation is dependant
onsetUpandtearDown. If you need to override these methods,
make sure that you still call the parent implementations:class MySemanticTestCase(Base4StoreTest):
    ...
    def setUp(self):
         Base4StoreTest.setUp(self)
         // do something

    def tearDown(self):
        Base4StoreTest.tearDown(self)
        // do somethingViewsCross-site HTTP Requestsare typically blocked by web browsers for
manyhistorically well documented security reasons. These restrictions prevent
web applications from communicating directly with SPARQL endpoints.django-4store provides a solution to this problem. The viewfourstore.views.sparql_proxyrelays all HTTP requests it receives
to a specified endpoint (given inurls.py).For example, to communicate withDbpediaconfigureurls.pyas follows:from django.conf.urls.defaults import url, patterns

urlpatterns = patterns('fourstore.views',
    url(r"^sparql/$", "sparql_proxy", {"sparql_endpoint": "http://www.dbpedia.org/sparql/"}),
)Any requests made tohttp://www.yourdjangoapp.com/sparql/are now
automatically relayed tohttp://www.dbpedia.org/sparql/and the
response transparent sent back to the originating browser.Note that in accordance with theSPARQL Protocolall requests must have aContent-Typeofapplication/x-www-form-urlencoded.Test SuiteA test suite for django-4store is included:$ python manage.py test fourstoreLicenseThis library is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 3 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
Lesser General Public License for more details.You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA