@prefix : <https://xiaopingfeng.com/graph/ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

: a owl:Ontology ;
    rdfs:label "xpf-kb" ;
    owl:versionInfo "5" .

:EventAction a owl:Class ;
    rdfs:label "监管 / 执法动作 / Regulatory action" ;
    rdfs:comment "Event of kind 'action'" ;
    rdfs:subClassOf :Event .

:EventControversy a owl:Class ;
    rdfs:label "学术 / 行业争议 / Controversy" ;
    rdfs:comment "Event of kind 'controversy'" ;
    rdfs:subClassOf :Event .

:EventFinancing a owl:Class ;
    rdfs:label "融资 / 上市 / Financing / listing" ;
    rdfs:comment "Event of kind 'financing'" ;
    rdfs:subClassOf :Event .

:EventHearing a owl:Class ;
    rdfs:label "听证会 / Hearing" ;
    rdfs:comment "Event of kind 'hearing'" ;
    rdfs:subClassOf :Event .

:EventIncident a owl:Class ;
    rdfs:label "安全事故 / 漏洞披露 / Incident / disclosure" ;
    rdfs:comment "Event of kind 'incident'" ;
    rdfs:subClassOf :Event .

:EventMilestone a owl:Class ;
    rdfs:label "里程碑 / Milestone" ;
    rdfs:comment "Event of kind 'milestone'" ;
    rdfs:subClassOf :Event .

:EventSignal a owl:Class ;
    rdfs:label "行业信号 / Industry signal" ;
    rdfs:comment "Event of kind 'signal'" ;
    rdfs:subClassOf :Event .

:EventStatement a owl:Class ;
    rdfs:label "公开表态 / 讲话 / Public statement" ;
    rdfs:comment "Event of kind 'statement'" ;
    rdfs:subClassOf :Event .

:InstrumentCase a owl:Class ;
    rdfs:label "案件 / 判例 / Court case" ;
    rdfs:comment "Instrument of kind 'case'" ;
    rdfs:subClassOf :Instrument .

:InstrumentDataset a owl:Class ;
    rdfs:label "数据库 / 追踪库 / Dataset / tracker" ;
    rdfs:comment "Instrument of kind 'dataset'" ;
    rdfs:subClassOf :Instrument .

:InstrumentFramework a owl:Class ;
    rdfs:label "框架 / 准则 / 指引 / Framework / guidance" ;
    rdfs:comment "Instrument of kind 'framework'" ;
    rdfs:subClassOf :Instrument .

:InstrumentLaw a owl:Class ;
    rdfs:label "法律 / 法规 / 行政令 / Law / regulation / order" ;
    rdfs:comment "Instrument of kind 'law'" ;
    rdfs:subClassOf :Instrument .

:InstrumentReport a owl:Class ;
    rdfs:label "报告 / 调查 / 评估 / Report / survey / assessment" ;
    rdfs:comment "Instrument of kind 'report'" ;
    rdfs:subClassOf :Instrument .

:InstrumentResearch a owl:Class ;
    rdfs:label "论文 / 研究 / Paper / study" ;
    rdfs:comment "Instrument of kind 'research'" ;
    rdfs:subClassOf :Instrument .

:InstrumentRule a owl:Class ;
    rdfs:label "拟议规则 / 合同条款 / Proposed rule / clause" ;
    rdfs:comment "Instrument of kind 'rule'" ;
    rdfs:subClassOf :Instrument .

:InstrumentStandard a owl:Class ;
    rdfs:label "标准 / 协议 / Standard / protocol" ;
    rdfs:comment "Instrument of kind 'standard'" ;
    rdfs:subClassOf :Instrument .

:InstrumentTreaty a owl:Class ;
    rdfs:label "条约 / 公约 / Treaty" ;
    rdfs:comment "Instrument of kind 'treaty'" ;
    rdfs:subClassOf :Instrument .

:OrganizationCompany a owl:Class ;
    rdfs:label "公司 / Company" ;
    rdfs:comment "Organization of kind 'company'" ;
    rdfs:subClassOf :Organization .

:OrganizationGovernment a owl:Class ;
    rdfs:label "政府机构 / Government body" ;
    rdfs:comment "Organization of kind 'government'" ;
    rdfs:subClassOf :Organization .

:OrganizationIndividual a owl:Class ;
    rdfs:label "个人 / Individual" ;
    rdfs:comment "Organization of kind 'individual'" ;
    rdfs:subClassOf :Organization .

