Example #1
0
def load_airline(series, countries_list):
    if (series['Airline ID'] == -1) or (pd.isna(series['Clean ID'])):
        return None
    query_obj = WOQLQuery().insert(series['Clean ID'],
                                   'Airline',
                                   label=series['Name'])

    clean_country = _clean_id(series['Country'], prefix='country')
    if clean_country in countries_list:
        query_obj.property('registered_in', "doc:" + clean_country)
    return query_obj
Example #2
0
def load_country(series):
    if pd.isna(series['Country ID']):
        return None
    query_obj = WOQLQuery().insert(series['Country ID'],
                                   'Country',
                                   label=series['Name'])
    if pd.notna(series['ISO Code']):
        query_obj.property('iso_code', series['ISO Code'])
    if pd.notna(series['FIP Code']):
        query_obj.property('fip_code', series['FIP Code'])
    return query_obj
Example #3
0
def construction_schema_objects(series):
    result = WOQLQuery().doctype(series.id,
             label=series.label,
             description=series.comment)
    if series.id in SIMPLE_TYPE_MAP:
        result = result.property(series.id+"Value", "xsd:"+SIMPLE_TYPE_MAP[series.id])
    return result
def extract_data(data, id='event/'):
    """Recursive function to craw through the data and create WOQLQuery objects"""

    if type(data) == dict:
        data_type = data['type']
        WOQLObj = WOQLQuery().insert('doc:'+id, data_type)
        if data_type == 'http://schema.org/DateTime':
            date_value = {"@value" : data['value'], "@type" : "xsd:dateTime"}
            execution_queue.append(WOQLObj.property(data_type+'Value', date_value))
            return
        for prop in data['properties']:
            extract_data(data['properties'][prop], id+prop+'/')
            WOQLObj = WOQLObj.property('http://schema.org/'+prop, 'doc:'+id+prop+'/')
        execution_queue.append(WOQLObj)
    else:
        if '://' in data:
            data_type = 'http://schema.org/URL'
        else:
            data_type = 'http://schema.org/Text'
        WOQLObj = WOQLQuery().insert('doc:'+id, data_type)
        data_obj = {"@value" : data, "@type" : "xsd:string"}
        execution_queue.append(WOQLObj.property(data_type+'Value',data_obj))
Example #5
0
def load_flight(series, airports, airlines):
    clean_id = f"{series['Airline Code']}_{series['Source Airport ID']}_{series['Destination Airport ID']}"
    query_obj = WOQLQuery().insert(
        clean_id,
        'Flight',
        label=
        f"Flight by {series['Airline Code']} from {series['Source Airport ID']} to {series['Destination Airport ID']}"
    )

    # departs
    if len(series['Source Airport ID']) == 3:
        lookup = 'IATA'
    elif len(series['Source Airport ID']) == 4:
        lookup = 'ICAO'
    else:
        lookup = None

    if lookup is not None:
        filter = airports[lookup] == series['Source Airport ID']
        if filter.any():
            airport_id = airports[filter]['Clean ID'].iloc[0]
            query_obj.property('departs', "doc:" + airport_id)

    # arrives
    if len(series['Destination Airport ID']) == 3:
        lookup = 'IATA'
    elif len(series['Destination Airport ID']) == 4:
        lookup = 'ICAO'
    else:
        lookup = None

    if lookup is not None:
        filter = airports[lookup] == series['Destination Airport ID']
        if filter.any():
            airport_id = airports[filter]['Clean ID'].iloc[0]
            query_obj.property('arrives', "doc:" + airport_id)

    # operated_by
    if len(series['Airline Code']) == 2:
        lookup = 'IATA'
    elif len(series['Airline Code']) == 3:
        lookup = 'ICAO'
    else:
        lookup = None

    if lookup is not None:
        filter = (airlines[lookup] == series['Airline Code'])
        if filter.any():
            airline_id = airlines[filter]['Clean ID'].iloc[0]
            query_obj.property('operated_by', "doc:" + airline_id)

    return query_obj
