def dict_produce(data): uri = URIRef(data['ckan_url']) if 'ckan_url' in data else BNode() rec = Graph(identifier=uri) rec.remove((None, None, None)) rec.add((uri, RDF.type, DCAT.Dataset)) rec.add((uri, OWL.sameAs, UUID[data["id"]])) rec.add((uri, DC.identifier, Literal(data["name"]))) if data["url"] is not None and data["url"].strip(): rec.add((uri, FOAF.homepage, URIRef(data["url"].strip()))) if data["title"] is not None: rec.add((uri, RDFS.label, Literal(data["title"]))) rec.add((uri, DC.title, Literal(data["title"]))) else: rec.add((uri, RDFS.label, Literal(data["name"]))) if data["notes"] is not None: rec.add((uri, DC["description"], Literal(data["notes"]))) if data["license_id"] is not None: rec.add((uri, DC["rights"], LICENSES[data["license_id"]])) author = BNode() if data["author"] or data["author_email"]: rec.add((uri,DC.creator, author)) if data["author"]: rec.add((author,FOAF.name, Literal(data["author"]))) if data["author_email"]: rec.add((author,FOAF.mbox, URIRef("mailto:" + data["author_email"]))) maintainer = BNode() if data["maintainer"] or data["maintainer_email"]: rec.add((uri,DC.contributor, maintainer)) if data["maintainer"]: rec.add((maintainer,FOAF.name, Literal(data["maintainer"]))) if data["maintainer_email"]: rec.add((maintainer,FOAF.mbox, URIRef("mailto:" + data["maintainer_email"]))) for tag in data["tags"]: rec.add((uri, DCAT.keyword, Literal(tag))) if "ratings_average" in data and data["ratings_average"] is not None: rec.add((uri,REV.rating, Literal(data["ratings_average"], datatype=XSD.float))) for rdata in data["resources"]: _process_resource(rec, uri, rdata) for k,v in data["extras"].items(): _process_extra(rec, uri, k, v) for rdata in data["relationships"]: _process_relationship(rec, uri, rdata) ## TODO handle groups and version return rec