Skip to content

Instantly share code, notes, and snippets.

@VladimirAlexiev
Last active August 18, 2022 09:55
Show Gist options
  • Save VladimirAlexiev/d5d67feb002dbcfa6b3d4c3dd59b52da to your computer and use it in GitHub Desktop.
Save VladimirAlexiev/d5d67feb002dbcfa6b3d4c3dd59b52da to your computer and use it in GitHub Desktop.
Crunchbase Semantic Model and Challenge: https://github.com/kg-construct/best-practices/issues/7

Crunchbase Challenge

Here's a challenge to the KG Construction CG:

  • Take Crunchbase: 10.5M rows, across 18 tables, served as CSV, updated daily.
  • The data of some nodes comes from multiple tables (eg Organization from organizations, org_parents, org_descriptions)
  • RDFize and store the total dataset, in under 1-2 hours time
    • Using the approach described here, GraphDB 9.11 with OntoRefine takes 76-119 minutes (1.3-2 hours) depending on hardware to produce and load 138M triples (19-30k triples per second)
  • Update the data daily, replacing the data of recently updated rows.
    • Using the approach described here, it takes about 15 minutes to update all of Crunchbase
  • Do it with your favorite RDFization toolkit, and preferably do it declaratively

Semantic Model

The ttl files here represent a model for converting each CSV table to RDF. Source CSV fields are embedded in URLs and literals. An overall model can be displayed by concatenating the individual ttl's, renaming some nodes to make them connected, and adding a few rdfpuml instructions:

You can generate an ontology from cb-model.tsv that describes all classes and fields.

  • terms without prefix are in the k2: namespace
  • CbIndustry is the only multi-parented class: it's subClassOf skos:Concept,CbObject

Transformations

