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
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
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))
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")