:OrganizationLab a owl:Class ;
    rdfs:label "实验室 / Lab" ;
    rdfs:comment "Organization of kind 'lab'" ;
    rdfs:subClassOf :Organization .

:OrganizationNonprofit a owl:Class ;
    rdfs:label "非营利机构 / Nonprofit" ;
    rdfs:comment "Organization of kind 'nonprofit'" ;
    rdfs:subClassOf :Organization .

:OrganizationProgramme a owl:Class ;
    rdfs:label "项目 / Programme" ;
    rdfs:comment "Organization of kind 'programme'" ;
    rdfs:subClassOf :Organization .

:OrganizationResearchInstitute a owl:Class ;
    rdfs:label "研究机构 / Research institute" ;
    rdfs:comment "Organization of kind 'research-institute'" ;
    rdfs:subClassOf :Organization .

:OrganizationUniversityLab a owl:Class ;
    rdfs:label "高校实验室 / University lab" ;
    rdfs:comment "Organization of kind 'university-lab'" ;
    rdfs:subClassOf :Organization .

:acquihired a owl:ObjectProperty ;
    rdfs:label "授权+挖人 / licensed + hired" ;
    rdfs:comment "{s} licensed {t}'s technology and hired its team — Non-acquisition structure: the source licensed the target's technology and hired most of its team ('reverse acquihire'). Use `acquired` only for real acquisitions; if the parties reject the label, say so in `note`. Allowed source: Organization; target: Organization." ;
    rdfs:domain :Organization ;
    rdfs:range :Organization ;
    :allowedSource :Organization ;
    :allowedTarget :Organization .

:acquired a owl:ObjectProperty ;
    rdfs:label "收购 / acquired" ;
    rdfs:comment "{s} acquired {t} — Completed or announced acquisition; `since` is the closing (or announcement) date, say which in `note`. Allowed source: Organization; target: Organization." ;
    rdfs:domain :Organization ;
    rdfs:range :Organization ;
    :allowedSource :Organization ;
    :allowedTarget :Organization .

:allowedSource a owl:AnnotationProperty .

:allowedTarget a owl:AnnotationProperty .

:alumni_from a owl:ObjectProperty ;
    rdfs:label "团队来自 / team from" ;
    rdfs:comment "{s}'s core team came from {t} — The founders or core team of the source (typically a new lab) came from the target organization. Put the people (name, former role), and the unit when it is a team inside the target (e.g. Google DeepMind, Anthropic Alignment), in `note`/`unit`; `since` is when they left or the lab was announced. Evidence is the lab's own announcement or a primary profile — not a rumour about who might have left. Allowed source: Organization; target: Organization." ;
    rdfs:domain :Organization ;
    rdfs:range :Organization ;
    :allowedSource :Organization ;
    :allowedTarget :Organization .

:based_on a owl:ObjectProperty ;
    rdfs:label "基于 / based on" ;
    rdfs:comment "{s} is based on {t} — Source model = fine-tune / post-train / distillation of the target model. Evidence is the model card or announcement. Allowed source: Model; target: Model." ;
    rdfs:domain :Model ;
    rdfs:range :Model ;
    :allowedSource :Model ;
    :allowedTarget :Model .

:developed_by a owl:ObjectProperty ;
    rdfs:label "开发方 / developed by" ;
    rdfs:comment "{s} is developed by {t} — Points from the product to its developer. `unit` names the team inside the developer (e.g. Google DeepMind); `role` is primary or co. Allowed source: AIApp, Model; target: Organization." ;
    rdfs:domain :Node ;
    rdfs:range :Organization ;
    :allowedSource :AIApp,
        :Model ;
    :allowedTarget :Organization .

:flows_to a owl:ObjectProperty ;
    rdfs:label "指向 / points to" ;
    rdfs:comment "Arrow in the overview diagram: {s} → {t} — Derived on every build from the arrows of the overview diagram at the top of a Landscape map page (what the arrow means — upstream to downstream, cause to effect — is the map's own; see its page). Allowed source: Layer; target: Layer. [derived from the Landscape pages, not written] [structural]" ;
    rdfs:domain :Layer ;
    rdfs:range :Layer ;
    :allowedSource :Layer ;
    :allowedTarget :Layer .