Some values need special processing shown as "function calls":

  • urlify1(x): make a name usable in URL
    • Replace punctuations with one underscore; remove leading/trailing punctuation
    • Support all Unicode alphanumeric chars
    • Convert alphabetical chars to lowercase
  • urlify(x): same but also generates a bind to x_URLIFY
  • fixDate(x): replace with T in timestamp to conform to xsd:dateTime format
  • lcase(x): lowercase
  • split1(x): split on comma and produce multiple bindings.
  • splitArray(x): strip brackets and commas from ["foo","bar"] then split on comma
  • ifNotNull(x): filter out parasitic values ("other","not provided","unknown")
  • ifNotSame(x,y): filter out x values that are equal to ?y
    • Used to strip self-referential parent: CB category mentioning itself as category_group
  • booleanYesNo(x): map "Yes","No" to true,false
  • coalesce(x,...): coalesce the variable number of args (pick the first one that's bound)

OntoRefine Approach

This outlines Ontotext's approach, using OntoRefine for loading and updating, and generation of these transformations from models.

We use one named graph per table row. Eg the longest SPARQL update query organiations.ru looks like this:

delete {graph ?GRAPH {?s ?p ?o}}
where {
  service <rdf-mapper:ontorefine:PROJECT_ID> {
    bind(?c_updated_at as ?c_updated_at1)
    bind(iri(concat("cb/graph/organizations/",?c_uuid)) as ?GRAPH)}
  <cb> k2:updatedAt ?UPDATED_AT_DATETIME.
  bind(replace(str(?UPDATED_AT_DATETIME),'T',' ') as ?UPDATED_AT)
  filter(?c_updated_at1 > ?UPDATED_AT)
  graph ?GRAPH {?s ?p ?o}};

insert {graph ?GRAPH {
  ?cb_agent_uuid_URL a k2:Organization;
    k2:cbId ?uuid;
    k2:name ?name;
    k2:cbPermalink ?permalink;
    k2:cbUrl ?CB_URL;
    k2:rank ?RANK;
    k2:createdAt ?CREATED_AT_FIXDATE;
    k2:updatedAt ?UPDATED_AT_FIXDATE;
    k2:legalName ?legal_name;
    k2:organizationRole ?cb_organizationRole_roles_SPLIT1_URLIFY_URL;
    k2:domain ?domain;
    k2:homepageUrl ?HOMEPAGE_URL;
    k2:countryCode ?country_code;
    k2:stateCode ?state_code;
    k2:region ?region;
    k2:city ?city;
    k2:address ?address;
    k2:postalCode ?postal_code;
    k2:status ?cb_organizationStatus_status_URLIFY_URL;
    k2:shortDescription ?short_description;
    k2:industry ?cb_industry_category_list_SPLIT1_URLIFY_URL;
    k2:numFundingRounds ?NUM_FUNDING_ROUNDS;
    k2:totalFundingUsd ?TOTAL_FUNDING_USD;
    k2:totalFunding ?TOTAL_FUNDING;
    k2:totalFundingCurrencyCode ?total_funding_currency_code;
    k2:foundedOn ?FOUNDED_ON_FIXDATE;
    k2:lastFundingOn ?LAST_FUNDING_ON_FIXDATE;
    k2:closedOn ?CLOSED_ON_FIXDATE;
    k2:employeeCount ?cb_employeeCount_employee_count_IFNOTNULL_URLIFY_URL;
    k2:email ?email;
    k2:phone ?phone;
    k2:facebookUrl ?FACEBOOK_URL;
    k2:linkedinUrl ?LINKEDIN_URL;
    k2:twitterUrl ?TWITTER_URL;
    k2:logoUrl ?LOGO_URL;
    k2:alias ?alias1;
    k2:alias ?alias2;
    k2:alias ?alias3;
    k2:primaryRole ?cb_organizationRole_primary_role_URLIFY_URL;
    k2:numExits ?NUM_EXITS.
}}
where {
  service <rdf-mapper:ontorefine:PROJECT_ID> {
    bind(?c_uuid as ?uuid)
    bind(?c_name as ?name)
    bind(?c_permalink as ?permalink)
    bind(?c_cb_url as ?cb_url)
    bind(?c_rank as ?rank)
    bind(?c_created_at as ?created_at)
    bind(?c_updated_at as ?updated_at)
    bind(?c_legal_name as ?legal_name)
    bind(?c_roles as ?roles)
    bind(?c_domain as ?domain)
    bind(?c_homepage_url as ?homepage_url)
    bind(?c_country_code as ?country_code)
    bind(?c_state_code as ?state_code)
    bind(?c_region as ?region)
    bind(?c_city as ?city)
    bind(?c_address as ?address)
    bind(?c_postal_code as ?postal_code)
    bind(?c_status as ?status)
    bind(?c_short_description as ?short_description)
    bind(?c_category_list as ?category_list)
    bind(?c_num_funding_rounds as ?num_funding_rounds)
    bind(?c_total_funding_usd as ?total_funding_usd)
    bind(?c_total_funding as ?total_funding)
    bind(?c_total_funding_currency_code as ?total_funding_currency_code)
    bind(?c_founded_on as ?founded_on)
    bind(?c_last_funding_on as ?last_funding_on)
    bind(?c_closed_on as ?closed_on)
    bind(?c_employee_count as ?employee_count)
    bind(?c_email as ?email)
    bind(?c_phone as ?phone)
    bind(?c_facebook_url as ?facebook_url)
    bind(?c_linkedin_url as ?linkedin_url)
    bind(?c_twitter_url as ?twitter_url)
    bind(?c_logo_url as ?logo_url)
    bind(?c_alias1 as ?alias1)
    bind(?c_alias2 as ?alias2)
    bind(?c_alias3 as ?alias3)
    bind(?c_primary_role as ?primary_role)
    bind(?c_num_exits as ?num_exits)
    bind(iri(concat("cb/agent/",?uuid)) as ?cb_agent_uuid_URL)
    bind(strdt(?cb_url,xsd:anyURI) as ?CB_URL)
    bind(strdt(?rank,xsd:integer) as ?RANK)
    bind(REPLACE(?created_at,' ','T') as ?created_at_FIXDATE)
    bind(strdt(?created_at_FIXDATE,xsd:dateTime) as ?CREATED_AT_FIXDATE)
    bind(REPLACE(?updated_at,' ','T') as ?updated_at_FIXDATE)
    bind(strdt(?updated_at_FIXDATE,xsd:dateTime) as ?UPDATED_AT_FIXDATE)
    ?roles_SPLIT1 spif:split (?roles ',').
    bind(LCASE(REPLACE(REPLACE(REPLACE(?roles_SPLIT1, "[^\\p{L}0-9]", "_"), "_+", "_"), "^_|_$", "")) as ?roles_SPLIT1_URLIFY)
    bind(iri(concat("cb/organizationRole/",?roles_SPLIT1_URLIFY)) as ?cb_organizationRole_roles_SPLIT1_URLIFY_URL)
    bind(strdt(?homepage_url,xsd:anyURI) as ?HOMEPAGE_URL)
    bind(LCASE(REPLACE(REPLACE(REPLACE(?status, "[^\\p{L}0-9]", "_"), "_+", "_"), "^_|_$", "")) as ?status_URLIFY)
    bind(iri(concat("cb/organizationStatus/",?status_URLIFY)) as ?cb_organizationStatus_status_URLIFY_URL)
    ?category_list_SPLIT1 spif:split (?category_list ',').
    bind(LCASE(REPLACE(REPLACE(REPLACE(?category_list_SPLIT1, "[^\\p{L}0-9]", "_"), "_+", "_"), "^_|_$", "")) as ?category_list_SPLIT1_URLIFY)
    bind(iri(concat("cb/industry/",?category_list_SPLIT1_URLIFY)) as ?cb_industry_category_list_SPLIT1_URLIFY_URL)
    bind(strdt(?num_funding_rounds,xsd:integer) as ?NUM_FUNDING_ROUNDS)
    bind(strdt(?total_funding_usd,xsd:decimal) as ?TOTAL_FUNDING_USD)
    bind(strdt(?total_funding,xsd:decimal) as ?TOTAL_FUNDING)
    bind(REPLACE(?founded_on,' ','T') as ?founded_on_FIXDATE)
    bind(strdt(?founded_on_FIXDATE,xsd:dateTime) as ?FOUNDED_ON_FIXDATE)
    bind(REPLACE(?last_funding_on,' ','T') as ?last_funding_on_FIXDATE)
    bind(strdt(?last_funding_on_FIXDATE,xsd:dateTime) as ?LAST_FUNDING_ON_FIXDATE)
    bind(REPLACE(?closed_on,' ','T') as ?closed_on_FIXDATE)
    bind(strdt(?closed_on_FIXDATE,xsd:dateTime) as ?CLOSED_ON_FIXDATE)
    bind(if(?employee_count in ("other","not provided","unknown"),?UNDEF,?employee_count) as ?employee_count_IFNOTNULL)
    bind(LCASE(REPLACE(REPLACE(REPLACE(?employee_count_IFNOTNULL, "[^\\p{L}0-9]", "_"), "_+", "_"), "^_|_$", "")) as ?employee_count_IFNOTNULL_URLIFY)
    bind(iri(concat("cb/employeeCount/",?employee_count_IFNOTNULL_URLIFY)) as ?cb_employeeCount_employee_count_IFNOTNULL_URLIFY_URL)
    bind(strdt(?facebook_url,xsd:anyURI) as ?FACEBOOK_URL)
    bind(strdt(?linkedin_url,xsd:anyURI) as ?LINKEDIN_URL)
    bind(strdt(?twitter_url,xsd:anyURI) as ?TWITTER_URL)
    bind(strdt(?logo_url,xsd:anyURI) as ?LOGO_URL)
    bind(LCASE(REPLACE(REPLACE(REPLACE(?primary_role, "[^\\p{L}0-9]", "_"), "_+", "_"), "^_|_$", "")) as ?primary_role_URLIFY)
    bind(iri(concat("cb/organizationRole/",?primary_role_URLIFY)) as ?cb_organizationRole_primary_role_URLIFY_URL)
    bind(strdt(?num_exits,xsd:integer) as ?NUM_EXITS)
    bind(?c_updated_at as ?c_updated_at1)
    bind(iri(concat("cb/graph/organizations/",?c_uuid)) as ?GRAPH)}
  <cb> k2:updatedAt ?UPDATED_AT_DATETIME.
  bind(replace(str(?UPDATED_AT_DATETIME),'T',' ') as ?UPDATED_AT)
  filter(?c_updated_at1 > ?UPDATED_AT)}
<cb/acquisition/(uuid)> a k2:Acquisition;
k2:cbId '(uuid)';
k2:name '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:acquiree <cb/agent/(acquiree_uuid)>;
k2:acquirer <cb/agent/(acquirer_uuid)>;
k2:acquisitionType <cb/acquisitionType/urlify(acquisition_type)>;
k2:acquiredOn 'fixDate(acquired_on)'^^xsd:dateTime;
k2:priceUsd '(price_usd)'^^xsd:decimal;
k2:price '(price)'^^xsd:decimal;
k2:priceCurrencyCode '(price_currency_code)'.
<cb/industry/urlify(name)> a skos:Concept;
skos:inScheme <cb/industry>;
k2:cbId '(uuid)';
skos:prefLabel '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
skos:broader <cb/industry/urlify(ifNotSame(split1(category_groups_list),?name))>.
We can make this file beautiful and searchable if this error is corrected: It looks like row 154 should actually have 4 columns, instead of 2 in line 153.
Class/prop label Inherits/range kind
CbObject Crunchbase object Class
cbId ID string DatatypeProperty
name name string DatatypeProperty
cbPermalink Crunchbase permalink string DatatypeProperty
cbUrl Crunchbase URL anyURI DatatypeProperty
rank rank integer DatatypeProperty
createdAt created at dateTime DatatypeProperty
updatedAt updated at dateTime DatatypeProperty
Agent Agent CbObject Class
description description string DatatypeProperty
facebookUrl Facebook URL anyURI DatatypeProperty
linkedinUrl LinkedIn URL anyURI DatatypeProperty
twitterUrl Twitter URL anyURI DatatypeProperty
logoUrl logo URL anyURI DatatypeProperty
Acquisition Acquisition CbObject Class
acquiree acquiree Agent ObjectProperty
acquirer acquirer Agent ObjectProperty
acquisitionType acquisition type AcquisitionType ObjectProperty
acquiredOn acquired on dateTime DatatypeProperty
priceUsd price in US dollars decimal DatatypeProperty
price price in local currency decimal DatatypeProperty
priceCurrencyCode price currency code string DatatypeProperty
Degree Degree CbObject Class
person person Agent ObjectProperty
institution institution Agent ObjectProperty
degreeType degree Type string DatatypeProperty
subject subject string DatatypeProperty
startedOn started on dateTime DatatypeProperty
completedOn completed on dateTime DatatypeProperty
isCompleted is completed boolean DatatypeProperty
EventAppearance Event Appearance CbObject Class
event event Event ObjectProperty
participant participant Agent ObjectProperty
appearanceType appearance type AppearanceType ObjectProperty
shortDescription short description string DatatypeProperty
Event Event CbObject Class
shortDescription short description string DatatypeProperty
startedOn started on dateTime DatatypeProperty
endedOn ended on dateTime DatatypeProperty
eventUrl event URL anyURI DatatypeProperty
registrationUrl registration URL anyURI DatatypeProperty
venueName venue name string DatatypeProperty
description description string DatatypeProperty
countryCode country code string DatatypeProperty
stateCode state code string DatatypeProperty
region region string DatatypeProperty
city city string DatatypeProperty
logoUrl logo URL anyURI DatatypeProperty
eventRole event role EventRole ObjectProperty
FundingRound Funding Round CbObject Class
investmentType investment type InvestmentType ObjectProperty
announcedOn announced on dateTime DatatypeProperty
raisedAmountUsd raised amount in US dollars decimal DatatypeProperty
raisedAmount raised amount in local currency decimal DatatypeProperty
raisedAmountCurrencyCode raised amount currency code string DatatypeProperty
postMoneyValuationUsd post money valuation in US dollars decimal DatatypeProperty
postMoneyValuation post money valuation in local currency decimal DatatypeProperty
postMoneyValuationCurrencyCode post money valuation currency code string DatatypeProperty
investorCount investor count integer DatatypeProperty
organization organization Agent ObjectProperty
Fund Fund CbObject Class
entity entity Agent ObjectProperty
announcedOn announced on dateTime DatatypeProperty
raisedAmountUsd raised amount in US dollars decimal DatatypeProperty
raisedAmount raised amount in local currency decimal DatatypeProperty
raisedAmountCurrencyCode raised amount currency code string DatatypeProperty
Investment Investment CbObject Class
fundingRound fundingRound FundingRound ObjectProperty
investor investor Agent ObjectProperty
partner partner Person ObjectProperty
isLeadInvestor isLeadInvestor boolean DatatypeProperty
Investor Investor Agent Class
organizationRole organization role OrganizationRole ObjectProperty
domain web domain string DatatypeProperty
investorType investor type InvestorType ObjectProperty
investmentCount investment count integer DatatypeProperty
totalFundingUsd total funding in US dollars decimal DatatypeProperty
totalFunding total funding in local currency decimal DatatypeProperty
totalFundingCurrencyCode total funding currency code string DatatypeProperty
IPO Initial Public Offering CbObject Class
organization organization Agent ObjectProperty
exchangeSymbol exchange symbol string DatatypeProperty
stockSymbol stock symbol string DatatypeProperty
wentPublicOn went public on dateTime DatatypeProperty
sharePriceUsd share price in US dollars decimal DatatypeProperty
sharePrice share price in local currency decimal DatatypeProperty
sharePriceCurrencyCode share price currency code string DatatypeProperty
valuationPriceUsd valuation price in US dollars decimal DatatypeProperty
valuationPrice valuation price in local currency decimal DatatypeProperty
valuationPriceCurrencyCode valuation price currency code string DatatypeProperty
moneyRaisedUsd money raised in US dollars decimal DatatypeProperty
moneyRaised money raised in local currency decimal DatatypeProperty
moneyRaisedCurrencyCode money raised currency code string DatatypeProperty
Job Job CbObject Class
person person Agent ObjectProperty
organization organization Agent ObjectProperty
startedOn started on dateTime DatatypeProperty
endedOn ended on dateTime DatatypeProperty
isCurrent is current boolean DatatypeProperty
title title string DatatypeProperty
jobType job type JobType ObjectProperty
Organization Organization CbObject Class
legalName legal name string DatatypeProperty
organizationRole organization role OrganizationRole ObjectProperty
parentOrganization parent organization Organization ObjectProperty
domain web domain string DatatypeProperty
homepageUrl homepage URL anyURI DatatypeProperty
countryCode country code string DatatypeProperty
stateCode state code string DatatypeProperty
region region string DatatypeProperty
city city string DatatypeProperty
address address string DatatypeProperty
postalCode postal code string DatatypeProperty
status status OrganizationStatus ObjectProperty
shortDescription short description string DatatypeProperty
industry industry Industry ObjectProperty
numFundingRounds number of funding rounds integer DatatypeProperty
totalFundingUsd total funding in US dollars decimal DatatypeProperty
totalFunding total funding in local currency decimal DatatypeProperty
totalFundingCurrencyCode total funding currency code string DatatypeProperty
foundedOn founded on dateTime DatatypeProperty
lastFundingOn last funding on dateTime DatatypeProperty
closedOn closed on dateTime DatatypeProperty
employeeCount employee count EmployeeCount ObjectProperty
email email string DatatypeProperty
phone phone string DatatypeProperty
alias alias string DatatypeProperty
primaryRole primary role OrganizationRole ObjectProperty
numExits number of exits integer DatatypeProperty
Person Person Agent Class
firstName first name string DatatypeProperty
lastName last name string DatatypeProperty
gender gender Gender ObjectProperty
countryCode country code string DatatypeProperty
stateCode state code string DatatypeProperty
region region string DatatypeProperty
city city string DatatypeProperty
featuredJobOrganization featured job organization Agent ObjectProperty
featuredJobTitle featured job title string DatatypeProperty
skos:ConceptScheme Concept Scheme
skos:prefLabel preferred label string DatatypeProperty
skos:Concept Concept Class
skos:inScheme in scheme skos:ConceptScheme ObjectProperty
skos:prefLabel preferred label string DatatypeProperty
skos:broader has broader skos:Concept ObjectProperty
order order integer DatatypeProperty
CbIndustry Crunchbase Industry skos:Concept,CbObject Class
AcquisitionType Acquisition Type skos:Concept Class
AppearanceType Appearance Type skos:Concept Class
EmployeeCount Employee Count skos:Concept Class
EventRole Event Role skos:Concept Class
Gender Gender skos:Concept Class
InvestmentType Investment Type skos:Concept Class
InvestorType Investor Type skos:Concept Class
JobType Job Type skos:Concept Class
OrganizationRole Organization Role skos:Concept Class
OrganizationStatus Organization Status skos:Concept Class
<cb/degree/(uuid)> a k2:Degree;
k2:cbId '(uuid)';
k2:name '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:person <cb/agent/(person_uuid)>;
k2:institution <cb/agent/(institution_uuid)>;
k2:degreeType '(degree_type)';
k2:subject '(subject)';
k2:startedOn 'fixDate(started_on)'^^xsd:dateTime;
k2:completedOn 'fixDate(completed_on)'^^xsd:dateTime;
k2:isCompleted 'lcase(is_completed)'^^xsd:boolean.
<cb/event_appearance/(uuid)> a k2:EventAppearance;
k2:cbId '(uuid)';
k2:name '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:event <cb/event/(event_uuid)>;
k2:participant <cb/agent/(participant_uuid)>;
k2:appearanceType <cb/appearanceType/urlify(appearance_type)>;
k2:shortDescription '(short_description)'.
<cb/event/(uuid)> a k2:Event;
k2:cbId '(uuid)';
k2:name '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:shortDescription '(short_description)';
k2:startedOn 'fixDate(started_on)'^^xsd:dateTime;
k2:endedOn 'fixDate(ended_on)'^^xsd:dateTime;
k2:eventUrl '(event_url)'^^xsd:anyURI;
k2:registrationUrl '(registration_url)'^^xsd:anyURI;
k2:venueName '(venue_name)';
k2:description '(description)';
k2:countryCode '(country_code)';
k2:stateCode '(state_code)';
k2:region '(region)';
k2:city '(city)';
k2:logoUrl '(logo_url)'^^xsd:anyURI;
k2:eventRole <cb/eventRole/urlify(ifNotNull(split1(event_roles)))>.
<cb/funding_round/(uuid)> a k2:FundingRound;
k2:cbId '(uuid)';
k2:name '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:investmentType <cb/investmentType/urlify(investment_type)>;
k2:announcedOn 'fixDate(announced_on)'^^xsd:dateTime;
k2:raisedAmountUsd '(raised_amount_usd)'^^xsd:decimal;
k2:raisedAmount '(raised_amount)'^^xsd:decimal;
k2:raisedAmountCurrencyCode '(raised_amount_currency_code)';
k2:postMoneyValuationUsd '(post_money_valuation_usd)'^^xsd:decimal;
k2:postMoneyValuation '(post_money_valuation)'^^xsd:decimal;
k2:postMoneyValuationCurrencyCode '(post_money_valuation_currency_code)';
k2:investorCount '(investor_count)'^^xsd:integer;
k2:organization <cb/agent/(org_uuid)>.
<cb/fund/(uuid)> a k2:Fund;
k2:cbId '(uuid)';
k2:name '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:entity <cb/agent/(entity_uuid)>;
k2:announcedOn 'fixDate(announced_on)'^^xsd:dateTime;
k2:raisedAmountUsd '(raised_amount_usd)'^^xsd:decimal;
k2:raisedAmount '(raised_amount)'^^xsd:decimal;
k2:raisedAmountCurrencyCode '(raised_amount_currency_code)'.
<cb/investment/(uuid)> a k2:Investment;
k2:fundingRound <cb/funding_round/(funding_round_uuid)>;
k2:investor <cb/agent/(investor_uuid)>;
k2:partner <cb/agent/(partner_uuid)>.
<cb/investment/(uuid)> a k2:Investment;
k2:cbId '(uuid)';
k2:name '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:fundingRound <cb/funding_round/(funding_round_uuid)>;
k2:investor <cb/agent/(investor_uuid)>;
k2:isLeadInvestor 'lcase(is_lead_investor)'^^xsd:boolean.
<cb/agent/(uuid)> a k2:Investor;
k2:cbId '(uuid)';
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:organizationRole <cb/organizationRole/urlify(split1(roles))>;
k2:domain '(domain)';
k2:investorType <cb/investorType/urlify(split1(investor_types))>;
k2:investmentCount '(investment_count)'^^xsd:integer;
k2:totalFundingUsd '(total_funding_usd)'^^xsd:decimal;
k2:totalFunding '(total_funding)'^^xsd:decimal;
k2:totalFundingCurrencyCode '(total_funding_currency_code)'.
<cb/ipo/(uuid)> a k2:IPO;
k2:cbId '(uuid)';
k2:name '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:organization <cb/agent/(org_uuid)>;
k2:exchangeSymbol '(stock_exchange_symbol)';
k2:stockSymbol '(stock_symbol)';
k2:wentPublicOn 'fixDate(went_public_on)'^^xsd:dateTime;
k2:sharePriceUsd '(share_price_usd)'^^xsd:decimal;
k2:sharePrice '(share_price)'^^xsd:decimal;
k2:sharePriceCurrencyCode '(share_price_currency_code)';
k2:valuationPriceUsd '(valuation_price_usd)'^^xsd:decimal;
k2:valuationPrice '(valuation_price)'^^xsd:decimal;
k2:valuationPriceCurrencyCode '(valuation_price_currency_code)';
k2:moneyRaisedUsd '(money_raised_usd)'^^xsd:decimal;
k2:moneyRaised '(money_raised)'^^xsd:decimal;
k2:moneyRaisedCurrencyCode '(money_raised_currency_code)'.
<cb/job/(uuid)> a k2:Job;
k2:cbId '(uuid)';
k2:name '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:person <cb/agent/(person_uuid)>;
k2:organization <cb/agent/(org_uuid)>;
k2:startedOn 'fixDate(started_on)'^^xsd:dateTime;
k2:endedOn 'fixDate(ended_on)'^^xsd:dateTime;
k2:isCurrent 'lcase(is_current)'^^xsd:boolean;
k2:title '(title)';
k2:jobType <cb/jobType/urlify(job_type)>.
<cb/agent/(uuid)> k2:parentOrganization <cb/agent/(parent_uuid)>.
<cb/agent/(uuid)>
k2:description '(description)'.
<cb/agent/(uuid)> a k2:Organization;
k2:cbId '(uuid)';
k2:name '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:legalName '(legal_name)';
k2:organizationRole <cb/organizationRole/urlify(split1(roles))>;
k2:domain '(domain)';
k2:homepageUrl '(homepage_url)'^^xsd:anyURI;
k2:countryCode '(country_code)';
k2:stateCode '(state_code)';
k2:region '(region)';
k2:city '(city)';
k2:address '(address)';
k2:postalCode '(postal_code)';
k2:status <cb/organizationStatus/urlify(status)>;
k2:shortDescription '(short_description)';
k2:industry <cb/industry/urlify(split1(category_list))>;
k2:numFundingRounds '(num_funding_rounds)'^^xsd:integer;
k2:totalFundingUsd '(total_funding_usd)'^^xsd:decimal;
k2:totalFunding '(total_funding)'^^xsd:decimal;
k2:totalFundingCurrencyCode '(total_funding_currency_code)';
k2:foundedOn 'fixDate(founded_on)'^^xsd:dateTime;
k2:lastFundingOn 'fixDate(last_funding_on)'^^xsd:dateTime;
k2:closedOn 'fixDate(closed_on)'^^xsd:dateTime;
k2:employeeCount <cb/employeeCount/urlify(ifNotNull(employee_count))>;
k2:email '(email)';
k2:phone '(phone)';
k2:facebookUrl '(facebook_url)'^^xsd:anyURI;
k2:linkedinUrl '(linkedin_url)'^^xsd:anyURI;
k2:twitterUrl '(twitter_url)'^^xsd:anyURI;
k2:logoUrl '(logo_url)'^^xsd:anyURI;
k2:alias '(alias1)';
k2:alias '(alias2)';
k2:alias '(alias3)';
k2:primaryRole <cb/organizationRole/urlify(primary_role)>;
k2:numExits '(num_exits)'^^xsd:integer.
<cb/agent/(uuid)> a k2:Person;
k2:cbId '(uuid)';
k2:name '(name)';
k2:cbPermalink '(permalink)';
k2:cbUrl '(cb_url)'^^xsd:anyURI;
k2:rank '(rank)'^^xsd:integer;
k2:createdAt 'fixDate(created_at)'^^xsd:dateTime;
k2:updatedAt 'fixDate(updated_at)'^^xsd:dateTime;
k2:firstName '(first_name)';
k2:lastName '(last_name)';
k2:gender <cb/gender/urlify(ifNotNull(gender))>;
k2:countryCode '(country_code)';
k2:stateCode '(state_code)';
k2:region '(region)';
k2:city '(city)';
k2:featuredJobOrganization <cb/agent/(featured_job_organization_uuid)>;
k2:featuredJobTitle '(featured_job_title)';
k2:facebookUrl '(facebook_url)'^^xsd:anyURI;
k2:linkedinUrl '(linkedin_url)'^^xsd:anyURI;
k2:twitterUrl '(twitter_url)'^^xsd:anyURI;
k2:logoUrl '(logo_url)'^^xsd:anyURI.
<cb/agent/(uuid)>
k2:description '(description)'.
@base <https://example.com/> .
@prefix k2: <https://example.com/ontology/>.
@prefix puml: <http://plantuml.com/ontology#> .
@prefix spif: <http://spinrdf.org/spif#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment