DgraphAndWeaviateTest: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
| Line 46: | Line 46: | ||
scripts/test | scripts/test | ||
</source> | </source> | ||
= Dgraph = | |||
== Dgraph Installation == | == Dgraph Installation == | ||
docker based pull: | docker based pull: | ||
| Line 76: | Line 76: | ||
</source> | </source> | ||
= Apache Jena = | |||
The jena -l and jena -f options will automatically download and unpack the needed Apache jena files. | The jena -l and jena -f options will automatically download and unpack the needed Apache jena files. | ||
== Jena load example dataset == | |||
<source lang='bash'> | <source lang='bash'> | ||
scripts/jena -l sampledata/example.ttl | scripts/jena -l sampledata/example.ttl | ||
</source> | </source> | ||
== Jena fuseki server start == | |||
<source lang='bash'> | <source lang='bash'> | ||
scripts/jena -f example | scripts/jena -f example | ||
</source> | </source> | ||
You should be able to browse the admin GUI at http://localhost:3030 and have the example dataset ready for you | You should be able to browse the admin GUI at http://localhost:3030 and have the example dataset ready for you | ||
== Jena fuseki server start == | |||
<source lang='bash'> | <source lang='bash'> | ||
scripts/jena -k | scripts/jena -k | ||
</source> | </source> | ||
== jena script usage == | |||
<source lang='bash'> | <source lang='bash'> | ||
scripts/jena -h | scripts/jena -h | ||
| Line 103: | Line 103: | ||
= Example unit tests = | = Example unit tests = | ||
== Apache unit test == | |||
see https://github.com/WolfgangFahl/DgraphAndWeaviateTest/blob/master/tests/testJena.py | |||
<source lang='python'> | |||
''' | |||
Created on 2020-08-14 | |||
@author: wf | |||
''' | |||
import unittest | |||
import getpass | |||
from dg.jena import Jena | |||
class TestJena(unittest.TestCase): | |||
''' Test Apache Jena access ''' | |||
def setUp(self): | |||
pass | |||
def tearDown(self): | |||
pass | |||
def getJena(self,mode='query'): | |||
endpoint="http://localhost:3030/example/%s" % mode | |||
jena=Jena(endpoint) | |||
return jena | |||
def testJenaQuery(self): | |||
''' | |||
test Apache Jena Fuseki SPARQL endpoint with example data | |||
''' | |||
jena=self.getJena() | |||
queryString = "SELECT * WHERE { ?s ?p ?o. }" | |||
results=jena.query(queryString) | |||
self.assertTrue(len(results)>20) | |||
pass | |||
def testJenaInsert(self): | |||
jena=self.getJena(mode="update") | |||
insertString = """ | |||
PREFIX cr: <http://cr.bitplan.com/> | |||
INSERT DATA { | |||
cr:version cr:author "Wolfgang Fahl". | |||
} | |||
""" | |||
results=jena.rawQuery(insertString) | |||
print (results) | |||
def testLocalWikdata(self): | |||
''' | |||
check local wikidata | |||
''' | |||
# check we have local wikidata copy: | |||
if getpass.getuser()=="wf": | |||
# use 2018 wikidata copy | |||
endpoint="http://blazegraph.bitplan.com/sparql" | |||
jena=Jena(endpoint) | |||
queryString=""" | |||
SELECT ?item ?coord | |||
WHERE | |||
{ | |||
# instance of whisky distillery | |||
?item wdt:P31 wd:Q10373548. | |||
# get the coordindate | |||
?item wdt:P625 ?coord. | |||
}""" | |||
results=jena.query(queryString) | |||
self.assertEqual(238,len(results)) | |||
if __name__ == "__main__": | |||
#import sys;sys.argv = ['', 'Test.testName'] | |||
unittest.main() | |||
</source> | |||
== Dgraph unit test == | == Dgraph unit test == | ||
<source lang='python'> | <source lang='python'> | ||
Revision as of 06:11, 15 August 2020
OsProject
| OsProject | |
|---|---|
| id | DgraphAndWeaviateTest |
| state | |
| owner | Wolfgang Fahl |
| title | DgraphAndWeaviateTest |
| url | https://github.com/WolfgangFahl/DgraphAndWeaviateTest |
| version | 0.0.1 |
| description | |
| date | 2020/08/05 |
| since | |
| until | |
This is sample project to test Python based access to Dgraph, Weaviate and Apache Jena
Installation and test
Prerequisites
- python > version 3.6 - tested with version 3.6/3.7/3.8
- docker e.g. docker desktop community - tested with e.g. docker desktop 2.3.0.4 Docker version 19.03.12
- java e.g. openjdk - tested with Java 1.8 and Java 11
- Operating system that can run bash scripts e.g. macports, linux - tested on Mac OS 10.13.6 Macports 2.6.2, Ubuntu 18.04 LTS
Installation
https://github.com/WolfgangFahl/DgraphAndWeaviateTest
cd DgraphAndWeaviateTest
scripts/install
Starting servers
see also DgraphAndWeaviateTest
# command to run Dgraph
# pull dgraph
scripts/dgraph -p
# run dgraph
scripts/dgraph
# pull and run weaviate
scripts/weaviate
# install apache jena and load example data
scripts/jena -l sampledata/example.ttl
# run apache jena fuseki server
scripts/jena -f example
Test
scripts/test
Dgraph
Dgraph Installation
docker based pull:
scripts/dgraph -p
Dgraph start
docker based start of
- alpha
- ratel
- zero
scripts/dgraph
Dgraph stop
scripts/dgraph -k
scripts/dgraph usage
scripts/dgraph -h
scripts/dgraph [-b|--bash|-c|--clean|-h|--help|-k|--kill|-p|--pull]
-b | --bash: start a bash terminal shell within the currently running container
-h | --help: show this usage
-k | --kill: stop the docker image
-p | --pull: pull the docker image
-c | --clean: clean start with kill and purge of all data
Apache Jena
The jena -l and jena -f options will automatically download and unpack the needed Apache jena files.
Jena load example dataset
scripts/jena -l sampledata/example.ttl
Jena fuseki server start
scripts/jena -f example
You should be able to browse the admin GUI at http://localhost:3030 and have the example dataset ready for you
Jena fuseki server start
scripts/jena -k
jena script usage
scripts/jena -h
scripts/jena [-f|--fuseki|-h|--help|-k|--kill|-l|--load]
-f | --fuseki [dataset]: download and start fuseki server with the given dataset
-h | --help: show this usage
-k | --kill: kill the running fuseki server
-l | --load [ttl file]: download jena / tdbloader and load given ttl file
Example unit tests
Apache unit test
see https://github.com/WolfgangFahl/DgraphAndWeaviateTest/blob/master/tests/testJena.py
'''
Created on 2020-08-14
@author: wf
'''
import unittest
import getpass
from dg.jena import Jena
class TestJena(unittest.TestCase):
''' Test Apache Jena access '''
def setUp(self):
pass
def tearDown(self):
pass
def getJena(self,mode='query'):
endpoint="http://localhost:3030/example/%s" % mode
jena=Jena(endpoint)
return jena
def testJenaQuery(self):
'''
test Apache Jena Fuseki SPARQL endpoint with example data
'''
jena=self.getJena()
queryString = "SELECT * WHERE { ?s ?p ?o. }"
results=jena.query(queryString)
self.assertTrue(len(results)>20)
pass
def testJenaInsert(self):
jena=self.getJena(mode="update")
insertString = """
PREFIX cr: <http://cr.bitplan.com/>
INSERT DATA {
cr:version cr:author "Wolfgang Fahl".
}
"""
results=jena.rawQuery(insertString)
print (results)
def testLocalWikdata(self):
'''
check local wikidata
'''
# check we have local wikidata copy:
if getpass.getuser()=="wf":
# use 2018 wikidata copy
endpoint="http://blazegraph.bitplan.com/sparql"
jena=Jena(endpoint)
queryString="""
SELECT ?item ?coord
WHERE
{
# instance of whisky distillery
?item wdt:P31 wd:Q10373548.
# get the coordindate
?item wdt:P625 ?coord.
}"""
results=jena.query(queryString)
self.assertEqual(238,len(results))
if __name__ == "__main__":
#import sys;sys.argv = ['', 'Test.testName']
unittest.main()
Dgraph unit test
def testDgraph(self):
'''
test basic Dgraph operation
'''
dgraph=Dgraph(debug=True)
# drop all data and schemas
dgraph.drop_all()
# create a schema for Pokemons
schema='''
name: string @index(exact) .
weight: float .
height: float .
type Pokemon {
name
weight
height
}'''
dgraph.addSchema(schema)
# prepare a list of Pokemons to be added
pokemonList=[{'name':'Pikachu', 'weight': 6, 'height': 0.4 },
{'name':'Arbok', 'weight': 65, 'height': 3.5 },
{'name':'Raichu', 'weight': 30, 'height': 0.8 },
{'name':'Sandan', 'weight': 12, 'height': 0.6 }]
# add the list in a single transaction
dgraph.addData(obj=pokemonList)
# retrieve the data via GraphQL+ query
graphQuery='''{
# list of pokemons
pokemons(func: has(name), orderasc: name) {
name
weight
height
}
}'''
queryResult=dgraph.query(graphQuery)
# check the result
self.assertTrue('pokemons' in queryResult)
pokemons=queryResult['pokemons']
self.assertEqual(len(pokemonList),len(pokemons))
sortindex=[1,0,2,3]
for index,pokemon in enumerate(pokemons):
expected=pokemonList[sortindex[index]]
self.assertEquals(expected,pokemon)
# close the database connection
dgraph.close()
Example test session
see https://travis-ci.org/github/WolfgangFahl/DgraphAndWeaviateTest/jobs/715131236