@agenticprimitives/ontology 1.0.0-alpha.20 → 1.0.0-alpha.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cbox/interaction-shapes.shacl.ttl +218 -0
- package/cbox/interaction-vocabulary.ttl +31 -28
- package/dist/artifacts.d.ts +3 -3
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +10 -1
- package/dist/artifacts.js.map +1 -1
- package/dist/index.d.ts +98 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +125 -16
- package/dist/index.js.map +1 -1
- package/mappings/collaboration-crosswalk-messaging.ttl +3 -3
- package/mappings/collaboration-crosswalk-protocols.ttl +6 -3
- package/mappings/commerce-engagement-crosswalk.ttl +83 -0
- package/package.json +1 -1
- package/tbox/agent-resolution.ttl +296 -0
- package/tbox/engagement.ttl +349 -0
- package/tbox/intents.ttl +2 -2
- package/tbox/interaction.ttl +284 -0
- package/tbox/messaging.ttl +7 -7
- package/tbox/fabric.ttl +0 -59
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
# T-box — intent engagement vocabulary (spec 336; design input: agentic-trust §20b–§20e).
|
|
2
|
+
#
|
|
3
|
+
# THE GAP THIS MODULE OWNS: discovery ends with "this provider appears relevant"; fulfillment
|
|
4
|
+
# begins with "an authorized provider is performing the work". Skipping the middle is the single
|
|
5
|
+
# most common mistake in current agent registries and brokers — candidate found → invoke candidate.
|
|
6
|
+
# A discovery result does NOT say "this provider has read this exact intent and agrees to fulfil
|
|
7
|
+
# it on these terms". Different claims, by different parties, and only the second is something a
|
|
8
|
+
# principal can sensibly authorize.
|
|
9
|
+
#
|
|
10
|
+
# THE SPINE, END TO END (nine of the ten steps grant nothing):
|
|
11
|
+
# apint:Intent canonical, principal-owned — grants NOTHING
|
|
12
|
+
# -> apeng:DiscoveryProjection MINIMIZED view, only what finding needs — grants NOTHING
|
|
13
|
+
# -> apdisc:CandidateQuery the citable question — grants NOTHING
|
|
14
|
+
# -> apdisc:MatchCandidate a RESOLVER'S ASSERTION, not a fact — grants NOTHING
|
|
15
|
+
# -> apeng:EngagementProbe / apeng:EngagementResponse pre-task — grants NOTHING
|
|
16
|
+
# -> apeng:FulfillmentOffer the provider's commitment — commits, does NOT authorize
|
|
17
|
+
# -> apeng:Mandate the principal's authorization — GRANTS, bounded
|
|
18
|
+
# -> apeng:ExecutionCredential short-lived attenuation — the wire artifact
|
|
19
|
+
# -> apful:Task the work — grants NOTHING
|
|
20
|
+
# -> apeng:FulfillmentReceipt signed evidence — binds the digests
|
|
21
|
+
#
|
|
22
|
+
# WHY EACH SEPARATION EARNS ITS KEEP:
|
|
23
|
+
# Intent vs DiscoveryProjection — the intent holds identity, address, payment limits and
|
|
24
|
+
# relationships. Finding a provider needs almost none of that. Broadcasting the whole intent
|
|
25
|
+
# to every candidate is a privacy leak dressed as a search.
|
|
26
|
+
# MatchCandidate vs truth — a resolver ranked something: a claim BY the resolver, with
|
|
27
|
+
# provenance. A vector score must never decide who receives sensitive data.
|
|
28
|
+
# apdisc:Offering vs FulfillmentOffer — "we generally provide this" is a capability claim;
|
|
29
|
+
# "we will fulfil THIS intent on THESE terms until THIS time" is a commitment. Registries
|
|
30
|
+
# publish the first and act as if they had the second.
|
|
31
|
+
# Offer vs Mandate — the provider commits; the PRINCIPAL authorizes. Two parties, two artifacts.
|
|
32
|
+
# Mandate vs ExecutionCredential — the durable authority record stays home; a short-lived
|
|
33
|
+
# attenuation goes on the wire, so a leaked credential expires while the authority survives.
|
|
34
|
+
#
|
|
35
|
+
# A fulfillment apful:Task is created ONLY AFTER: the intent is understood, an acceptable offer
|
|
36
|
+
# exists, the mandate is present and unexpired, and trust/policy have passed.
|
|
37
|
+
#
|
|
38
|
+
# ── W0 SUBSET (the coordination.ttl rule) ────────────────────────────────────────────────────────
|
|
39
|
+
# This module declares EXACTLY the spec-336 chain artifacts + the probe's three axes + the spec-337
|
|
40
|
+
# offer algebra (abstract Offer, StandingOffer, the cart edge) — the classes the specs' normative
|
|
41
|
+
# sections and the wave-1 package will reference. The REST of the spec-336/337 vocabulary
|
|
42
|
+
# (ClarificationMode, HumanInteractionChannel, EvaluationEffect, QuestionSet,
|
|
43
|
+
# IntentAmendmentProposal, FulfillmentAgreement, state codelists, QualificationStage,
|
|
44
|
+
# DiscoverySignalKind, auction/cart-item/refund codelists, SHACL shapes) is SPECIFIED but NOT
|
|
45
|
+
# declared here: vocabulary minted ahead of a reader is a named mistake. The package wave EXTENDS
|
|
46
|
+
# this file. Marketplace words (listing, cart, bid, auction) are PROJECTIONS of these classes
|
|
47
|
+
# (spec 337 §2), never classes of their own.
|
|
48
|
+
|
|
49
|
+
@prefix apeng: <https://agenticprimitives.dev/ns/engagement#> .
|
|
50
|
+
@prefix apint: <https://agenticprimitives.dev/ns/intent#> .
|
|
51
|
+
@prefix apdisc: <https://agenticprimitives.dev/ns/discovery#> .
|
|
52
|
+
@prefix apful: <https://agenticprimitives.dev/ns/fulfillment#> .
|
|
53
|
+
@prefix apdel: <https://agenticprimitives.dev/ns/delegation#> .
|
|
54
|
+
@prefix apsit: <https://agenticprimitives.dev/ns/situation#> .
|
|
55
|
+
@prefix ap: <https://agenticprimitives.dev/ns/core#> .
|
|
56
|
+
@prefix prov: <http://www.w3.org/ns/prov#> .
|
|
57
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
58
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#> .
|
|
59
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
60
|
+
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
|
|
61
|
+
|
|
62
|
+
apeng: a owl:Ontology ;
|
|
63
|
+
rdfs:label "Agentic Primitives — intent engagement ontology (spec 336 W0 subset)" ;
|
|
64
|
+
owl:versionInfo "0.1.0" ;
|
|
65
|
+
rdfs:comment "Pre-task provider qualification: the artifacts between a discovery match and an authorized fulfillment task — intent projections, engagement probes and responses, fulfillment offers, mandates, execution credentials, receipts. Runtime record shapes land in @agenticprimitives/intent-engagement (spec 336 §8)." ;
|
|
66
|
+
skos:scopeNote "PRE-TASK plane between discovery (apdisc:) and fulfillment (apful:). AN ENGAGEMENT PROBE IS A COMMUNICATIVE ACT ABOUT AN INTENT — not the intent, not a task, not authorization. Of the whole chain only apeng:Mandate grants authority (a per-intent projection of a standing apdel:Delegation, never wider); apeng:FulfillmentOffer commits the provider but authorizes nothing; everything else is description or evidence. Engagement facts (willingness, terms, price, availability NOW) are per-viewer state and NEVER enter the public discovery KB (ADR-0040)." .
|
|
67
|
+
|
|
68
|
+
# ─── The projection ladder: disclosure widens in steps, never by accident ────────────────────────
|
|
69
|
+
|
|
70
|
+
apeng:IntentProjection a owl:Class ;
|
|
71
|
+
rdfs:subClassOf prov:Entity ;
|
|
72
|
+
rdfs:label "Intent Projection" ;
|
|
73
|
+
rdfs:comment "A PURPOSE- AND AUDIENCE-BOUND view derived from a canonical apint:Intent. Disclosure widens in three deliberate steps — discovery (broadcast, minimal), engagement (one named candidate, enough to quote), execution (the selected provider, released only once a mandate exists). Each carries its own digest, and THE OFFER BINDS TO THE PROJECTION IT REVIEWED (apeng:basisOfOffer), not to undisclosed facts in the intent: a provider that never saw a field cannot be held to it, and cannot claim it either. Derived, never edited: change the intent and the projection is regenerated." .
|
|
74
|
+
|
|
75
|
+
apeng:DiscoveryProjection a owl:Class ;
|
|
76
|
+
rdfs:subClassOf apeng:IntentProjection ;
|
|
77
|
+
rdfs:label "Discovery Projection" ;
|
|
78
|
+
rdfs:comment "The MINIMIZED broadcast view — intent type, coarse region, time window, hard requirements, price ceiling. NEVER the whole intent: exact address, identity, payment credentials are disclosed LATER, to ONE selected provider, under a mandate. apeng:projectionWithholds records what was held back, so minimization is auditable rather than merely claimed." .
|
|
79
|
+
|
|
80
|
+
apeng:EngagementProjection a owl:Class ;
|
|
81
|
+
rdfs:subClassOf apeng:IntentProjection ;
|
|
82
|
+
rdfs:label "Engagement Projection" ;
|
|
83
|
+
rdfs:comment "Audience-bound to ONE candidate and sufficient to judge feasibility or quote — a postal area rather than an address. More than discovery saw, less than execution needs, authorized for that provider alone. THE NORMATIVE BASIS OF ANY OFFER IT RECEIVES." .
|
|
84
|
+
|
|
85
|
+
apeng:ExecutionProjection a owl:Class ;
|
|
86
|
+
rdfs:subClassOf apeng:IntentProjection ;
|
|
87
|
+
rdfs:label "Execution Projection" ;
|
|
88
|
+
rdfs:comment "Released ONLY after an offer is selected and the mandate exists — exact locations, contact channel, approved payment, operational instructions. The mandate authorizes exactly the fields the offer named as required inputs, and nothing else." .
|
|
89
|
+
|
|
90
|
+
# ─── Campaign above conversation ─────────────────────────────────────────────────────────────────
|
|
91
|
+
|
|
92
|
+
apeng:EngagementCampaign a owl:Class ;
|
|
93
|
+
rdfs:subClassOf apsit:Situation ;
|
|
94
|
+
rdfs:label "Engagement Campaign" ;
|
|
95
|
+
rdfs:comment "ONE INTENT, MANY CANDIDATES — the aggregate above the per-candidate conversations. Owns the intent version and digest being resolved, the candidate matches probed, concurrency and deadline, the disclosure budget (apeng:maxCandidates — every probe is a disclosure to one more party), how many offers are wanted, and the final selection. Without it a single provider conversation quietly becomes the cross-provider coordination object, and 'which offers did we compare, and why this one?' has nowhere to live." .
|
|
96
|
+
|
|
97
|
+
apeng:EngagementSituation a owl:Class ;
|
|
98
|
+
rdfs:subClassOf apsit:Situation ;
|
|
99
|
+
rdfs:label "Engagement Situation" ;
|
|
100
|
+
rdfs:comment "ONE requester–candidate conversation about one intent, before any task exists — probes sent, clarifications asked, offers made or declined. A Situation because it holds while the parties negotiate, and it may end with no task at all. Transport correlators (A2A contextId) are per-provider opaque state stored against this, never canonical ids. CONTRAST apful:Task, which starts only once an acceptable offer and a mandate exist." .
|
|
101
|
+
|
|
102
|
+
# ─── The probe, its three independent axes, and the answers ─────────────────────────────────────
|
|
103
|
+
|
|
104
|
+
apeng:EngagementObjective a owl:Class ;
|
|
105
|
+
rdfs:label "Engagement objective" ;
|
|
106
|
+
rdfs:comment "AXIS A — the result a probe asks for: availability-check | accept-or-decline | indicative-proposal | firm-offer | negotiation. Only firm-offer asks for something acceptance-capable. 'direct' is deliberately renamed accept-or-decline: it read as 'begin execution', the one thing a probe must never do." .
|
|
107
|
+
|
|
108
|
+
apeng:InteractionPolicy a owl:Class ;
|
|
109
|
+
rdfs:subClassOf apsit:Description ;
|
|
110
|
+
rdfs:label "Interaction Policy" ;
|
|
111
|
+
rdfs:comment "AXIS B — the channels a requester will permit during an engagement (clarification mode, human-interaction channels) and the round limit. A Description: it constrains the conversation without being part of it. structured-only clarification is the safe default — the provider asks for named claims instead of its model asking open questions against a private vault." .
|
|
112
|
+
|
|
113
|
+
apeng:ProbeProcessingModel a owl:Class ;
|
|
114
|
+
rdfs:label "Probe processing model" ;
|
|
115
|
+
rdfs:comment "AXIS C — how the answer arrives: direct-message | evaluation-task | reciprocal-a2a. Business semantics separated from timing and transport, so a provider that needs ten minutes to price something is not forced to look like one that declined." .
|
|
116
|
+
|
|
117
|
+
apeng:EngagementProbe a owl:Class ;
|
|
118
|
+
rdfs:subClassOf prov:Entity ;
|
|
119
|
+
rdfs:label "Engagement Probe" ;
|
|
120
|
+
rdfs:comment "The pre-task question put to a candidate: here is a minimized projection of an intent — will you take it, and on what terms? Carries the projection (NEVER the canonical intent), the intent digest, the objective, the interaction policy, acceptable processing models, a reply-by deadline and a single-use nonce. DELIBERATELY NOT A TASK: creating a business task to ask whether work is acceptable pollutes the provider's lifecycle with speculation. Lineage: FIPA cfp; TMF921 ProbeIntent; ETSI ZSM feasibility check (crosswalk doc)." .
|
|
121
|
+
|
|
122
|
+
apeng:EngagementAcknowledgement a owl:Class ;
|
|
123
|
+
rdfs:subClassOf prov:Entity ;
|
|
124
|
+
rdfs:label "Engagement Acknowledgement" ;
|
|
125
|
+
rdfs:comment "'I received the probe and will evaluate it' — AND NOTHING MORE. Its own artifact rather than a seventh response kind, because an acknowledgement is not an answer, and a requester that treats it as one has mistaken receipt for acceptance. Names the processing model chosen and when a real response is expected." .
|
|
126
|
+
|
|
127
|
+
apeng:EngagementResponse a owl:Class ;
|
|
128
|
+
rdfs:subClassOf prov:Entity ;
|
|
129
|
+
rdfs:label "Engagement Response" ;
|
|
130
|
+
rdfs:comment "What a candidate answers a probe with, typed by apeng:EngagementResponseKind: an offer, a request for clarification, a demand that the human enter its own UX, a referral elsewhere, a decline, or temporarily-unavailable. EVERY ONE IS A LEGITIMATE, RECORDABLE OUTCOME — a resolver that can only handle 'yes' silently treats 'not right now' as 'no such provider'." .
|
|
131
|
+
|
|
132
|
+
apeng:EngagementResponseKind a owl:Class ;
|
|
133
|
+
rdfs:label "Engagement response kind" ;
|
|
134
|
+
rdfs:comment "offer | needs-clarification | human-ux-required | referral | decline | temporarily-unavailable. The last two are NOT failures — a decline is a fact about fit (FIPA refuse ≠ failure), and temporarily-unavailable is a fact about time that must not be cached as absence. A response kind is an EVENT, recorded off the engagement state machine." .
|
|
135
|
+
|
|
136
|
+
apeng:EngagementEvaluationTask a owl:Class ;
|
|
137
|
+
rdfs:subClassOf apful:Task ;
|
|
138
|
+
rdfs:label "Engagement Evaluation Task" ;
|
|
139
|
+
rdfs:comment "A restricted task for work that PRECEDES commitment — feasibility, pricing, policy. HARD LIMITS: must not be read as acceptance, must not exercise a fulfillment mandate, must not perform the requested outcome. It produces an apeng:EngagementResponse or a technical failure. A DECLINE IS A SUCCESSFUL COMPLETION — the evaluation worked; its business conclusion was no. Evaluation side effects (read-only / temporary-hold / billable) must be declared: a provider that reserves inventory to quote has taken an action nobody authorized." .
|
|
140
|
+
|
|
141
|
+
# ─── Offers: commitment without authority (spec 337 — one offer algebra, both arenas) ────────────
|
|
142
|
+
# THE TWO-FLIP PRINCIPLE (spec 337 §1.1): intent workflows and commerce marketplaces are ONE
|
|
143
|
+
# algebra with exactly two parameters flipped — WHO MOVES FIRST (intent-first: requester probes,
|
|
144
|
+
# provider quotes; offer-first: a standing offer pre-exists and a later intent finds it) and WHICH
|
|
145
|
+
# WAY THE RESOURCE FLOWS (apint:GiveIntent/ReceiveIntent). BOTH FLIPS ARE DATA ON RECORDS, NEVER
|
|
146
|
+
# ARCHITECTURE: one abstract Offer, no arena-specific class trees, and NO FLIP EVER FLIPS
|
|
147
|
+
# AUTHORITY — only the principal's Mandate grants, in either arena, in either direction.
|
|
148
|
+
# Marketplace words are PROJECTIONS, never classes: a "listing" IS a StandingOffer; a "cart" IS a
|
|
149
|
+
# FulfillmentOffer composed from StandingOffers; a "bid" is a StandingOffer with direction
|
|
150
|
+
# flipped; an "auction" is an EngagementCampaign profile. The ADR-0051 move, applied to commerce.
|
|
151
|
+
|
|
152
|
+
apeng:Offer a owl:Class ;
|
|
153
|
+
rdfs:subClassOf prov:Entity ;
|
|
154
|
+
rdfs:label "Offer" ;
|
|
155
|
+
rdfs:comment "THE CANONICAL COMMERCE NOUN (spec 337): a SIGNED, EXPIRING, DIGEST-PINNED, ACCEPTANCE-CAPABLE commitment. Abstract — concrete offers are either per-intent (apeng:FulfillmentOffer, the workflow arena) or standing (apeng:StandingOffer, the marketplace arena). The arenas differ ONLY by the two-flip parameters (who moves first; resource direction) — data on records, never architecture (spec 337 §1.1). ISSUED OFFERS ARE IMMUTABLE: a change mints a superseding revision, and an acceptance pins the revision digest it accepted. An offer COMMITS its maker; it never authorizes — authority is the principal's apeng:Mandate, whichever arena. CONTRAST apeng:IndicativeFulfillmentProposal, which is deliberately NOT under this class: an estimate and an acceptance-capable instrument must not be confusable at a glance." .
|
|
156
|
+
|
|
157
|
+
apeng:IndicativeFulfillmentProposal a owl:Class ;
|
|
158
|
+
rdfs:subClassOf prov:Entity ;
|
|
159
|
+
rdfs:label "Indicative Fulfillment Proposal" ;
|
|
160
|
+
rdfs:comment "A NON-BINDING estimate — likely terms, probable price, an approximate window. Its own class OUTSIDE the apeng:Offer hierarchy, because an acceptance-capable instrument and an estimate must not be confusable at a glance: only apeng:Offer subclasses can be accepted." .
|
|
161
|
+
|
|
162
|
+
apeng:StandingOffer a owl:Class ;
|
|
163
|
+
rdfs:subClassOf apeng:Offer ;
|
|
164
|
+
rdfs:label "Standing Offer" ;
|
|
165
|
+
rdfs:comment "An acceptance-capable commitment that PRECEDES any specific intent — 'anyone matching these conditions may take THIS resource at THESE terms until expiry'. The marketplace primitive: a listing IS a StandingOffer with broadcast audience; a buyer-side bid is the same class with direction flipped (the Seaport lesson — offer[]/consideration[] are one order struct). A Dutch auction is a StandingOffer repriced by superseding revisions; first acceptance wins. THE THREE-WAY DISTINCTION THAT KEEPS THE ALGEBRA HONEST: apdisc:Offering says 'we generally provide this' (a claim, NOT acceptance-capable); a StandingOffer is take-it-or-leave-it acceptable; a FulfillmentOffer is a commitment about ONE intent. Registries conflate the first two; brokers conflate all three." .
|
|
166
|
+
|
|
167
|
+
apeng:FulfillmentOffer a owl:Class ;
|
|
168
|
+
rdfs:subClassOf apeng:Offer ;
|
|
169
|
+
rdfs:label "Fulfillment Offer" ;
|
|
170
|
+
rdfs:comment "A provider's SIGNED, EXPIRING, CONDITIONAL commitment to fulfil ONE specific intent on stated terms — scope accepted, assumptions and exclusions, required inputs (the fields the projection withheld, now NAMED so the mandate can authorize exactly them and no more), expected artifacts, price, jurisdiction, data handling, the mandate requirement, revision. THE ARTIFACT MOST REGISTRIES ARE MISSING. A merchant CART is this class: standing per-item terms composed (apeng:composesOffer) into one intent-bound, digest-pinned, acceptance-capable commitment — exact items, price, tax, shipping (the UCP cart / AP2 Cart-Mandate target: what you see is what you pay for). CONTRAST apdisc:Offering, the standing advertisement: that is a capability claim, this is a commitment about one intent, and treating the first as the second is how brokers invoke providers that never agreed to the job. Still not authority: the provider commits here; the PRINCIPAL authorizes by apeng:Mandate. On acceptance the pair flows into the spine's agreement layer (apint:Commitment → apagr:)." .
|
|
171
|
+
|
|
172
|
+
apeng:OfferSelection a owl:Class ;
|
|
173
|
+
rdfs:subClassOf prov:Entity ;
|
|
174
|
+
rdfs:label "Offer Selection" ;
|
|
175
|
+
rdfs:comment "The campaign's decision that one offer won the comparison, with the reasons AND the offers it beat. Local and private: the provider learns of it only through an apeng:OfferAcceptance, and the losers are recorded rather than silently dropped — a comparison must be reviewable, not taken on trust." .
|
|
176
|
+
|
|
177
|
+
apeng:OfferAcceptance a owl:Class ;
|
|
178
|
+
rdfs:subClassOf prov:Entity ;
|
|
179
|
+
rdfs:label "Offer Acceptance" ;
|
|
180
|
+
rdfs:comment "The requester's acceptance of ONE offer, pinned to that offer's digest. IT CANNOT BROADEN OR MODIFY THE TERMS — an acceptance that differs from the offer it names is a counter-proposal and belongs in a new offer revision. Separate from apeng:OfferSelection, the private comparison decision." .
|
|
181
|
+
|
|
182
|
+
# ─── The authority seam: requirement → mandate → wire credential ─────────────────────────────────
|
|
183
|
+
|
|
184
|
+
apeng:MandateRequirement a owl:Class ;
|
|
185
|
+
rdfs:subClassOf apsit:Description ;
|
|
186
|
+
rdfs:label "Mandate Requirement" ;
|
|
187
|
+
rdfs:comment "The authority that MUST EXIST before work proceeds — actor, audience, permitted actions, constraints, ceilings, the intent digest it is bound to. Expressed in OAuth RAR (RFC 9396) shape: a collision-resistant authorization-detail type, locations, actions, limits — and RFC 9396 is explicit that NO UNIVERSAL narrower-than algorithm exists, so each type needs its own subset handler (implemented against delegation + tool-policy). A Description: IT GRANTS NOTHING — it is the proposal a mandate is derived FROM, which is exactly why an offer can state its requirements openly." .
|
|
188
|
+
|
|
189
|
+
apeng:Mandate a owl:Class ;
|
|
190
|
+
rdfs:subClassOf prov:Entity ;
|
|
191
|
+
rdfs:label "Mandate" ;
|
|
192
|
+
rdfs:comment "The principal's APPROVED, BOUNDED, EXPIRING authorization of one selected offer — the FIRST artifact in the chain that grants anything. A per-intent PROJECTION of a standing apdel:Delegation (apeng:derivedFromDelegation): it can never exceed it, and it binds BY DIGEST to the intent, the engagement projection disclosed, and the accepted offer — so a captured mandate cannot be replayed against a different intent, and a materially changed intent or offer mints a SUCCESSOR mandate rather than silently widening this one. CONTRAST apeng:ExecutionCredential: A MANDATE IS NOT AN ACCESS TOKEN — the durable authority record stays home. UX RULE: the approval surface shows the EFFECTIVE AUTHORITY (actions, audience, limits, validity window), never the friendly sentence." .
|
|
193
|
+
|
|
194
|
+
apeng:ExecutionCredential a owl:Class ;
|
|
195
|
+
rdfs:subClassOf prov:Entity ;
|
|
196
|
+
rdfs:label "Execution Credential" ;
|
|
197
|
+
rdfs:comment "A short-lived, ATTENUATED credential derived from a mandate (apeng:derivedFromMandate) and presented at call time — THE ONLY THING THAT GOES ON THE WIRE. It can only narrow what the mandate allows, never widen it, and it expires long before the mandate does: separating them is what makes a leaked wire credential expire while the authority survives. Same discipline as ADR-0041's ingress-envelope rule — the gates re-verify against the substrate at the moment of use; the credential is never trusted AS the grant." .
|
|
198
|
+
|
|
199
|
+
# ─── Evidence ────────────────────────────────────────────────────────────────────────────────────
|
|
200
|
+
|
|
201
|
+
apeng:FulfillmentReceipt a owl:Class ;
|
|
202
|
+
rdfs:subClassOf prov:Entity ;
|
|
203
|
+
rdfs:label "Fulfillment Receipt" ;
|
|
204
|
+
rdfs:comment "The SIGNED record of what actually happened, binding intent digest, offer digest, mandate, executing agent, action, outcome status, evidence references and a timestamp. A BROWSER REDIRECT IS NOT A RECEIPT, and neither is a successful poll: both prove a surface responded, not that authorized work occurred. Sibling of apvr:VerificationReceipt (which evidences a verification activity); this binds the ENGAGEMENT chain end to end and is what a third party who was not present can check." .
|
|
205
|
+
|
|
206
|
+
# ─── Properties: projections ─────────────────────────────────────────────────────────────────────
|
|
207
|
+
|
|
208
|
+
apeng:projectionOf a owl:ObjectProperty ; rdfs:domain apeng:IntentProjection ; rdfs:range apint:Intent ;
|
|
209
|
+
rdfs:label "projection of" ; rdfs:comment "The canonical intent this view derives from. Derived, never edited independently." .
|
|
210
|
+
apeng:projectionAudience a owl:ObjectProperty ; rdfs:domain apeng:IntentProjection ; rdfs:range ap:Agent ;
|
|
211
|
+
rdfs:label "projection audience" ; rdfs:comment "WHO this view was prepared for. An audience-less projection is a broadcast, whatever it was intended as." .
|
|
212
|
+
apeng:projectionPurpose a owl:DatatypeProperty ; rdfs:domain apeng:IntentProjection ; rdfs:range xsd:string ;
|
|
213
|
+
rdfs:label "projection purpose" ; rdfs:comment "What disclosing this much is FOR. Purpose-binding is what makes reuse in another context a violation rather than a convenience." .
|
|
214
|
+
apeng:projectionDigest a owl:DatatypeProperty ; rdfs:domain apeng:IntentProjection ; rdfs:range xsd:string ;
|
|
215
|
+
rdfs:label "projection digest" ; rdfs:comment "Digest over exactly what was shown. What an offer binds to." .
|
|
216
|
+
apeng:projectionWithholds a owl:DatatypeProperty ; rdfs:domain apeng:IntentProjection ; rdfs:range xsd:string ;
|
|
217
|
+
rdfs:label "projection withholds" ; rdfs:comment "A field deliberately NOT exposed. Recorded so minimization is auditable and a later disclosure under mandate can be checked against it. The detailed redaction manifest stays local — naming omitted categories on the wire can itself leak." .
|
|
218
|
+
|
|
219
|
+
# ─── Properties: campaign + engagement ───────────────────────────────────────────────────────────
|
|
220
|
+
|
|
221
|
+
apeng:campaignForIntent a owl:ObjectProperty ; rdfs:domain apeng:EngagementCampaign ; rdfs:range apint:Intent ;
|
|
222
|
+
rdfs:label "campaign for intent" ; rdfs:comment "The one intent version this campaign resolves." .
|
|
223
|
+
apeng:campaignCandidate a owl:ObjectProperty ; rdfs:domain apeng:EngagementCampaign ; rdfs:range apdisc:MatchCandidate ;
|
|
224
|
+
rdfs:label "campaign candidate" ; rdfs:comment "A discovery match this campaign chose to probe — the seam from apdisc:." .
|
|
225
|
+
apeng:campaignEngagement a owl:ObjectProperty ; rdfs:domain apeng:EngagementCampaign ; rdfs:range apeng:EngagementSituation ;
|
|
226
|
+
rdfs:label "campaign engagement" ; rdfs:comment "One per candidate. The campaign compares across them; each conversation knows only its own provider." .
|
|
227
|
+
apeng:campaignDeadline a owl:DatatypeProperty ; rdfs:domain apeng:EngagementCampaign ; rdfs:range xsd:dateTime ;
|
|
228
|
+
rdfs:label "campaign deadline" ; rdfs:comment "When comparison closes, whether or not every candidate answered." .
|
|
229
|
+
apeng:maxCandidates a owl:DatatypeProperty ; rdfs:domain apeng:EngagementCampaign ; rdfs:range xsd:integer ;
|
|
230
|
+
rdfs:label "max candidates" ; rdfs:comment "How many candidates may be probed — a DISCLOSURE BUDGET, not a performance knob: every probe is a disclosure to one more party." .
|
|
231
|
+
apeng:offersWanted a owl:DatatypeProperty ; rdfs:domain apeng:EngagementCampaign ; rdfs:range xsd:integer ;
|
|
232
|
+
rdfs:label "offers wanted" ; rdfs:comment "How many offers make a comparison worth deciding on." .
|
|
233
|
+
apeng:campaignSelected a owl:ObjectProperty ; rdfs:domain apeng:EngagementCampaign ; rdfs:range apeng:OfferSelection ;
|
|
234
|
+
rdfs:label "campaign selected" ; rdfs:comment "The winning selection, with its reasons and the offers it beat." .
|
|
235
|
+
apeng:withinCampaign a owl:ObjectProperty ; rdfs:domain apeng:EngagementSituation ; rdfs:range apeng:EngagementCampaign ;
|
|
236
|
+
rdfs:label "within campaign" ; rdfs:comment "The comparison this conversation belongs to." .
|
|
237
|
+
apeng:engagementWith a owl:ObjectProperty ; rdfs:domain apeng:EngagementSituation ; rdfs:range ap:Agent ;
|
|
238
|
+
rdfs:label "engagement with" ; rdfs:comment "The candidate provider being engaged." .
|
|
239
|
+
apeng:withinEngagement a owl:ObjectProperty ; rdfs:range apeng:EngagementSituation ;
|
|
240
|
+
rdfs:label "within engagement" ; rdfs:comment "The conversation a probe, response or offer belongs to." .
|
|
241
|
+
|
|
242
|
+
# ─── Properties: probe + response ────────────────────────────────────────────────────────────────
|
|
243
|
+
|
|
244
|
+
apeng:probesOffering a owl:ObjectProperty ; rdfs:domain apeng:EngagementProbe ; rdfs:range apdisc:Offering ;
|
|
245
|
+
rdfs:label "probes offering" ; rdfs:comment "The standing offering being asked. The offering, not merely the agent — an agent may expose several, and only one may fit." .
|
|
246
|
+
apeng:probeCarriesProjection a owl:ObjectProperty ; rdfs:domain apeng:EngagementProbe ; rdfs:range apeng:IntentProjection ;
|
|
247
|
+
rdfs:label "probe carries projection" ; rdfs:comment "The MINIMIZED view sent — never the canonical intent." .
|
|
248
|
+
apeng:engagementObjective a owl:ObjectProperty ; rdfs:domain apeng:EngagementProbe ; rdfs:range apeng:EngagementObjective ;
|
|
249
|
+
rdfs:label "engagement objective" ; rdfs:comment "AXIS A — what result the requester seeks. Independent of channels (AXIS B) and delivery (AXIS C): one enumeration doing three jobs made 'I will negotiate, but only after structured clarification, and identity verification happens in my own UX' unsayable." .
|
|
250
|
+
apeng:probeInteractionPolicy a owl:ObjectProperty ; rdfs:domain apeng:EngagementProbe ; rdfs:range apeng:InteractionPolicy ;
|
|
251
|
+
rdfs:label "probe interaction policy" ; rdfs:comment "AXIS B — the channels permitted in reply, and the round limit." .
|
|
252
|
+
apeng:acceptableProcessingModel a owl:ObjectProperty ; rdfs:domain apeng:EngagementProbe ; rdfs:range apeng:ProbeProcessingModel ;
|
|
253
|
+
rdfs:label "acceptable processing model" ; rdfs:comment "AXIS C — the delivery shapes the requester can handle." .
|
|
254
|
+
apeng:replyBy a owl:DatatypeProperty ; rdfs:domain apeng:EngagementProbe ; rdfs:range xsd:dateTime ;
|
|
255
|
+
rdfs:label "reply by" ; rdfs:comment "After this an answer cannot produce an acceptable offer." .
|
|
256
|
+
apeng:probeNonce a owl:DatatypeProperty ; rdfs:domain apeng:EngagementProbe ; rdfs:range xsd:string ;
|
|
257
|
+
rdfs:label "probe nonce" ; rdfs:comment "Single-use correlator — what makes a reciprocal callback matchable and a replay rejectable." .
|
|
258
|
+
apeng:acknowledgesProbe a owl:ObjectProperty ; rdfs:domain apeng:EngagementAcknowledgement ; rdfs:range apeng:EngagementProbe ;
|
|
259
|
+
rdfs:label "acknowledges probe" ; rdfs:comment "The probe received — receipt, not acceptance." .
|
|
260
|
+
apeng:respondsToProbe a owl:ObjectProperty ; rdfs:domain apeng:EngagementResponse ; rdfs:range apeng:EngagementProbe ;
|
|
261
|
+
rdfs:label "responds to probe" ; rdfs:comment "The probe answered." .
|
|
262
|
+
apeng:engagementResponseKind a owl:ObjectProperty ; rdfs:domain apeng:EngagementResponse ; rdfs:range apeng:EngagementResponseKind ;
|
|
263
|
+
rdfs:label "engagement response kind" ; rdfs:comment "Which of the six answers this is." .
|
|
264
|
+
apeng:responseCarriesOffer a owl:ObjectProperty ; rdfs:domain apeng:EngagementResponse ; rdfs:range apeng:FulfillmentOffer ;
|
|
265
|
+
rdfs:label "response carries offer" ; rdfs:comment "The offer an 'offer' response delivers." .
|
|
266
|
+
apeng:referredTo a owl:ObjectProperty ; rdfs:domain apeng:EngagementResponse ; rdfs:range apdisc:Offering ;
|
|
267
|
+
rdfs:label "referred to" ; rdfs:comment "Where a referral points. A decline that names a better fit is more useful than silence — but a referral is NEW DISCOVERY EVIDENCE: re-resolve, re-qualify, own engagement. Never followed automatically." .
|
|
268
|
+
apeng:evaluationFor a owl:ObjectProperty ; rdfs:domain apeng:EngagementEvaluationTask ; rdfs:range apeng:EngagementProbe ;
|
|
269
|
+
rdfs:label "evaluation for" ; rdfs:comment "The probe under evaluation." .
|
|
270
|
+
apeng:producesResponse a owl:ObjectProperty ; rdfs:subPropertyOf prov:generated ; rdfs:domain apeng:EngagementEvaluationTask ; rdfs:range apeng:EngagementResponse ;
|
|
271
|
+
rdfs:label "produces response" ; rdfs:comment "The terminal artifact. A decline here is a SUCCESSFUL completion." .
|
|
272
|
+
|
|
273
|
+
# ─── Properties: offer + acceptance ──────────────────────────────────────────────────────────────
|
|
274
|
+
|
|
275
|
+
apeng:offeredBy a owl:ObjectProperty ; rdfs:subPropertyOf prov:wasAttributedTo ; rdfs:domain apeng:Offer ; rdfs:range ap:Agent ;
|
|
276
|
+
rdfs:label "offered by" ; rdfs:comment "The party committing — the SA whose signature the offer carries. Seller on a listing, buyer on a bid: the class is direction-neutral; the participants are explicit." .
|
|
277
|
+
apeng:offerAgainstOffering a owl:ObjectProperty ; rdfs:domain apeng:FulfillmentOffer ; rdfs:range apdisc:Offering ;
|
|
278
|
+
rdfs:label "offer against offering" ; rdfs:comment "The standing offering this concrete offer instantiates." .
|
|
279
|
+
apeng:basisOfOffer a owl:ObjectProperty ; rdfs:domain apeng:FulfillmentOffer ; rdfs:range apeng:IntentProjection ;
|
|
280
|
+
rdfs:label "basis of offer" ; rdfs:comment "THE PROJECTION THE PROVIDER ACTUALLY REVIEWED — the normative basis of the commitment. The offer may also cite the intent's id, version and digest, but that does NOT mean the provider saw the intent's full contents: it was shown this, and it is bound to this." .
|
|
281
|
+
apeng:offerForIntentDigest a owl:DatatypeProperty ; rdfs:domain apeng:FulfillmentOffer ; rdfs:range xsd:string ;
|
|
282
|
+
rdfs:label "offer for intent digest" ; rdfs:comment "The intent digest this offer is against. A DIGEST, so an offer cannot silently follow a materially changed intent." .
|
|
283
|
+
apeng:offerRequiredInput a owl:DatatypeProperty ; rdfs:domain apeng:FulfillmentOffer ; rdfs:range xsd:string ;
|
|
284
|
+
rdfs:label "offer required input" ; rdfs:comment "What the provider needs disclosed to proceed — the fields the projection withheld, now NAMED so the mandate can authorize exactly them and no more." .
|
|
285
|
+
apeng:offerRequiresMandate a owl:ObjectProperty ; rdfs:domain apeng:Offer ; rdfs:range apeng:MandateRequirement ;
|
|
286
|
+
rdfs:label "offer requires mandate" ; rdfs:comment "The authority the maker needs before it will act — the hinge into the mandate seam. A StandingOffer states this too (AP2's human-not-present flow: the requirement is public; the authority never is)." .
|
|
287
|
+
apeng:offerExpiry a owl:DatatypeProperty ; rdfs:domain apeng:Offer ; rdfs:range xsd:dateTime ;
|
|
288
|
+
rdfs:label "offer expiry" ; rdfs:comment "When the commitment lapses. Required on BOTH arenas: an unexpiring standing offer is an unbounded liability, not a price list." .
|
|
289
|
+
apeng:offerRevision a owl:DatatypeProperty ; rdfs:domain apeng:Offer ; rdfs:range xsd:integer ;
|
|
290
|
+
rdfs:label "offer revision" ; rdfs:comment "Issued offers are IMMUTABLE; a change increments this on a new offer that supersedes the old. A Dutch auction is nothing but this property applied to a StandingOffer on a schedule." .
|
|
291
|
+
apeng:composesOffer a owl:ObjectProperty ; rdfs:domain apeng:FulfillmentOffer ; rdfs:range apeng:StandingOffer ;
|
|
292
|
+
rdfs:label "composes offer" ; rdfs:comment "THE CART EDGE (spec 337 §2.1): a standing per-item offer this intent-bound offer assembles. Composition cannot smuggle terms — the composing offer's digest covers the composed set, and a line cannot silently differ from the standing terms it cites." .
|
|
293
|
+
apeng:supersedes a owl:ObjectProperty ;
|
|
294
|
+
rdfs:label "supersedes" ; rdfs:comment "Revision chaining for offers, mandates and intent versions — the append-only alternative to mutation." .
|
|
295
|
+
apeng:acceptsOffer a owl:ObjectProperty ; rdfs:domain apeng:OfferAcceptance ; rdfs:range apeng:Offer ;
|
|
296
|
+
rdfs:label "accepts offer" ; rdfs:comment "The one offer accepted — per-intent or standing (a fixed-price purchase is an acceptance of a StandingOffer)." .
|
|
297
|
+
apeng:acceptedOfferDigest a owl:DatatypeProperty ; rdfs:domain apeng:OfferAcceptance ; rdfs:range xsd:string ;
|
|
298
|
+
rdfs:label "accepted offer digest" ; rdfs:comment "Pins the exact REVISION accepted, so an acceptance cannot quietly attach to a revised offer — and a superseded (repriced) standing offer cannot be filled at the old price by replay." .
|
|
299
|
+
apeng:selectionChose a owl:ObjectProperty ; rdfs:domain apeng:OfferSelection ; rdfs:range apeng:Offer ;
|
|
300
|
+
rdfs:label "selection chose" ; rdfs:comment "The winning offer." .
|
|
301
|
+
apeng:selectionRejected a owl:ObjectProperty ; rdfs:domain apeng:OfferSelection ; rdfs:range apeng:Offer ;
|
|
302
|
+
rdfs:label "selection rejected" ; rdfs:comment "An offer that lost. Recorded, so a comparison can be reviewed rather than taken on trust." .
|
|
303
|
+
apeng:selectionReason a owl:DatatypeProperty ; rdfs:domain apeng:OfferSelection ; rdfs:range xsd:string ;
|
|
304
|
+
rdfs:label "selection reason" ; rdfs:comment "Why this one won." .
|
|
305
|
+
|
|
306
|
+
# ─── Properties: the authority seam ──────────────────────────────────────────────────────────────
|
|
307
|
+
|
|
308
|
+
apeng:requirementForOffer a owl:ObjectProperty ; rdfs:domain apeng:MandateRequirement ; rdfs:range apeng:Offer ;
|
|
309
|
+
rdfs:label "requirement for offer" ; rdfs:comment "The offer whose terms this authority is scoped to." .
|
|
310
|
+
apeng:authorizationDetailType a owl:DatatypeProperty ; rdfs:domain apeng:MandateRequirement ; rdfs:range xsd:anyURI ;
|
|
311
|
+
rdfs:label "authorization detail type" ; rdfs:comment "Collision-resistant authorization-detail type per RFC 9396 (OAuth RAR). No universal narrower-than algorithm exists — each type gets its own subset handler." .
|
|
312
|
+
apeng:authorizesOffer a owl:ObjectProperty ; rdfs:domain apeng:Mandate ; rdfs:range apeng:Offer ;
|
|
313
|
+
rdfs:label "authorizes offer" ; rdfs:comment "THE SEAM: the mandate by which the principal accepts this offer — a quoted FulfillmentOffer or a marketplace StandingOffer alike. Maker commits, principal authorizes — two parties, two artifacts, and the mandate is what turns an offer into work. In an auction the campaign owner never gains authority over participants: each buyer's own principal mandates its own payment." .
|
|
314
|
+
apeng:derivedFromDelegation a owl:ObjectProperty ; rdfs:domain apeng:Mandate ; rdfs:range apdel:Delegation ;
|
|
315
|
+
rdfs:label "derived from delegation" ; rdfs:comment "The standing grant this mandate projects. A mandate can never exceed it." .
|
|
316
|
+
apeng:bindsIntentDigest a owl:DatatypeProperty ; rdfs:domain apeng:Mandate ; rdfs:range xsd:string ;
|
|
317
|
+
rdfs:label "binds intent digest" ; rdfs:comment "The single intent version this mandate authorizes. The binding is what stops replay against another intent — a materially changed intent mints a SUCCESSOR mandate." .
|
|
318
|
+
apeng:mandateExpiry a owl:DatatypeProperty ; rdfs:domain apeng:Mandate ; rdfs:range xsd:dateTime ;
|
|
319
|
+
rdfs:label "mandate expiry" ; rdfs:comment "When the authority lapses regardless of use." .
|
|
320
|
+
apeng:derivedFromMandate a owl:ObjectProperty ; rdfs:domain apeng:ExecutionCredential ; rdfs:range apeng:Mandate ;
|
|
321
|
+
rdfs:label "derived from mandate" ; rdfs:comment "The authority this wire credential attenuates. Narrower always, wider never." .
|
|
322
|
+
apeng:credentialExpiry a owl:DatatypeProperty ; rdfs:domain apeng:ExecutionCredential ; rdfs:range xsd:dateTime ;
|
|
323
|
+
rdfs:label "credential expiry" ; rdfs:comment "Long before the mandate's — the leak-survivability separation." .
|
|
324
|
+
|
|
325
|
+
# ─── Properties: receipt ─────────────────────────────────────────────────────────────────────────
|
|
326
|
+
|
|
327
|
+
apeng:receiptForMandate a owl:ObjectProperty ; rdfs:domain apeng:FulfillmentReceipt ; rdfs:range apeng:Mandate ;
|
|
328
|
+
rdfs:label "receipt for mandate" ; rdfs:comment "The authority the evidenced work ran under." .
|
|
329
|
+
apeng:receiptForIntentDigest a owl:DatatypeProperty ; rdfs:domain apeng:FulfillmentReceipt ; rdfs:range xsd:string ;
|
|
330
|
+
rdfs:label "receipt for intent digest" ; rdfs:comment "The intent version the work satisfied — by digest, checkable against the mandate's binding." .
|
|
331
|
+
apeng:receiptForTask a owl:ObjectProperty ; rdfs:domain apeng:FulfillmentReceipt ; rdfs:range apful:Task ;
|
|
332
|
+
rdfs:label "receipt for task" ; rdfs:comment "The fulfillment task evidenced." .
|
|
333
|
+
apeng:receiptOutcomeStatus a owl:DatatypeProperty ; rdfs:domain apeng:FulfillmentReceipt ; rdfs:range xsd:string ;
|
|
334
|
+
rdfs:label "receipt outcome status" ; rdfs:comment "What the executing party attests happened. Attestation, not independent correctness." .
|
|
335
|
+
apeng:receiptEvidence a owl:ObjectProperty ; rdfs:domain apeng:FulfillmentReceipt ; rdfs:range prov:Entity ;
|
|
336
|
+
rdfs:label "receipt evidence" ; rdfs:comment "Artifacts, traces or attestations the receipt cites." .
|
|
337
|
+
apeng:receiptTimestamp a owl:DatatypeProperty ; rdfs:domain apeng:FulfillmentReceipt ; rdfs:range xsd:dateTime ;
|
|
338
|
+
rdfs:label "receipt timestamp" ; rdfs:comment "When the evidenced outcome was attested." .
|
|
339
|
+
|
|
340
|
+
# ─── Participants: the caller is not the principal ──────────────────────────────────────────────
|
|
341
|
+
|
|
342
|
+
apeng:requestingPrincipal a owl:ObjectProperty ; rdfs:range ap:Agent ;
|
|
343
|
+
rdfs:label "requesting principal" ; rdfs:comment "Whose intent this is. THE AUTHENTICATED CALLER IS USUALLY THE FACILITATOR, NOT THIS PARTY — a transport role says which side sent a message, never who the work is for." .
|
|
344
|
+
apeng:facilitatorAgent a owl:ObjectProperty ; rdfs:range ap:Agent ;
|
|
345
|
+
rdfs:label "facilitator agent" ; rdfs:comment "The resolver/broker acting on the principal's behalf (FIPA Brokering lineage)." .
|
|
346
|
+
apeng:candidateProvider a owl:ObjectProperty ; rdfs:range ap:Agent ;
|
|
347
|
+
rdfs:label "candidate provider" ; rdfs:comment "The organization being engaged." .
|
|
348
|
+
apeng:providerAgent a owl:ObjectProperty ; rdfs:range ap:Agent ;
|
|
349
|
+
rdfs:label "provider agent" ; rdfs:comment "The provider's agent that answers — often not the provider itself." .
|
package/tbox/intents.ttl
CHANGED
|
@@ -43,12 +43,12 @@ apint:ResourceExchangeIntent a owl:Class ;
|
|
|
43
43
|
apint:GiveIntent a owl:Class ;
|
|
44
44
|
rdfs:subClassOf apint:ResourceExchangeIntent ;
|
|
45
45
|
rdfs:label "GiveIntent" ;
|
|
46
|
-
rdfs:comment "ResourceExchangeIntent with direction='give'." .
|
|
46
|
+
rdfs:comment "ResourceExchangeIntent with direction='give'. Direction is ONE OF THE TWO FLIPS of the two-flip principle (spec 337 §1.1): a seller's auction is a GiveIntent-side campaign, a buyer's shopping goal is ReceiveIntent-side — same algebra, direction as data. Never mint direction-specific classes downstream of these two." .
|
|
47
47
|
|
|
48
48
|
apint:ReceiveIntent a owl:Class ;
|
|
49
49
|
rdfs:subClassOf apint:ResourceExchangeIntent ;
|
|
50
50
|
rdfs:label "ReceiveIntent" ;
|
|
51
|
-
rdfs:comment "ResourceExchangeIntent with direction='receive'." .
|
|
51
|
+
rdfs:comment "ResourceExchangeIntent with direction='receive'. See apint:GiveIntent — direction is data (two-flip principle, spec 337 §1.1)." .
|
|
52
52
|
|
|
53
53
|
apint:ActionIntent a owl:Class ;
|
|
54
54
|
rdfs:subClassOf apint:Intent ;
|