:in_map a owl:ObjectProperty ;
    rdfs:label "属于 / in map" ;
    rdfs:comment "{s} belongs to the map {t} — Derived on every build: a layer (or ledger category) or a page judgement belongs to the Landscape map it is written on. Allowed source: Layer, Trend; target: Map. [derived from the Landscape pages, not written] [structural]" ;
    rdfs:domain :Node ;
    rdfs:range :Map ;
    :allowedSource :Layer,
        :Trend ;
    :allowedTarget :Map .

:invested_in a owl:ObjectProperty ;
    rdfs:label "投资 / invested in" ;
    rdfs:comment "{s} invested in {t} — Equity investment (round lead or named investor). Put the round and the amount in `note`; `since` is the announcement date. Allowed source: Organization; target: Organization." ;
    rdfs:domain :Organization ;
    rdfs:range :Organization ;
    :allowedSource :Organization ;
    :allowedTarget :Organization .

:involves a owl:ObjectProperty ;
    rdfs:label "涉及 / involves" ;
    rdfs:comment "{s} involves {t} — A document or an event (a lawsuit, a ruling, a statement, an incident, a regulatory action) and an organization, App or model it is about. `role` (required; several roles of one pair are joined with +, e.g. discloser+participant) says which part the target plays: plaintiff, defendant, regulator, issuer, speaker, subject, victim, attacker, discloser, vendor, customer, steward, participant, adjudicator (the court). Evidence is the Landscape card (or another source) that states it; `quote` in the evidence text is the sentence of the card. Allowed source: Instrument, Event; target: Organization, AIApp, Model." ;
    rdfs:domain :Node ;
    rdfs:range :Node ;
    :allowedSource :Event,
        :Instrument ;
    :allowedTarget :AIApp,
        :Model,
        :Organization .

:member_of a owl:ObjectProperty ;
    rdfs:label "成员 / member of" ;
    rdfs:comment "{s} is a member of {t} — An organization belongs to a consortium, foundation, forum, standards body or alliance (an organization node of its own, e.g. Frontier Model Forum, Agentic AI Foundation). `since` is when it joined or co-founded it. A state or institution taking part in an international process is `involves` on that process's Instrument, not this. Allowed source: Organization; target: Organization." ;
    rdfs:domain :Organization ;
    rdfs:range :Organization ;
    :allowedSource :Organization ;
    :allowedTarget :Organization .

:mentions a owl:ObjectProperty ;
    rdfs:label "提到 / mentions" ;
    rdfs:comment "{s} mentions {t} — Derived on every build by a NAME MATCH of an entity's name or alias in the text of a page judgement (Trend) or an industry signal (Event kind signal); `where` says title or text. It is a text match, never a judgement that the entity is the subject — the entity named as the source of a signal is `involves` (role issuer / speaker) instead. Allowed source: Trend, Event; target: Organization, AIApp, Model. [derived from the Landscape pages, not written] [structural]" ;
    rdfs:domain :Node ;
    rdfs:range :Node ;
    :allowedSource :Event,
        :Trend ;
    :allowedTarget :AIApp,
        :Model,
        :Organization .

:owns a owl:ObjectProperty ;
    rdfs:label "持有 / owns" ;
    rdfs:comment "{s} owns {t} — Control or majority ownership. `since` / `until` bound it. Allowed source: Organization; target: Organization." ;
    rdfs:domain :Organization ;
    rdfs:range :Organization ;
    :allowedSource :Organization ;
    :allowedTarget :Organization .

:placed_in a owl:ObjectProperty ;
    rdfs:label "位于 / placed in" ;
    rdfs:comment "{s} appears in Landscape layer {t} — Derived on every build, never written: an entity (or Instrument / Event) is the subject of a player card that stands on this layer of a Landscape map. Edge properties: cards (card ids), hi (the page highlights it), reported (every card for it is a `conflow` card: forecast, rumour or not yet settled). Evidence is the card on the site's own page. Models are placed on the category of the model ledger and signals on the category of the signal ledger the same way (evidence: the ledger's own anchor #m-<id> / #sig-<id>). Allowed source: Organization, AIApp, Model, Instrument, Event; target: Layer. [derived from the Landscape pages, not written] [structural]" ;
    rdfs:domain :Node ;
    rdfs:range :Layer ;
    :allowedSource :AIApp,
        :Event,
        :Instrument,
        :Model,
        :Organization ;
    :allowedTarget :Layer .