def load_data(client, houses, characters):
    results = []

    for ppl in characters:
        ppl_obj = WOQLQuery().insert("Person_"+str(ppl["Id"]), "Person")
        if len(ppl["Name"]) == 0:
            ppl_obj.label("Unknown")
        else:
            ppl_obj.label(ppl["Name"])
        if ppl["IsFemale"]:
            ppl_obj.property("gender", WOQLQuery().string("Female"))
        else:
            ppl_obj.property("gender", WOQLQuery().string("Male"))
        if ppl["Father"] is not None:
            ppl_obj.property("father", "doc:Person_"+str(ppl["Father"]))
        if ppl["Mother"] is not None:
            ppl_obj.property("mother", "doc:Person_"+str(ppl["Mother"]))
        if ppl["Spouse"] is not None:
            ppl_obj.property("spouse", "doc:Person_"+str(ppl["Spouse"]))
        for child in ppl["Children"]:
            ppl_obj.property("children", "doc:Person_"+str(child))
        for alias in ppl["Aliases"]:
            ppl_obj.property("aliases", WOQLQuery().string(alias))
        results.append(ppl_obj)

    for hus in houses:
        if hus["Region"] is not None:
            results.append(WOQLQuery().insert("Region_"+hus["Region"], "Region", label=hus["Region"]))
        for seat in hus["Seats"]:
            results.append(WOQLQuery().insert("Seats_"+seat, "Seats", label=seat))

        hus_obj = WOQLQuery().insert("hus"+str(hus["Id"]), "House").label(hus["Name"])
        if hus["Region"] is not None:
            hus_obj.property("region", "doc:Region_"+hus["Region"])
        for seat in hus["Seats"]:
            hus_obj.property("seats", "doc:Seats_"+seat)
        if hus["Founder"] is not None:
            hus_obj.property("founder", "doc:Person_"+str(hus["Founder"]))
        if hus["Words"] is not None:
            data_obj = {"@value" : hus["Words"], "@type" : "xsd:string"}
            hus_obj.property("words", data_obj)
        if hus["Heir"] is not None:
            hus_obj.property("heir", "doc:Person_"+str(hus["Heir"]))
        if hus["Overlord"] is not None:
            hus_obj.property("overlord", "doc:Person_"+str(hus["Overlord"]))
        results.append(hus_obj)


    return WOQLQuery().woql_and(*results).execute(client, "Adding data for Game of Thrones.")
def create_schema(client):
    """The query which creates the schema
        Parameters - it uses variables rather than the fluent style as an example
        ==========
        client : a WOQLClient() connection

    """
    base = WOQLQuery().doctype("EphemeralEntity",
                               label="Ephemeral Entity",
                               description="An entity that has a lifespan")
    base.property("lifespan_start", "dateTime", label="Existed From")
    base.property("lifespan_end", "dateTime", label="Existed To")

    country = WOQLQuery().add_class("Country").label("Country").description(
        "A nation state").parent("EphemeralEntity")
    country.property("iso_code", "string", label="ISO Code")
    country.property("fip_code", "string", label="FIP Code")

    airline = WOQLQuery().add_class("Airline").label("Airline").description(
        "An operator of airplane flights").parent("EphemeralEntity")
    airline = airline.property("registered_in",
                               "scm:Country",
                               label="Registered In"),

    airport = WOQLQuery().add_class("Airport").label("Airport").description(
        "An airport where flights terminate").parent("EphemeralEntity")
    airport.property("situated_in", "Country", label="Situated In"),

    flight = WOQLQuery().add_class("Flight").label("Flight").description(
        "A flight between airports").parent("EphemeralEntity")
    flight.property("departs", "Airport", label="Departs")
    flight.property("arrives", "Airport", label="Arrives")
    flight.property("operated_by", "Airline", label="Operated By")

    schema = WOQLQuery().woql_and(base, country, airline, airport, flight)
    return schema.execute(client, "Creating schema for flight data")