from rdflib import Namespace, RDF, RDFS, ConjunctiveGraph from semantics import schema, statements SKOS = Namespace('http://www.w3.org/2008/04/skos/core#') OWL = Namespace('http://www.w3.org/2002/07/owl#') DC = Namespace('http://purl.org/dc/elements/1.1/') DCT = Namespace('http://purl.org/dc/terms/') # ##################################### # begin testing # ##################################### # open report file report = file('report.txt','w') # load Sean's schema sean = ConjunctiveGraph() # load from copy in this directory, because RDFLib chokes on @base so have to remove it sean.parse('core.turtle', format='n3') #sean.parse('core-DL.turtle', format='n3') # disable load from triplr, because get occasional weirdness #url = 'http://triplr.org/rdf/www.cs.man.ac.uk/~seanb/SKOS/schema/20080429/core.turtle' #sean.parse(url) #report.write('Read data from '+url+' OK\n\n') # check statements against generated semantics report.write('== Checking for Triples Missing from Formal Schema ==\n') i = 1 for s in statements() : report.write('\nChecking statement S'+str(i)+'...') ok = 1 for triple in s : if triple not in sean : ok = 0 report.write('\n * triple not found: '+str(triple)) if ok : report.write(' OK') i = i+1 ignore = set() ignore.add(RDF.value) ignore.add(RDFS.isDefinedBy) ignore.add(RDFS.label) ignore.add(RDFS.comment) ignore.add(RDFS.isDefinedBy) ignore.add(DC['creator']) ignore.add(DC['contributor']) ignore.add(DC['date']) ignore.add(DC['title']) ignore.add(DC['description']) ignore.add(DCT['issued']) ignore.add(SKOS['definition']) ignore.add(SKOS['changeNote']) report.write('\n\n== Checking for Extra Triples In Formal Schema, Not Stated in SKOS Reference ==\n\n') for triple in sean.triples((None, None, None)) : if triple not in schema().triples((None, None, None)) : if triple[1] not in ignore : print triple[1] report.write(' * extra triple: '+str(triple)+'\n') report.flush() report.close()