Example #1
0
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