{"id":21660831,"url":"https://github.com/rue-a/provo","last_synced_at":"2025-04-11T22:43:15.170Z","repository":{"id":63467185,"uuid":"561257589","full_name":"rue-a/provo","owner":"rue-a","description":"PROV-O API for Python","archived":false,"fork":false,"pushed_at":"2023-09-19T12:00:39.000Z","size":2489,"stargazers_count":4,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-11T22:43:06.969Z","etag":null,"topics":["fair-data","prov","prov-o","provenance","python","rdf"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"GeoinformationSystems/provo","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rue-a.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-03T09:54:32.000Z","updated_at":"2025-03-03T10:27:46.000Z","dependencies_parsed_at":"2024-11-25T09:49:21.211Z","dependency_job_id":null,"html_url":"https://github.com/rue-a/provo","commit_stats":{"total_commits":98,"total_committers":3,"mean_commits":"32.666666666666664","dds":"0.40816326530612246","last_synced_commit":"14332a819726910fd967a080cde4bcd6247aaf63"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rue-a%2Fprovo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rue-a%2Fprovo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rue-a%2Fprovo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rue-a%2Fprovo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rue-a","download_url":"https://codeload.github.com/rue-a/provo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248492989,"owners_count":21113159,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fair-data","prov","prov-o","provenance","python","rdf"],"created_at":"2024-11-25T09:39:00.063Z","updated_at":"2025-04-11T22:43:15.145Z","avatar_url":"https://github.com/rue-a.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# README\n\nThe package supports the creation of [PROV-O](https://www.w3.org/TR/prov-o/) compliant provenance graphs.\n\n\n\n## Installation\n\nYou can install the package from the Python Package Index (PyPI):\n\n`pip install provo`\n\nOr by downloading this repository:\n\n1. Download and unzip the repository\n2. Open Shell and _cd_ to unzipped repository\n3. Run `pip install -e .` (in the folder that contains ```setup.py```)\n\n## Contents\n\nThe package is a Python API to PROV-O. It implements the [PROV-O starting point classes](https://www.w3.org/TR/prov-o/#starting-points-figure) __Entity__, __Activity__ and __Agent__ as Python classes with methods to establish the _PROV-O starting point properties_ between instances of these classes.\n\n## Features\n\nThe package's objective is to support the programmatical creation of provenance graphs that are compliant with the W3C Recommendation PROV-O: The PROV Ontology. Users of the package shall be enabled to tightly couple the generation of data with the generation of their provenance. As the package implements PROV-O, the created graph is exportable as an RDF document. Finally, the graph can be exported as a mermaid flowchart with some configuration options to adjust the style of the resulting chart.\n\n### Compliance\n\n- The PROV-O classes __Entity__, __Activity__, and __Agent__ are implemented as Python classes.\n- The PROV-O properties _wasGeneratedBy_, _wasDerivedFrom_, _wasAttributedTo_, _startedAtTime_, _used_, _wasInformedBy_, _endedAtTime_, _wasAssociatedWith_, and _actedOnBehalfOf_ are implemented as instance methods of their according classes.\n- Attributes that are passed to these methods are type-checked to enforce compliance with PROV-O.\n- Node Ids are checked for validity.\n- Use of the same ID for different objects throws an error.\n\n### Ease of Use\n\n- IDE support is provided via the implementation as Python classes according methods, and through type hints.\n- The classes `Provence_Ontology_Graph`, `Entity`, `Activity`, and `Agent` can be printed to terminal in a user-friendly, readable way with the default `print()` command.\n- Objects of the classes `Entity`, `Activity`, and `Agent` can be instantiated with auto-generated Ids (although it's not recommended using this for production).\n- Export as [mermaid flowchart](https://mermaid-js.github.io/mermaid/#/flowchart) to review the graph visually.\n\n### Interface to RDF via the [rdflib](https://rdflib.readthedocs.io/en/stable/) package\n\n- The graph's contents can be converted to an `rdflib.Graph` object.\n- The graph can be exported in various RDF serializations.\n\n## Manual\n\nThe package is centered around the class `ProvenanceOntologyGraph`. Entities, Activities, and Agents are added to this graph using the according class methods. Relations between the PROV-O class objects are constructed using their respective class methods.\n\n### Create a Provenance Ontology Graph\n\nThe graph can be initialized with default or user defined attributes. The graph can be printed to the terminal with `print(graph)`.\n\n```python\n# ex1 - create a provenance graph\nfrom provo import ProvOntologyGraph\n\n# __defaults__\n# namespace: str = \"https://provo-example.org/\",\n# namespace_abbreviation: str = \"\", \n# lang: str = \"en\"\nprovenance_graph = ProvOntologyGraph()\n\nprov_ontology_graph = ProvOntologyGraph(\n    namespace='http://example.org#',\n    namespace_abbreviation=\"ex\",\n    lang=\"en\"\n)\n```\n\n`namespace=`\n\n- Default is `\"https://provo-example.org/\"`.\n- Has to be valid url, validation is currently performed with the [validators](https://pypi.org/project/validators/) package.\n- Has to end with `/` or `#`.\n\n`namespace_abbreviation=`\n\n- Default is `\"\"`.\n- Used when converting to other models, such as RDF (-\u003e prefixes)\n- Only characters from the Latin alphabet are allowed.\n- RDF core prefixes (*owl*, *rdf*, *rdfs*, *xsd* and *xml*) are prohibited from use.\n\n\u003e**Note** \n\u003e Although not prohibited, the following prefixes are commonly used and thus recommended being avoided: *brick*, *csvw*, *dc*, *dcat*, *dcmitype*, *cdterms*, *dcam*, *doap*, *foaf*, *geo*, *odrl*, *org*, *prof*, *prov*, *qb*, *sdo*, *sh*, *skos*, *sosa*, *ssn*, *time*, *vann* and *void*.\n\n`lang=`\n\n- Default is `\"en\"`.\n- Used when converting to other models that support a *lang* tag.\n- Has to be compliant with [RFC 5646](https://www.rfc-editor.org/info/rfc5646) (Phillips, A., Ed., and M. Davis, Ed., \"Tags for Identifying Languages\", BCP 47, RFC 5646, September 2009). Compliance is not validated!\n\n### Create Entities, Activities and Agents and define relations between them\n\nThe creation for classes follows the same pattern. The classes only differ in their methods. PROV-O Classes are instantiated by using the add methods of the provenance graph class. Below you find the `add_entity()` method of `ProvenanceOntologyGraph` for reference.\n\n```python\n# definition of add_entity() in ProvOntologyGraph()\ndef add_entity(self, \n    id: str = \"\", \n    label: str = \"\", \n    description: str = \"\", \n    use_namespace: bool = False) -\u003e Entity:\n    \"\"\"creates a new entity, adds it to the graph and returns it then\"\"\"\n    # if use_namespace is set to True, the given id is concatenated with the namespace that was defined at the creation of the ProvenanceOntologyGraph object.\n    # The method _handle_id() checks whether the provided \n    # namespace-id combination is already used for a node in the graph and if it is a valid IRI. \n    # if no id is provided: id gets automatically generated, within the namespace of the ProvenanceOntologyGraph (Setting use_namespace to True and not providing an id, still creates a valid IRI).\n    \n    node_id = self._handle_id(id, use_namespace)\n    # the PROV class (in this case an Entity) is only created if everything with the ID is fine\n    entity = Entity(node_id=node_id, label=label,description=description)\n    self._entities.append(entity)\n    return entity\n```\n\nThe relations are defined by calling the respective methods of the PROV class instances.\n\nExample use of the provenance graph's add-methods and the definition of a *used*-relation between an Activity and an Entity:\n\n```python\n# ex2 - create entities, activities and agents, \n# and define relation between them\nentity = prov_ontology_graph.add_entity(\n    id=\"example_entity\",\n    label=\"Example Entity\",\n    use_namespace=True)\n\nactivity = prov_ontology_graph.add_activity(\n    label=\"Anonymous activity\",\n    description=\"An arbitrary activity.\"\n)\n\nentity.was_generated_by(activity)\n\nprint(entity)\n# id: http://example.org#example_entity\n# label: Example Entity\n# was generated by: ['Anonymous activity']\n# ---\n\nprint(activity)\n# id: http://example.org#94021a6a-40cd-4c02-9571-33480488ff82\n# label: Anonymous activity\n# description: An arbitrary activity.\n# ---\n```\n\n### RDF interface\n\nThe graph can be directly serialized as RDF document or be converted to an `rdflib` Graph, for further manipulation.\n\n```python\n# ex3 - serialize provenance graph as RDF document\nprov_ontology_graph.serialize_as_rdf(\"manual_examples.ttl\")\n```\n\n```\n@prefix : \u003chttp://example.org#\u003e .\n@prefix prov: \u003chttp://www.w3.org/ns/prov#\u003e .\n@prefix rdfs: \u003chttp://www.w3.org/2000/01/rdf-schema#\u003e .\n\n:example_entity a prov:Entity ;\n    rdfs:label \"Example Entity\"@en ;\n    prov:wasGeneratedBy :832b1ada-22f2-45b8-bdca-dfbe89fb68c8 .\n\n:832b1ada-22f2-45b8-bdca-dfbe89fb68c8 a prov:Activity ;\n    rdfs:label \"Anonymous activity\"@en ;\n    rdfs:comment \"An arbitrary activity.\"@en .\n```\n\n```python\n# ex4 - interface with rdflib\n\nfrom rdflib import SKOS, Literal, URIRef\n\nrdflib_graph = prov_ontology_graph.get_rdflib_graph()\n\nrdflib_graph.bind(\"skos\", SKOS)\n\nrdflib_graph.add((\n    URIRef(entity.node_id), \n    SKOS.prefLabel, \n    Literal(entity.label, lang=\"en\")\n))\n\nrdflib_graph.serialize(\"examples/rdflib_interface.ttl\")\n```\n```\n@prefix : \u003chttp://example.org#\u003e .\n@prefix prov: \u003chttp://www.w3.org/ns/prov#\u003e .\n@prefix rdfs: \u003chttp://www.w3.org/2000/01/rdf-schema#\u003e .\n@prefix skos: \u003chttp://www.w3.org/2004/02/skos/core#\u003e .\n\n:example_entity a prov:Entity ;\n    rdfs:label \"Example Entity\"@en ;\n    skos:prefLabel \"Example Entity\"@en ;\n    prov:wasGeneratedBy :832b1ada-22f2-45b8-bdca-dfbe89fb68c8 .\n\n:832b1ada-22f2-45b8-bdca-dfbe89fb68c8 a prov:Activity ;\n    rdfs:label \"Anonymous activity\"@en ;\n    rdfs:comment \"An arbitrary activity.\"@en .\n```\n\n### Export as Mermaid Flowchart\n\nMermaid is a\"[...] diagramming and charting tool that renders Markdown-inspired text definitions [...]\". It can be embedded in markdown documents like so:\n\n````markdown\n```mermaid\nflowchart LR\n    entity_id[Entity] -- was generated by --\u003e activity_id[Activity]\n```\n````\n\nIf the markdown interpreter supports mermaid, this results in:\n\n```mermaid\nflowchart LR\n    entity_id[Entity] -- was generated by --\u003e activity_id[Activity]\n```\n\n\u003e **Note**\n\u003e To convert Mermaid charts into other formats the software [`mermaid-cli`](https://github.com/mermaid-js/mermaid-cli) is recommended.\n\u003e You can also use the [Mermaid Live Editor](https://mermaid.live/) to edit (and convert) the document.\n\nTo export the provenance graph as mermaid chart call the according export method:\n\n```python\n# ex5\n\nprov_ontology_graph.export_as_mermaid_flowchart(file_name=\"examples/manual_examples_flowchart_default.md\")\n```\n\n```mermaid\nflowchart TD\nclassDef entity fill:#fffedf\nclassDef entity color:#000000\nclassDef entity stroke:#a4a4a4\nclassDef entity stroke-width:1px\nclassDef activity fill:#cfceff\nclassDef activity color:#000000\nclassDef activity stroke:#a4a4a4\nclassDef activity stroke-width:1px\nclassDef agent fill:#ffebc3\nclassDef agent color:#000000\nclassDef agent stroke:#a4a4a4\nclassDef agent stroke-width:1px\nhttp://example.org#example_entity([Example Entity]):::entity\nhttp://example.org#example_entity-- was generated by --\u003ehttp://example.org#832b1ada-22f2-45b8-bdca-dfbe89fb68c8\nhttp://example.org#832b1ada-22f2-45b8-bdca-dfbe89fb68c8[[Anonymous activity]]:::activity\n```\n\nThe style of the resulting graph is defined by a dictionary that holds the default style values. To change the styling, a dictionary can be passed to the method by using the `user_options` argument. If this is done, the configurations that are defined in the user options overwrite the according default configurations. A reference and some more details concerning the options dictionary can be found below.\n\n```python\n# ex6\n\noptions = {\n    \"orientation\": \"LR\",\n    \"invert-relations\": True,\n    \"activity\": {\n        \"fill\": \"#89e6dc\",\n        \"shape\": \"{{:}}\"\n    }\n}\n\nprov_ontology_graph.export_as_mermaid_flowchart(\n    file_name=\"examples/manual_examples_flowchart.md\", \n    user_options = options)\n```\n\n```mermaid\nflowchart LR\nclassDef entity fill:#fffedf\nclassDef entity color:#000000\nclassDef entity stroke:#a4a4a4\nclassDef entity stroke-width:1px\nclassDef activity fill:#89e6dc\nclassDef activity color:#000000\nclassDef activity stroke:#a4a4a4\nclassDef activity stroke-width:1px\nclassDef agent fill:#ffebc3\nclassDef agent color:#000000\nclassDef agent stroke:#a4a4a4\nclassDef agent stroke-width:1px\nhttp://example.org#example_entity([Example Entity]):::entity\nhttp://example.org#832b1ada-22f2-45b8-bdca-dfbe89fb68c8-- generated --\u003ehttp://example.org#example_entity\nhttp://example.org#832b1ada-22f2-45b8-bdca-dfbe89fb68c8{{Anonymous activity}}:::activity\n```\n\nTo adjust details and to generate PNGs or SVGs you can copy the mermaid graph content to the [Mermaid Live Editor](https://mermaid.live/).\n\n#### User Options Reference\n\nThe default styling configuration mimics the graph styling from the PROV-O reference page and is defined as follows:\n\n```python\noptions = {\n    \"invert-relations\": False,\n    \"orientation\": \"TD\",            \n    \"included-relations\": [\n        \"was_generated_by\",\n        \"was_attributed_to\",\n        \"used\",\n        \"was_associated_with\",\n        \"acted_on_behalf_of\"\n    ],\n    \"color\": \"#000000\",\n    \"stroke\": \"#a4a4a4\",\n    \"stroke-width\": \"1px\",\n    \"relation-style\": \"-\",\n    \"entity\": {\n        \"fill\": \"#fffedf\",\n        \"shape\": \"([:])\",\n        \"relation-style\": None,\n        \"color\": None,\n        \"stroke\": None,\n        \"stroke-width\": None\n    },\n    \"activity\": {\n        \"fill\": \"#cfceff\",\n        \"shape\": \"[[:]]\",\n        \"relation-style\": None,\n        \"color\": None,\n        \"stroke\": None,\n        \"stroke-width\": None\n    },\n    \"agent\": {\n        \"fill\": \"#ffebc3\",\n        \"shape\": \"[/:\\\\]\",\n        \"relation-style\": \".\",\n        \"color\": None,\n        \"stroke\":  None,\n        \"stroke-width\": None\n    }\n}\n```\n\n__Reference Table__\n\n| keyword            | options                               | explanation                                                                                                                                                                                                                                                          |\n| ------------------ | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| invert-relations   | True \\| False                         | Reverts the arrows and changes the labels accordingly. The reverted labels are not defined by PROV, and thus they are not compliant to the PROV model.                                                                                                               |\n| orientation        | \"TD\" \\| \"LR\"                          | Top-down or left-right orientation of the graph (mermaid syntax).                                                                                                                                                                                                    |\n| included-relations | list of displayed relations           | Defines which relations should be displayed. Per default \"was_derived_from\" and \"was_informed_by\" are excluded. Possible values are: \"was_generated_by\", was_derived_from\", \"was_attributed_to\", \"used\", \"was_informed_by\", \"was_associated_with\", \"acted_on_behalf_of\". |\n| fill               | \"\\\u003c#color-hex-code\\\u003e\", e.g. \"#fffedf\" | Defines the color of the nodes.                                                                                                                                                                                                                                      |\n| shape              | \"\\\u003cshape identifier\\\u003e\", e.g. \"[:]\"    | Uses [mermaid shape syntax](https://mermaid-js.github.io/mermaid/#/flowchart?id=node-shapes). The colon separates the opening symbols from the closing symbols.                                                                                                      |\n| color              | \"\\\u003c#color-hex-code\\\u003e\"                 | Defines the color of the nodes' texts.                                                                                                                                                                                                                               |\n| stroke             | \"\\\u003c#color-hex-code\\\u003e\"                 | Defines the color of the nodes' borders                                                                                                                                                                                                                              |\n| stroke-width       | \"\\\u003cborder width in px\\\u003e\", e.g. \"1px\"  | Defines the width of the nodes' borders.                                                                                                                                                                                                                             |\n| relation-style     | \"-\" (solid) \\| \".\" (dashed)           | Defines the style of the relations. Only two options are available.                                                                                                                                                                                                  |\n| entity             | dict                                  | Specify fill, shape, color, stroke, stroke-with and relation-style for entities. If any value is `None`, it falls back to the op level definitions                                                                                                                   |\n| activity           | dict                                  | see entity                                                                                                                                                                                                                                                           |\n| agent              | dict                                  | see entity                                                                                                                                                                                                                                                           |\n\nIf further styling configuration is required, users have to interact directly with the resulting mermaid-md.\n\n\n## Comprehensive Examples\n\nCode to create the PROV-O [example 1](https://www.w3.org/TR/prov-o/#narrative-example-simple-1)\n\n```python\nfrom datetime import datetime\n\nfrom provo import ProvOntologyGraph\nfrom rdflib import FOAF, RDF, Literal, URIRef\n\n# create example from: https://www.w3.org/TR/prov-o/#narrative-example-simple-1\n\n\n# create graph\nprov_ontology_graph = ProvOntologyGraph(\n    namespace='http://example.org#',\n    namespace_abbreviation=\"\"\n)\n\n# create entities\ncrime_data = prov_ontology_graph.add_entity(\n    id='crimeData', \n    label='Crime Data',\n    use_namespace=True)\nnational_regions_list = prov_ontology_graph.add_entity(\n    id='nationalRegionsList', \n    label='National Regions List',\n    use_namespace=True)\naggregated_by_regions = prov_ontology_graph.add_entity(\n    id='aggregatedByRegions', \n    label='Aggregated by Regions',\n    use_namespace=True)\nbar_chart = prov_ontology_graph.add_entity(\n    id='bar_chart', \n    label='Bar Chart',\n    use_namespace=True)\n\n# create activities\naggregation_activity = prov_ontology_graph.add_activity(\n    id='aggregationActivity', \n    label='Aggregation Activity',\n    use_namespace=True)\nillustration_activity = prov_ontology_graph.add_activity(\n    id='illustrationActivity', \n    label='Illustration Activity',\n    use_namespace=True)\n\n# create agents\ngovernment = prov_ontology_graph.add_agent(\n    id='government', \n    label='Government',\n    use_namespace=True)\ncivil_action_group = prov_ontology_graph.add_agent(\n    id='civil_action_group', \n    label='Civil Action Group',\n    use_namespace=True)\nnational_newspaper_inc = prov_ontology_graph.add_agent(\n    id='national_newspaper_inc', \n    label='National Newspaper Inc.',\n    use_namespace=True)\nderek = prov_ontology_graph.add_agent(\n    id='derek', \n    label='Derek',\n    use_namespace=True)\n\n# build relations\ncrime_data.was_attributed_to(government)\nnational_regions_list.was_attributed_to(civil_action_group)\n\naggregation_activity.used(crime_data)\naggregation_activity.used(national_regions_list)\naggregation_activity.started_at_time(datetime(2011, 7, 14, 1, 1, 1))\naggregation_activity.ended_at_time(datetime(2011, 7, 14, 2, 2, 2))\naggregation_activity.was_associated_with(derek)\n\naggregated_by_regions.was_generated_by(aggregation_activity)\naggregated_by_regions.was_attributed_to(derek)\n\nillustration_activity.was_informed_by(aggregation_activity)\nillustration_activity.used(aggregated_by_regions)\nillustration_activity.was_associated_with(derek)\n\nbar_chart.was_generated_by(illustration_activity)\nbar_chart.was_derived_from(aggregated_by_regions)\nbar_chart.was_attributed_to(derek)\n\nderek.acted_on_behalf_of(national_newspaper_inc)\n\n# print graph to terminal\nprint(prov_ontology_graph)\n\n# use rdflib interface to add FOAF triples\nrdflib_graph = prov_ontology_graph.get_rdflib_graph()\n\nrdflib_graph.bind(\"foaf\", FOAF)\n\nrdflib_graph.add((\n    URIRef(government.node_id),\n    RDF.type,\n    FOAF.Organization\n))\n\nrdflib_graph.add((\n    URIRef(civil_action_group.node_id),\n    RDF.type,\n    FOAF.Organization\n))\n\nrdflib_graph.add((\n    URIRef(national_newspaper_inc.node_id),\n    RDF.type,\n    FOAF.Organization\n))\n\nrdflib_graph.add((\n    URIRef(national_newspaper_inc.node_id),\n    FOAF.name,\n    Literal(national_newspaper_inc.label, lang=\"en\")\n))\n\nrdflib_graph.add((\n    URIRef(derek.node_id),\n    RDF.type,\n    FOAF.Person\n))\n\nrdflib_graph.add((\n    URIRef(derek.node_id),\n    FOAF.givenName,\n    Literal(derek.label, lang=\"en\")\n))\n\nrdflib_graph.add((\n    URIRef(derek.node_id),\n    FOAF.mbox,\n    URIRef(\"mailto:derek@example.org\")\n))\n# serialize graph as rdf document\nrdflib_graph.serialize('examples/provenance_graph_example.ttl')\n\n\n\n# export mermaid-md with default_options\nprov_ontology_graph.export_as_mermaid_flowchart(file_name=\"examples/provenance_mermaid_default.md\")\n\n# with adjusted options\n# prov_ontology_graph.export_as_mermaid_flowchart(\n#     file_name=\"examples/provenance_mermaid.md\",\n#     user_options=options)\n\n```\n\n__Default mermaid graph:__\n```mermaid\nflowchart TD\nclassDef entity fill:#fffedf\nclassDef entity color:#000000\nclassDef entity stroke:#a4a4a4\nclassDef entity stroke-width:1px\nclassDef activity fill:#cfceff\nclassDef activity color:#000000\nclassDef activity stroke:#a4a4a4\nclassDef activity stroke-width:1px\nclassDef agent fill:#ffebc3\nclassDef agent color:#000000\nclassDef agent stroke:#a4a4a4\nclassDef agent stroke-width:1px\nhttp://example.org#crimeData([Crime Data]):::entity\nhttp://example.org#crimeData-. was attributed to .-\u003ehttp://example.org#government\nhttp://example.org#nationalRegionsList([National Regions List]):::entity\nhttp://example.org#nationalRegionsList-. was attributed to .-\u003ehttp://example.org#civil_action_group\nhttp://example.org#aggregatedByRegions([Aggregated by Regions]):::entity\nhttp://example.org#aggregatedByRegions-- was generated by --\u003ehttp://example.org#aggregationActivity\nhttp://example.org#aggregatedByRegions-. was attributed to .-\u003ehttp://example.org#derek\nhttp://example.org#bar_chart([Bar Chart]):::entity\nhttp://example.org#bar_chart-- was generated by --\u003ehttp://example.org#illustrationActivity\nhttp://example.org#bar_chart-. was attributed to .-\u003ehttp://example.org#derek\nhttp://example.org#aggregationActivity[[Aggregation Activity]]:::activity\nhttp://example.org#aggregationActivity-- used --\u003ehttp://example.org#crimeData\nhttp://example.org#aggregationActivity-- used --\u003ehttp://example.org#nationalRegionsList\nhttp://example.org#aggregationActivity-. was associated with .-\u003ehttp://example.org#derek\nhttp://example.org#illustrationActivity[[Illustration Activity]]:::activity\nhttp://example.org#illustrationActivity-- used --\u003ehttp://example.org#aggregatedByRegions\nhttp://example.org#illustrationActivity-. was associated with .-\u003ehttp://example.org#derek\nhttp://example.org#government[/Government\\]:::agent\nhttp://example.org#civil_action_group[/Civil Action Group\\]:::agent\nhttp://example.org#national_newspaper_inc[/National Newspaper Inc.\\]:::agent\nhttp://example.org#derek[/Derek\\]:::agent\nhttp://example.org#derek-. acted on behalf of .-\u003ehttp://example.org#national_newspaper_inc\n```\n\n__User defined mermaid graph:__\n\n```python\noptions = {\n    \"invert-relations\": True,\n    \"entity\": {\n        \"shape\": \"[:]\",\n        \"fill\": \"#FC766AFF\",\n        \"stroke\": \"#FC766AFF\",\n        \"color\": \"333\"\n    },\n    \"agent\": {\n        \"shape\": \"[/:\\\\]\",\n        \"stroke\":\"#B0B8B4FF\",\n        \"fill\": \"#B0B8B4FF\",               \n        \"color\": \"333\",\n        \"relation-style\": \".\"\n    },\n    \"activity\": {\n        \"shape\": \"{{:}}\",\n        \"fill\": \"#184A45FF\",\n        \"stroke\": \"#184A45FF\",\n        \"color\": \"#eee\"       \n    }\n}\n```\n\n```mermaid\nflowchart TD\nclassDef entity fill:#FC766AFF\nclassDef entity color:333\nclassDef entity stroke:#FC766AFF\nclassDef entity stroke-width:1px\nclassDef activity fill:#184A45FF\nclassDef activity color:#eee\nclassDef activity stroke:#184A45FF\nclassDef activity stroke-width:1px\nclassDef agent fill:#B0B8B4FF\nclassDef agent color:333\nclassDef agent stroke:#B0B8B4FF\nclassDef agent stroke-width:1px\nhttp://example.org#crimeData[Crime Data]:::entity\nhttp://example.org#government-. produced .-\u003ehttp://example.org#crimeData\nhttp://example.org#nationalRegionsList[National Regions List]:::entity\nhttp://example.org#civil_action_group-. produced .-\u003ehttp://example.org#nationalRegionsList\nhttp://example.org#aggregatedByRegions[Aggregated by Regions]:::entity\nhttp://example.org#aggregationActivity-- generated --\u003ehttp://example.org#aggregatedByRegions\nhttp://example.org#derek-. produced .-\u003ehttp://example.org#aggregatedByRegions\nhttp://example.org#bar_chart[Bar Chart]:::entity\nhttp://example.org#illustrationActivity-- generated --\u003ehttp://example.org#bar_chart\nhttp://example.org#derek-. produced .-\u003ehttp://example.org#bar_chart\nhttp://example.org#aggregationActivity{{Aggregation Activity}}:::activity\nhttp://example.org#crimeData-- was used by --\u003ehttp://example.org#aggregationActivity\nhttp://example.org#nationalRegionsList-- was used by --\u003ehttp://example.org#aggregationActivity\nhttp://example.org#derek-. initiated .-\u003ehttp://example.org#aggregationActivity\nhttp://example.org#illustrationActivity{{Illustration Activity}}:::activity\nhttp://example.org#aggregatedByRegions-- was used by --\u003ehttp://example.org#illustrationActivity\nhttp://example.org#derek-. initiated .-\u003ehttp://example.org#illustrationActivity\nhttp://example.org#government[/Government\\]:::agent\nhttp://example.org#civil_action_group[/Civil Action Group\\]:::agent\nhttp://example.org#national_newspaper_inc[/National Newspaper Inc.\\]:::agent\nhttp://example.org#derek[/Derek\\]:::agent\nhttp://example.org#national_newspaper_inc-. instructed .-\u003ehttp://example.org#derek\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frue-a%2Fprovo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frue-a%2Fprovo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frue-a%2Fprovo/lists"}