def create_bundle_mop_sign_form(user_id, session_key, blank_form_serial, signed_form_id, form_data=None): bundle_id = 'b:%s/form/signing/%d' % (session_key, signed_form_id) b = ProvBundle(namespaces=DEFAULT_NAMESPACES) b.add_namespace('ns', b.valid_identifier(bundle_id + '/').get_uri()) ag = b.agent('mopuser:%d/%s' % (user_id, session_key)) bf = b.entity('form:blank/%s' % blank_form_serial, [('prov:type', 'asset:BlankForm')]) now = datetime.datetime.now() a = b.activity('ns:sign-form/%s' % blank_form_serial, now, now) b.wasAssociatedWith(a, ag) b.used(a, bf) data = {'prov:type': 'asset:SignedForm'} # Add relevant extra data of the form here if form_data is not None: data['mop:data'] = form_data sf = b.entity('form:signed/%s/%d' % (blank_form_serial, signed_form_id), data) b.wasGeneratedBy(sf, a) b.wasAttributedTo(sf, ag) return bundle_id, b
def create_bundle_mop_logout(user_id, session_key): bundle_id = 'b:%s/logout' % session_key b = ProvBundle(namespaces=DEFAULT_NAMESPACES) b.add_namespace('ns', b.valid_identifier(bundle_id + '/').get_uri()) ag = b.agent('mopuser:%d/%s' % (user_id, session_key)) now = datetime.datetime.now() a = b.activity('log:%d/login/%s' % (user_id, session_key), now, now, other_attributes=[('prov:type', 'act:MopAccountLogout')]) b.wasInvalidatedBy(ag, a) # This user+session no longer exists after this return bundle_id, b
def long_literals(): g = ProvBundle() long_uri = "http://Lorem.ipsum/dolor/sit/amet/consectetur/adipiscing/elit/Quisque/vel/sollicitudin/felis/nec/venenatis/massa/Aenean/lectus/arcu/sagittis/sit/amet/nisl/nec/varius/eleifend/sem/In/hac/habitasse/platea/dictumst/Aliquam/eget/fermentum/enim/Curabitur/auctor/elit/non/ipsum/interdum/at/orci/aliquam/" ex = Namespace('ex', long_uri) g.add_namespace(ex) g.entity('ex:e1', {'prov:label': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec pellentesque luctus nulla vel ullamcorper. Donec sit amet ligula sit amet lorem pretium rhoncus vel vel lorem. Sed at consequat metus, eget eleifend massa. Fusce a facilisis turpis. Lorem volutpat.'}) return g
def createTripCreationGraph(self, userName, userEmail, tripId, tripLegIds, startTime, endTime): """Creates and stores the provenacne graph depecting the action of creating the trip""" #startTime = datetime.datetime.strptime(startTime, "%a, %d %b %Y %H:%M:%S %Z") #endTime = datetime.datetime.strptime(endTime, "%a, %d %b %Y %H:%M:%S %Z") #the namespace of the project cf = Namespace('cf', 'http://users.ecs.soton.ac.uk/pp6g11/ontology/carbonFooprints/') # create a provenance _container g = ProvBundle() g.add_namespace("foaf", "http://xmlns.com/foaf/0.1/") #create activity g.activity(cf['tripCreation'], startTime, endTime) #create entities. g.entity(cf['trip-' + tripId]) #create trip leg entities for tripLegId in tripLegIds: tripLegId = str(tripLegId) g.entity(cf['tripLeg-' + tripLegId]) g.wasGeneratedBy('cf:tripLeg-' + tripLegId, 'cf:tripCreation') g.wasDerivedFrom('cf:trip-' + tripId, 'cf:tripLeg-' + tripLegId) #add relations g.wasGeneratedBy('cf:trip-' + tripId, 'cf:tripCreation') #create agent g.agent('cf:' + userName, {'prov:type': 'prov:Person', 'foaf:mbox': '<mailto:' + userEmail + '>'}) g.wasAssociatedWith('cf:tripCreation', 'cf:' + userName) g.wasAttributedTo('cf:trip-' + tripId, 'cf:' + userName) #save the graph pdBundle = save_bundle(g) #visualize the graph path = tempfile.mkdtemp() filepath = os.path.join(path, 'dot-test.png') # Convert it to DOT dot = graph.prov_to_dot(g) dot.set_dpi(120) # Write it to a temporary PNG file #dot.write_png(filepath) # Display it using matplotlib #img = mpimg.imread(filepath) ##imgplot = plt.imshow(img) #plt.show() #os.remove(filepath) return pdBundle
def create_bundle_mop_send_form(user_id, session_key, signed_form_id, blank_form_serial, email_id, unit_serial): bundle_id = 'b:%s/form/sending/%d' % (session_key, email_id) b = ProvBundle(namespaces=DEFAULT_NAMESPACES) b.add_namespace('ns', b.valid_identifier(bundle_id + '/').get_uri()) ag = b.agent('mopuser:%d/%s' % (user_id, session_key)) em = b.entity('email:%d' % email_id, [('prov:type', 'mop:Email'), ('mop:mailto', unit_serial)]) sf = b.entity('form:signed/%s/%d' % (blank_form_serial, signed_form_id), [('prov:type', 'asset:SignedForm')]) # Add relevant extra data of the form here now = datetime.datetime.now() b.wasDerivedFrom(em, sf, time=now) b.wasAttributedTo(em, ag) return bundle_id, b
def test_inferred_retyping_in_flattened_documents(self): g = ProvBundle() g.add_namespace("ex", "http://www.example.com/") g.wasGeneratedBy('ex:Bob', time='2012-05-25T11:15:00') b1 = g.bundle('ex:bundle') b1.agent('ex:Bob') h = ProvBundle() h.add_namespace("ex", "http://www.example.com/") h.agent('ex:Bob') h.wasGeneratedBy('ex:Bob', time='2012-05-25T11:15:00') self.assertEqual(g.get_flattened(), h)
def test_non_unifiable_document(self): g = ProvBundle() g.add_namespace("ex", "http://www.example.com/") g.activity('ex:compose', other_attributes={'prov:role': "ex:dataToCompose1"}) g.used('ex:compose', 'ex:testEntity') with self.assertRaises(ProvExceptionCannotUnifyAttribute): g.activity('ex:testEntity') h = g.bundle('ex:bundle') h.add_namespace("ex", "http://www.example.com/") h.entity('ex:compose', other_attributes={'prov:label': "impossible!!!"}) with self.assertRaises(ProvExceptionCannotUnifyAttribute): g.get_flattened()
def example_graph(): FOAF = Namespace("foaf","http://xmlns.com/foaf/0.1/") EX = Namespace("ex","http://www.example.com/") DCTERMS = Namespace("dcterms","http://purl.org/dc/terms/") # create a provenance _container g = ProvBundle() # Set the default _namespace name g.set_default_namespace(EX.get_uri()) g.add_namespace(DCTERMS) # add entities, first define the _attributes in a dictionary e0_attrs = {PROV["type"]: "File", EX["path"]: "/shared/crime.txt", EX["creator"]: "Alice"} # then create the entity # If you give the id as a string, it will be treated as a localname # under the default _namespace e0 = g.entity(EX["e0"], e0_attrs) # define the _attributes for the next entity lit0 = Literal("2011-11-16T16:06:00", XSD["dateTime"]) attrdict ={PROV["type"]: EX["File"], EX["path"]: "/shared/crime.txt", DCTERMS["creator"]: FOAF['Alice'], EX["content"]: "", DCTERMS["create"]: lit0} # create the entity, note this time we give the id as a PROVQname e1 = g.entity(FOAF['Foo'], attrdict) # add activities # You can give the _attributes during the creation if there are not many a0 = g.activity(EX['a0'], datetime.datetime(2008, 7, 6, 5, 4, 3), None, {PROV["type"]: EX["create-file"]}) g0 = g.wasGeneratedBy(e0, a0, None, "g0", {EX["fct"]: "create"}) attrdict={EX["fct"]: "load", EX["typeexample"] : Literal("MyValue", EX["MyType"])} u0 = g.used(a0, e1, None, "u0", attrdict) # The id for a relation is an optional argument, The system will generate one # if you do not specify it g.wasDerivedFrom(e0, e1, a0, g0, u0) return g
def create_bundle_mop_issue_form(user_id, session_key, signed_form_id, old_blank_form_serial, email_id, new_blank_form_serial, unit_serial): # t = long(time.time()) bundle_id = 'b:%s/form/issue/%s' % (session_key, new_blank_form_serial) b = ProvBundle(namespaces=DEFAULT_NAMESPACES) b.add_namespace('ns', b.valid_identifier(bundle_id + '/').get_uri()) ag = b.agent('dept:%s' % unit_serial) sf = b.entity('form:signed/%s/%d' % (old_blank_form_serial, signed_form_id)) em = b.entity('email:%d' % email_id) now = datetime.datetime.now() a = b.activity('bs:issue-form/%s' % new_blank_form_serial, now, now) b.wasAssociatedWith(a, ag) b.used(a, em) nf = b.entity('form:blank/%s' % new_blank_form_serial) b.wasGeneratedBy(nf, a) b.wasDerivedFrom(nf, sf) return bundle_id, b
def datatypes(): g = ProvBundle() ex = Namespace('ex', 'http://example.org/') g.add_namespace(ex) attributes = {'ex:int': 100, 'ex:float': 100.123456, 'ex:long': 123456789000, 'ex:bool': True, 'ex:str': 'Some string', 'ex:unicode': u'Some unicode string with accents: Huỳnh Trung Đông', 'ex:timedate': datetime.datetime(2012, 12, 12, 14, 7, 48)} multiline = """Line1 Line2 Line3""" attributes['ex:multi-line'] = multiline g.entity('ex:e1', attributes) return g
def create_bundle_mop_issue_document(user_id, session_key, email_id, blank_form_serial, signed_form_id, document_serial, document_instance_id, unit_serial): bundle_id = 'b:%s/document/issue/%s' % (session_key, document_instance_id) b = ProvBundle(namespaces=DEFAULT_NAMESPACES) b.add_namespace('ns', b.valid_identifier(bundle_id + '/').get_uri()) ag = b.agent('dept:%s' % unit_serial) sf = b.entity('form:signed/%s/%d' % (blank_form_serial, signed_form_id)) em = b.entity('email:%d' % email_id) now = datetime.datetime.now() a = b.activity('bs:issue-document/%d' % document_instance_id, now, now) b.wasAssociatedWith(a, ag) b.used(a, em) d = b.entity('document:%s' % document_serial, [('prov:type', 'asset:Document')]) b.used(a, d) di = b.entity('document:%s/%d' % (document_serial, document_instance_id), [('prov:type', 'asset:MopDocumentInstance')]) b.wasGeneratedBy(di, a) b.wasDerivedFrom(di, sf) b.wasDerivedFrom(di, d) return bundle_id, b
def datatypes(): g = ProvBundle() ex = Namespace("ex", "http://example.org/") g.add_namespace(ex) attributes = { "ex:int": 100, "ex:float": 100.123456, "ex:long": 123456789000, "ex:bool": True, "ex:str": "Some string", "ex:unicode": u"Some unicode string with accents: Huỳnh Trung Đông", "ex:timedate": datetime.datetime(2012, 12, 12, 14, 7, 48), } multiline = """Line1 Line2 Line3""" attributes["ex:multi-line"] = multiline g.entity("ex:e1", attributes) return g
def bundles2(): # https://github.com/lucmoreau/ProvToolbox/blob/master/prov-n/src/test/resources/prov/bundles2.provn # =========================================================================== # document g = ProvBundle() # prefix ex <http://example.org/example/> g.add_namespace("ex", "http://www.example.com/") # prefix alice <http://example.org/alice/> # prefix bob <http://example.org/bob/> g.add_namespace("alice", "http://example.org/alice/") g.add_namespace("bob", "http://example.org/bob/") # entity(bob:bundle4, [prov:type='prov:Bundle']) # wasGeneratedBy(bob:bundle4, -, 2012-05-24T10:30:00) # agent(ex:Bob) # wasAttributedTo(bob:bundle4, ex:Bob) g.entity("bob:bundle4", {"prov:type": PROV["Bundle"]}) g.wasGeneratedBy("bob:bundle4", time="2012-05-24T10:30:00") g.agent("ex:Bob") g.wasAttributedTo("bob:bundle4", "ex:Bob") # entity(alice:bundle5, [ prov:type='prov:Bundle' ]) # wasGeneratedBy(alice:bundle5, -, 2012-05-25T11:15:00) # agent(ex:Alice) # wasAttributedTo(alice:bundle5, ex:Alice) g.entity("alice:bundle5", {"prov:type": PROV["Bundle"]}) g.wasGeneratedBy("alice:bundle5", time="2012-05-25T11:15:00") g.agent("ex:Alice") g.wasAttributedTo("alice:bundle5", "ex:Alice") # bundle bob:bundle4 # entity(ex:report1, [ prov:type="report", ex:version=1 ]) # wasGeneratedBy(ex:report1, -, 2012-05-24T10:00:01) # endBundle b4 = g.bundle("bob:bundle4") b4.entity("ex:report1", {"prov:type": "report", "ex:version": 1}) b4.wasGeneratedBy("ex:report1", time="2012-05-24T10:00:01") # bundle alice:bundle5 # entity(ex:report1bis) # mentionOf(ex:report1bis, ex:report1, bob:bundle4) # entity(ex:report2, [ prov:type="report", ex:version=2 ]) # wasGeneratedBy(ex:report2, -, 2012-05-25T11:00:01) # wasDerivedFrom(ex:report2, ex:report1bis) # endBundle b5 = g.bundle("alice:bundle5") b5.entity("ex:report1bis") b5.mentionOf("ex:report1bis", "ex:report1", "bob:bundle4") b5.entity("ex:report2", [("prov:type", "report"), ("ex:version", 2)]) b5.wasGeneratedBy("ex:report2", time="2012-05-25T11:00:01") b5.wasDerivedFrom("ex:report2", "ex:report1bis") # endDocument return g
def bundles2(): # https://github.com/lucmoreau/ProvToolbox/blob/master/prov-n/src/test/resources/prov/bundles2.provn #=========================================================================== # document g = ProvBundle() # prefix ex <http://example.org/example/> g.add_namespace("ex", "http://www.example.com/") # prefix alice <http://example.org/alice/> # prefix bob <http://example.org/bob/> g.add_namespace('alice', 'http://example.org/alice/') g.add_namespace('bob', 'http://example.org/bob/') # entity(bob:bundle4, [prov:type='prov:Bundle']) # wasGeneratedBy(bob:bundle4, -, 2012-05-24T10:30:00) # agent(ex:Bob) # wasAttributedTo(bob:bundle4, ex:Bob) g.entity('bob:bundle4', {'prov:type': PROV['Bundle']}) g.wasGeneratedBy('bob:bundle4', time='2012-05-24T10:30:00') g.agent('ex:Bob') g.wasAttributedTo('bob:bundle4', 'ex:Bob') # entity(alice:bundle5, [ prov:type='prov:Bundle' ]) # wasGeneratedBy(alice:bundle5, -, 2012-05-25T11:15:00) # agent(ex:Alice) # wasAttributedTo(alice:bundle5, ex:Alice) g.entity('alice:bundle5', {'prov:type': PROV['Bundle']}) g.wasGeneratedBy('alice:bundle5', time='2012-05-25T11:15:00') g.agent('ex:Alice') g.wasAttributedTo('alice:bundle5', 'ex:Alice') # bundle bob:bundle4 # entity(ex:report1, [ prov:type="report", ex:version=1 ]) # wasGeneratedBy(ex:report1, -, 2012-05-24T10:00:01) # endBundle b4 = g.bundle('bob:bundle4') b4.entity('ex:report1', {'prov:type': "report", 'ex:version': 1}) b4.wasGeneratedBy('ex:report1', time='2012-05-24T10:00:01') # bundle alice:bundle5 # entity(ex:report1bis) # mentionOf(ex:report1bis, ex:report1, bob:bundle4) # entity(ex:report2, [ prov:type="report", ex:version=2 ]) # wasGeneratedBy(ex:report2, -, 2012-05-25T11:00:01) # wasDerivedFrom(ex:report2, ex:report1bis) # endBundle b5 = g.bundle('alice:bundle5') b5.entity('ex:report1bis') b5.mentionOf('ex:report1bis', 'ex:report1', 'bob:bundle4') b5.entity('ex:report2', [('prov:type', "report"), ('ex:version', 2)]) b5.wasGeneratedBy('ex:report2', time='2012-05-25T11:00:01') b5.wasDerivedFrom('ex:report2', 'ex:report1bis') # endDocument return g
def bundles1(): # https://github.com/lucmoreau/ProvToolbox/blob/master/prov-n/src/test/resources/prov/bundles1.provn # =============================================================================== # document g = ProvBundle() # prefix ex <http://example.org/example/> EX = Namespace("ex", "http://www.example.com/") g.add_namespace(EX) # prefix alice <http://example.org/alice/> # prefix bob <http://example.org/bob/> g.add_namespace("alice", "http://example.org/alice/") g.add_namespace("bob", "http://example.org/bob/") # entity(bob:bundle1, [prov:type='prov:Bundle']) g.entity("bob:bundle1", {"prov:type": PROV["Bundle"]}) # wasGeneratedBy(bob:bundle1, -, 2012-05-24T10:30:00) g.wasGeneratedBy("bob:bundle1", time="2012-05-24T10:30:00") # agent(ex:Bob) g.agent("ex:Bob") # wasAttributedTo(bob:bundle1, ex:Bob) g.wasAttributedTo("bob:bundle1", "ex:Bob") # entity(alice:bundle2, [ prov:type='prov:Bundle' ]) g.entity("alice:bundle2", {"prov:type": PROV["Bundle"]}) # wasGeneratedBy(alice:bundle2, -, 2012-05-25T11:15:00) g.wasGeneratedBy("alice:bundle2", time="2012-05-25T11:15:00") # agent(ex:Alice) g.agent("ex:Alice") # wasAttributedTo(alice:bundle2, ex:Alice) g.wasAttributedTo("alice:bundle2", "ex:Alice") # bundle bob:bundle1 b1 = g.bundle("bob:bundle1") # entity(ex:report1, [ prov:type="report", ex:version=1 ]) b1.entity("ex:report1", {"prov:type": "report", "ex:version": 1}) # wasGeneratedBy(ex:report1, -, 2012-05-24T10:00:01) b1.wasGeneratedBy("ex:report1", time="2012-05-24T10:00:01") # endBundle # bundle alice:bundle2 b2 = g.bundle("alice:bundle2") # entity(ex:report1) b2.entity("ex:report1") # entity(ex:report2, [ prov:type="report", ex:version=2 ]) b2.entity("ex:report2", {"prov:type": "report", "ex:version": 2}) # wasGeneratedBy(ex:report2, -, 2012-05-25T11:00:01) b2.wasGeneratedBy("ex:report2", time="2012-05-25T11:00:01") # wasDerivedFrom(ex:report2, ex:report1) b2.wasDerivedFrom("ex:report2", "ex:report1") # endBundle # endDocument return g
def w3c_publication_1(): # https://github.com/lucmoreau/ProvToolbox/blob/master/asn/src/test/resources/prov/w3c-publication1.prov-asn # =========================================================================== # bundle # # prefix ex <http://example.org/> # # prefix w3 <http://www.w3.org/> # prefix tr <http://www.w3.org/TR/2011/> # prefix process <http://www.w3.org/2005/10/Process-20051014/tr.html#> # prefix email <https://lists.w3.org/Archives/Member/w3c-archive/> # prefix chairs <https://lists.w3.org/Archives/Member/chairs/> # prefix trans <http://www.w3.org/2005/08/01-transitions.html#> # prefix rec54 <http://www.w3.org/2001/02pd/rec54#> # # # entity(tr:WD-prov-dm-20111018, [ prov:type='rec54:WD' ]) # entity(tr:WD-prov-dm-20111215, [ prov:type='rec54:WD' ]) # entity(process:rec-advance, [ prov:type='prov:Plan' ]) # # # entity(chairs:2011OctDec/0004, [ prov:type='trans:transreq' ]) # entity(email:2011Oct/0141, [ prov:type='trans:pubreq' ]) # entity(email:2011Dec/0111, [ prov:type='trans:pubreq' ]) # # # wasDerivedFrom(tr:WD-prov-dm-20111215, tr:WD-prov-dm-20111018) # # # activity(ex:act1,-,-,[prov:type="publish"]) # activity(ex:act2,-,-,[prov:type="publish"]) # # wasGeneratedBy(tr:WD-prov-dm-20111018, ex:act1, -) # wasGeneratedBy(tr:WD-prov-dm-20111215, ex:act2, -) # # used(ex:act1, chairs:2011OctDec/0004, -) # used(ex:act1, email:2011Oct/0141, -) # used(ex:act2, email:2011Dec/0111, -) # # agent(w3:Consortium, [ prov:type='prov:Organization' ]) # # wasAssociatedWith(ex:act1, w3:Consortium, process:rec-advance) # wasAssociatedWith(ex:act2, w3:Consortium, process:rec-advance) # # endBundle # =========================================================================== g = ProvBundle() g.add_namespace("ex", "http://example.org/") g.add_namespace("w3", "http://www.w3.org/") g.add_namespace("tr", "http://www.w3.org/TR/2011/") g.add_namespace("process", "http://www.w3.org/2005/10/Process-20051014/tr.html#") g.add_namespace("email", "https://lists.w3.org/Archives/Member/w3c-archive/") g.add_namespace("chairs", "https://lists.w3.org/Archives/Member/chairs/") g.add_namespace("trans", "http://www.w3.org/2005/08/01-transitions.html#") g.add_namespace("rec54", "http://www.w3.org/2001/02pd/rec54#") g.entity("tr:WD-prov-dm-20111018", {"prov:type": "rec54:WD"}) g.entity("tr:WD-prov-dm-20111215", {"prov:type": "rec54:WD"}) g.entity("process:rec-advance", {"prov:type": "prov:Plan"}) g.entity("chairs:2011OctDec/0004", {"prov:type": "trans:transreq"}) g.entity("email:2011Oct/0141", {"prov:type": "trans:pubreq"}) g.entity("email:2011Dec/0111", {"prov:type": "trans:pubreq"}) g.wasDerivedFrom("tr:WD-prov-dm-20111215", "tr:WD-prov-dm-20111018") g.activity("ex:act1", other_attributes={"prov:type": "publish"}) g.activity("ex:act2", other_attributes={"prov:type": "publish"}) g.wasGeneratedBy("tr:WD-prov-dm-20111018", "ex:act1") g.wasGeneratedBy("tr:WD-prov-dm-20111215", "ex:act2") g.used("ex:act1", "chairs:2011OctDec/0004") g.used("ex:act1", "email:2011Oct/0141") g.used("ex:act2", "email:2011Dec/0111") g.agent("w3:Consortium", other_attributes={"prov:type": "Organization"}) g.wasAssociatedWith("ex:act1", "w3:Consortium", "process:rec-advance") g.wasAssociatedWith("ex:act2", "w3:Consortium", "process:rec-advance") return g
def bundles1(): # https://github.com/lucmoreau/ProvToolbox/blob/master/asn/src/test/resources/prov/bundles1.provn #=============================================================================== # bundle # # prefix ex <http://example.org/example/> # # prefix alice <http://example.org/alice/> # prefix bob <http://example.org/bob/> # # entity(bob:bundle1, [prov:type='prov:Bundle']) # wasGeneratedBy(bob:bundle1, -, 2012-05-24T10:30:00) # agent(ex:Bob) # wasAttributedTo(bob:bundle1, ex:Bob) # # entity(alice:bundle2, [ prov:type='prov:Bundle' ]) # wasGeneratedBy(alice:bundle2, -, 2012-05-25T11:15:00) # agent(ex:Alice) # wasAttributedTo(alice:bundle2, ex:Alice) # # bundle bob:bundle1 # entity(ex:report1, [ prov:type="report", ex:version=1 ]) # wasGeneratedBy(ex:report1, -, 2012-05-24T10:00:01) # endBundle # # bundle alice:bundle2 # entity(ex:report1) # entity(ex:report2, [ prov:type="report", ex:version=2 ]) # wasGeneratedBy(ex:report2, -, 2012-05-25T11:00:01) # wasDerivedFrom(ex:report2, ex:report1) # endBundle # # endBundle #=============================================================================== EX = Namespace("ex","http://www.example.com/") g = ProvBundle() g.add_namespace(EX) g.add_namespace('alice', 'http://example.org/alice/') g.add_namespace('bob', 'http://example.org/bob/') g.entity('bob:bundle1', {'prov:type': PROV['Bundle']}) g.wasGeneratedBy('bob:bundle1', time='2012-05-24T10:30:00') g.agent('ex:Bob') g.wasAttributedTo('bob:bundle1', 'ex:Bob') g.entity('alice:bundle2', {'prov:type': PROV['Bundle']}) g.wasGeneratedBy('alice:bundle2', time='2012-05-25T11:15:00') g.agent('ex:Alice') g.wasAttributedTo('alice:bundle2', 'ex:Alice') b1 = g.bundle('bob:bundle1') b1.entity('ex:report1', {'prov:type': "report", 'ex:version': 1}) b1.wasGeneratedBy('ex:report1', time='2012-05-24T10:00:01') b2 = g.bundle('alice:bundle2') b2.entity('ex:report1') b2.entity('ex:report2', {'prov:type': "report", 'ex:version': 2}) b2.wasGeneratedBy('ex:report2', time='2012-05-25T11:00:01') b2.wasDerivedFrom('ex:report2', 'ex:report1') return g
def w3c_publication_1(): # https://github.com/lucmoreau/ProvToolbox/blob/master/asn/src/test/resources/prov/w3c-publication1.prov-asn #=========================================================================== # bundle # # prefix ex <http://example.org/> # # prefix w3 <http://www.w3.org/> # prefix tr <http://www.w3.org/TR/2011/> # prefix process <http://www.w3.org/2005/10/Process-20051014/tr.html#> # prefix email <https://lists.w3.org/Archives/Member/w3c-archive/> # prefix chairs <https://lists.w3.org/Archives/Member/chairs/> # prefix trans <http://www.w3.org/2005/08/01-transitions.html#> # prefix rec54 <http://www.w3.org/2001/02pd/rec54#> # # # entity(tr:WD-prov-dm-20111018, [ prov:type='rec54:WD' ]) # entity(tr:WD-prov-dm-20111215, [ prov:type='rec54:WD' ]) # entity(process:rec-advance, [ prov:type='prov:Plan' ]) # # # entity(chairs:2011OctDec/0004, [ prov:type='trans:transreq' ]) # entity(email:2011Oct/0141, [ prov:type='trans:pubreq' ]) # entity(email:2011Dec/0111, [ prov:type='trans:pubreq' ]) # # # wasDerivedFrom(tr:WD-prov-dm-20111215, tr:WD-prov-dm-20111018) # # # activity(ex:act1,-,-,[prov:type="publish"]) # activity(ex:act2,-,-,[prov:type="publish"]) # # wasGeneratedBy(tr:WD-prov-dm-20111018, ex:act1, -) # wasGeneratedBy(tr:WD-prov-dm-20111215, ex:act2, -) # # used(ex:act1, chairs:2011OctDec/0004, -) # used(ex:act1, email:2011Oct/0141, -) # used(ex:act2, email:2011Dec/0111, -) # # agent(w3:Consortium, [ prov:type='prov:Organization' ]) # # wasAssociatedWith(ex:act1, w3:Consortium, process:rec-advance) # wasAssociatedWith(ex:act2, w3:Consortium, process:rec-advance) # # endBundle #=========================================================================== g = ProvBundle() g.add_namespace('ex', 'http://example.org/') g.add_namespace('w3', 'http://www.w3.org/') g.add_namespace('tr', 'http://www.w3.org/TR/2011/') g.add_namespace('process', 'http://www.w3.org/2005/10/Process-20051014/tr.html#') g.add_namespace('email', 'https://lists.w3.org/Archives/Member/w3c-archive/') g.add_namespace('chairs', 'https://lists.w3.org/Archives/Member/chairs/') g.add_namespace('trans', 'http://www.w3.org/2005/08/01-transitions.html#') g.add_namespace('rec54', 'http://www.w3.org/2001/02pd/rec54#') g.entity('tr:WD-prov-dm-20111018', {'prov:type': 'rec54:WD'}) g.entity('tr:WD-prov-dm-20111215', {'prov:type': 'rec54:WD'}) g.entity('process:rec-advance', {'prov:type': 'prov:Plan'}) g.entity('chairs:2011OctDec/0004', {'prov:type': 'trans:transreq'}) g.entity('email:2011Oct/0141', {'prov:type': 'trans:pubreq'}) g.entity('email:2011Dec/0111', {'prov:type': 'trans:pubreq'}) g.wasDerivedFrom('tr:WD-prov-dm-20111215', 'tr:WD-prov-dm-20111018') g.activity('ex:act1', other_attributes={'prov:type': "publish"}) g.activity('ex:act2', other_attributes={'prov:type': "publish"}) g.wasGeneratedBy('tr:WD-prov-dm-20111018', 'ex:act1') g.wasGeneratedBy('tr:WD-prov-dm-20111215', 'ex:act2') g.used('ex:act1', 'chairs:2011OctDec/0004') g.used('ex:act1', 'email:2011Oct/0141') g.used('ex:act2', 'email:2011Dec/0111') g.agent('w3:Consortium', other_attributes= {'prov:type': "Organization"}) g.wasAssociatedWith('ex:act1', 'w3:Consortium', 'process:rec-advance') g.wasAssociatedWith('ex:act2', 'w3:Consortium', 'process:rec-advance') return g
def primer_example(): # https://github.com/lucmoreau/ProvToolbox/blob/master/asn/src/test/resources/prov/primer.pn #=========================================================================== # bundle # # prefix ex <http://example/> # # entity(ex:article, [dcterms:title="Crime rises in cities"]) # entity(ex:dataSet1) # entity(ex:dataSet2) # entity(ex:regionList) # entity(ex:composition) # entity(ex:chart1) # entity(ex:chart2) # # # activity(ex:compile) # activity(ex:compose) # activity(ex:illustrate) # # # used(ex:compose, ex:dataSet1, -) # used(ex:compose, ex:regionList, -) # wasGeneratedBy(ex:composition, ex:compose, -) # # used(ex:illustrate, ex:composition, -) # wasGeneratedBy(ex:chart1, ex:illustrate, -) # # # agent(ex:derek, [ prov:type="prov:Person", foaf:givenName = "Derek", # foaf:mbox= "<mailto:[email protected]>"]) # wasAssociatedWith(ex:compose, ex:derek, -) # wasAssociatedWith(ex:illustrate, ex:derek, -) # # agent(ex:chartgen, [ prov:type="prov:Organization", # foaf:name = "Chart Generators Inc"]) # actedOnBehalfOf(ex:derek, ex:chartgen, ex:compose) # # wasAttributedTo(ex:chart1, ex:derek) # # # used(ex:compose, ex:dataSet1, -, [ prov:role = "ex:dataToCompose"]) # used(ex:compose, ex:regionList, -, [ prov:role = "ex:regionsToAggregteBy"]) # # # wasRevisionOf(ex:dataSet2, ex:dataSet1, -) # wasDerivedFrom(ex:chart2, ex:dataSet2) # # endBundle #=========================================================================== ex = Namespace('ex', 'http://example/') g = ProvBundle() g.add_namespace("dcterms","http://purl.org/dc/terms/") g.entity(ex['article'], {'dcterms:title': "Crime rises in cities"}) g.entity(ex['dataSet1']) g.entity(ex['dataSet2']) g.entity(ex['regionList']) g.entity(ex['composition']) g.entity(ex['chart1']) g.entity(ex['chart2']) g.activity(ex['compile']) g.activity(ex['compose']) g.activity(ex['illustrate']) g.used('ex:compose', 'ex:dataSet1', other_attributes={'prov:role' : "ex:dataToCompose"}) g.used('ex:compose', 'ex:regionList', other_attributes={'prov:role' : "ex:regionsToAggregateBy"}) g.wasGeneratedBy('ex:composition', 'ex:compose') g.used('ex:illustrate', 'ex:composition') g.wasGeneratedBy('ex:chart1', 'ex:illustrate') g.agent('ex:derek', {'prov:type': "prov:Person", 'foaf:givenName': "Derek", 'foaf:mbox': "<mailto:[email protected]>"}) g.wasAssociatedWith('ex:compose', 'ex:derek') g.wasAssociatedWith('ex:illustrate', 'ex:derek') g.agent('ex:chartgen', {'prov:type': "prov:Organization", 'foaf:name' : "Chart Generators Inc"}) g.actedOnBehalfOf('ex:derek', 'ex:chartgen', 'ex:compose') g.wasAttributedTo('ex:chart1', 'ex:derek') g.wasRevisionOf('ex:dataSet2', 'ex:dataSet1') g.wasDerivedFrom('ex:chart2', 'ex:dataSet2') return g
def primer_example(): # https://github.com/lucmoreau/ProvToolbox/blob/master/prov-n/src/test/resources/prov/primer.pn # =========================================================================== # document g = ProvBundle() # prefix ex <http://example/> # prefix dcterms <http://purl.org/dc/terms/> # prefix foaf <http://xmlns.com/foaf/0.1/> ex = Namespace("ex", "http://example/") # namespaces do not need to be explicitly added to a document g.add_namespace("dcterms", "http://purl.org/dc/terms/") g.add_namespace("foaf", "http://xmlns.com/foaf/0.1/") # entity(ex:article, [dcterms:title="Crime rises in cities"]) g.entity( ex["article"], {"dcterms:title": "Crime rises in cities"} ) # first time the ex namespace was used, it is added to the document automatically # entity(ex:articleV1) g.entity(ex["articleV1"]) # entity(ex:articleV2) g.entity(ex["articleV2"]) # entity(ex:dataSet1) g.entity(ex["dataSet1"]) # entity(ex:dataSet2) g.entity(ex["dataSet2"]) # entity(ex:regionList) g.entity(ex["regionList"]) # entity(ex:composition) g.entity(ex["composition"]) # entity(ex:chart1) g.entity(ex["chart1"]) # entity(ex:chart2) g.entity(ex["chart2"]) # entity(ex:blogEntry) g.entity(ex["blogEntry"]) # activity(ex:compile) g.activity("ex:compile") # since ex is registered, it can be used like this # activity(ex:compile2) g.activity("ex:compile2") # activity(ex:compose) g.activity("ex:compose") # activity(ex:correct, 2012-03-31T09:21:00, 2012-04-01T15:21:00) g.activity("ex:correct", "2012-03-31T09:21:00", "2012-04-01T15:21:00") # date time can be provided as strings # activity(ex:illustrate) g.activity("ex:illustrate") # used(ex:compose, ex:dataSet1, -, [ prov:role = "ex:dataToCompose"]) g.used("ex:compose", "ex:dataSet1", other_attributes={"prov:role": "ex:dataToCompose"}) # used(ex:compose, ex:regionList, -, [ prov:role = "ex:regionsToAggregateBy"]) g.used("ex:compose", "ex:regionList", other_attributes={"prov:role": "ex:regionsToAggregateBy"}) # wasGeneratedBy(ex:composition, ex:compose, -) g.wasGeneratedBy("ex:composition", "ex:compose") # used(ex:illustrate, ex:composition, -) g.used("ex:illustrate", "ex:composition") # wasGeneratedBy(ex:chart1, ex:illustrate, -) g.wasGeneratedBy("ex:chart1", "ex:illustrate") # wasGeneratedBy(ex:chart1, ex:compile, 2012-03-02T10:30:00) g.wasGeneratedBy("ex:chart1", "ex:compile", "2012-03-02T10:30:00") # wasGeneratedBy(ex:chart2, ex:compile2, 2012-04-01T15:21:00) # # # agent(ex:derek, [ prov:type="prov:Person", foaf:givenName = "Derek", # foaf:mbox= "<mailto:[email protected]>"]) g.agent( "ex:derek", {"prov:type": PROV["Person"], "foaf:givenName": "Derek", "foaf:mbox": "<mailto:[email protected]>"} ) # wasAssociatedWith(ex:compose, ex:derek, -) g.wasAssociatedWith("ex:compose", "ex:derek") # wasAssociatedWith(ex:illustrate, ex:derek, -) g.wasAssociatedWith("ex:illustrate", "ex:derek") # # agent(ex:chartgen, [ prov:type="prov:Organization", # foaf:name = "Chart Generators Inc"]) g.agent("ex:chartgen", {"prov:type": PROV["Organization"], "foaf:name": "Chart Generators Inc"}) # actedOnBehalfOf(ex:derek, ex:chartgen, ex:compose) g.actedOnBehalfOf("ex:derek", "ex:chartgen", "ex:compose") # wasAttributedTo(ex:chart1, ex:derek) g.wasAttributedTo("ex:chart1", "ex:derek") # wasGeneratedBy(ex:dataSet2, ex:correct, -) g.wasGeneratedBy("ex:dataSet2", "ex:correct") # used(ex:correct, ex:dataSet1, -) g.used("ex:correct", "ex:dataSet1") # wasDerivedFrom(ex:dataSet2, ex:dataSet1, [prov:type='prov:Revision']) g.wasDerivedFrom("ex:dataSet2", "ex:dataSet1", other_attributes={"prov:type": PROV["Revision"]}) # wasDerivedFrom(ex:chart2, ex:dataSet2) g.wasDerivedFrom("ex:chart2", "ex:dataSet2") # wasDerivedFrom(ex:blogEntry, ex:article, [prov:type='prov:Quotation']) g.wasDerivedFrom("ex:blogEntry", "ex:article", other_attributes={"prov:type": PROV["Quotation"]}) # specializationOf(ex:articleV1, ex:article) g.specializationOf("ex:articleV1", "ex:article") # wasDerivedFrom(ex:articleV1, ex:dataSet1) g.wasDerivedFrom("ex:articleV1", "ex:dataSet1") # specializationOf(ex:articleV2, ex:article) g.specializationOf("ex:articleV2", "ex:article") # wasDerivedFrom(ex:articleV2, ex:dataSet2) g.wasDerivedFrom("ex:articleV2", "ex:dataSet2") # alternateOf(ex:articleV2, ex:articleV1) g.alternateOf("ex:articleV2", "ex:articleV1") # endDocument return g
import os import sys from socket import gethostname sys.path.append("/Users/jason/Documents/ProvenanceTools/prov") import prov.model as prov from prov.model import ProvBundle, Namespace, Literal, PROV, XSD, Identifier import datetime ex = Namespace('ex', 'http://example/') g = ProvBundle() g.add_namespace("dcterms","http://purl.org/dc/terms/") g.entity(ex['article'], {'dcterms:title': "Crime rises in cities"}) g.entity(ex['dataSet1']) g.entity(ex['dataSet2']) g.entity(ex['regionList']) g.entity(ex['composition']) g.entity(ex['chart1']) g.entity(ex['chart2']) g.activity(ex['compile']) g.activity(ex['compose']) g.activity(ex['illustrate']) g.used('ex:compose', 'ex:dataSet1', other_attributes={'prov:role' : "ex:dataToCompose"}) g.used('ex:compose', 'ex:regionList', other_attributes={'prov:role' : "ex:regionsToAggregateBy"}) g.wasGeneratedBy('ex:composition', 'ex:compose') g.used('ex:illustrate', 'ex:composition')