:supplies_compute_to a owl:ObjectProperty ;
    rdfs:label "供算力 / supplies compute to" ;
    rdfs:comment "{s} supplies compute to {t} — A chip, cloud or data-center capacity supply agreement: source = supplier, target = customer. Put the scale (GW, chips, dollars) and the term in `note`; `since` is the announcement or signing date. Allowed source: Organization; target: Organization." ;
    rdfs:domain :Organization ;
    rdfs:range :Organization ;
    :allowedSource :Organization ;
    :allowedTarget :Organization .

:supplies_to a owl:ObjectProperty ;
    rdfs:label "供应 / supplies to" ;
    rdfs:comment "{s} supplies products or services to {t} — A vendor and a customer it is named with: an EDA tool, a foundry slot, HBM, power, a model offered on a platform, a government contract, an open-source project a company runs. source = supplier, target = customer; `product` says what in a few words (e.g. EDA 工具, 晶圆代工, 电力, 政府采购); `since` is the announcement or deployment date. Chips, cloud and data-center capacity are `supplies_compute_to`, not this. A customer list in a vendor's own marketing counts when the page names the customer; say so in `note`. Allowed source: Organization; target: Organization." ;
    rdfs:domain :Organization ;
    rdfs:range :Organization ;
    :allowedSource :Organization ;
    :allowedTarget :Organization .

:uses_model a owl:ObjectProperty ;
    rdfs:label "使用 / uses" ;
    rdfs:comment "{s} uses the model {t} — A documented dependency of an App on one specific model (an official doc or announcement names the model). Allowed source: AIApp; target: Model." ;
    rdfs:domain :AIApp ;
    rdfs:range :Model ;
    :allowedSource :AIApp ;
    :allowedTarget :Model .

:uses_model_from a owl:ObjectProperty ;
    rdfs:label "模型依赖 / model from" ;
    rdfs:comment "{s} uses models from {t} — A documented dependency of an App on a lab's models. `weight` (optional) is how many of that lab's models. When the product is not an App in the registry (an EDA vendor's agent built on NVIDIA's Nemotron), the source is the organization that makes it and the note names the product. Allowed source: AIApp, Organization; target: Organization." ;
    rdfs:domain :Node ;
    rdfs:range :Organization ;
    :allowedSource :AIApp,
        :Organization ;
    :allowedTarget :Organization .

:Map a owl:Class ;
    rdfs:label "图谱 / Map" ;
    rdfs:comment "derived on every build from the /landscape/<map>/ pages and their index.meta.json (graph/kb/landscape_structure.py): the five structure maps plus the two ledgers (AI 新模型台账, AI 行业信号流); never written by events" ;
    rdfs:subClassOf :Node .

:Trend a owl:Class ;
    rdfs:label "页面判断 / Trend" ;
    rdfs:comment "derived on every build from the 「最近的关键变化」 lists of the /landscape/<map>/ pages" ;
    rdfs:subClassOf :Node .

:AIApp a owl:Class ;
    rdfs:label "App / App" ;
    rdfs:comment "AppWatch registry (read-only here: new Apps are added in AppWatch/registry.tsv first)" ;
    rdfs:subClassOf :Node .

:Layer a owl:Class ;
    rdfs:label "层 / 阶段 / Layer" ;
    rdfs:comment "derived on every build from the /landscape/<map>/ pages (graph/kb/landscape_structure.py): one node per layer of a structure map, per category of the model ledger and per category of the signal ledger; never written by events" ;
    rdfs:subClassOf :Node .

:Model a owl:Class ;
    rdfs:label "模型 / Model" ;
    rdfs:comment "landscape/ai-models/models.json (the AI 新模型台账); developers are resolved through dev_alias" ;
    rdfs:subClassOf :Node .

:Event a owl:Class ;
    rdfs:label "事件 / Event" ;
    rdfs:comment "upsert_node events (something that happened: an incident, a public statement, a hearing, a regulatory action, a financing wave, a controversy …)" ;
    rdfs:subClassOf :Node .

:Instrument a owl:Class ;
    rdfs:label "文件 / 规则 / Instrument" ;
    rdfs:comment "upsert_node events (Landscape cards that are a written, citable artefact: a law, treaty, standard, framework, case, report, paper …)" ;
    rdfs:subClassOf :Node .

:Node a owl:Class ;
    rdfs:label "节点 / Node" ;
    rdfs:comment "Root class of everything the library holds a node for." .

:Organization a owl:Class ;
    rdfs:label "机构 / Organization" ;
    rdfs:comment "Graph/kb/orgs.tsv plus upsert_org events; NEO LAB / lab-watch profile pages hang on it as `profile`" ;
    rdfs:subClassOf :Node .

