How Skyocean combines standards and custom vocabulary for Knowledge Assets.
We use a hybrid approach: existing standards as the foundation, Skyocean ontology only where standards don't cover our needs.
The classes that every Skyocean trade KA touches and how they relate. Skyocean-specific terms are skyocean:*; international standards (schema:*, gs1:*) are used wherever they exist.
classDiagram
direction LR
Trade <|-- CommodityTrade
Trade <|.. PublicTradeOverview : marker
Trade *-- Commodity : commodity
Trade o-- TradeParty : shipper / consignee / seller / buyer / supplier
Trade *-- LogisticsRecord : logistics
Trade *-- FinancingRecord : financing
Trade *-- TradePrivateData : private layer
Trade *-- PaymentDetails : payment
Document --> Trade : relatedTrade
Document --> TradeParty : issuer / attestor
Document --> Commodity : commodityRef
Document --> Document : sharesIdentifier
LogisticsRecord *-- VesselPosition : positions
Document *-- ColdChainLog : telemetry
Document *-- ProductionPlot : EUDR plot
InsurancePolicy --> Trade : covers
CargoIncident --> Trade : occurredIn
InsuranceClaim --> InsurancePolicy : claims
InsuranceClaim --> CargoIncident : forIncident
class Trade {
+tradeId
+tradeStatus
+corridor
+incoterms
+cycleDays
}
class Document {
+documentNumber
+documentStatus
+issueDate
+containerNumber
+sealNumber
+lotReference
+bookingReference
+documentURL : private
}
class TradeParty {
+did
+role
+legalDetails : private
}
class VesselPosition {
+imoNumber
+mmsiNumber
+positionLat
+positionLon
+navStatus
}
class ProductionPlot {
+plotGeometry
+plotCentroid
+cutoffCompliance
}
class ColdChainLog {
+loggerSerial
+temperatureRange
+temperatureExcursion
}
Composition (*--) means the parent owns the child as part of its public/private split. Reference (-->) means the child carries an identifier pointing back. sharesIdentifier is the cross-document edge — Documents that share container numbers, seal numbers, lot references, BL numbers, or SWIFT UETRs link to each other automatically; that's how multi-source convergence emerges as a graph rather than as anchor-only spokes.
Humanitarian aid campaigns reuse the same Trade backbone with a donation-specific layer (donation:*) for donor receipts, distribution observations, and last-mile acknowledgments.
classDiagram
direction LR
Trade <|-- DonationCampaign
DonationCampaign *-- DonationContribution : contributions
DonationCampaign *-- DonationDistribution : distributions
DonationCampaign *-- DonorAggregateReceipt : per rail
DonationContribution --> PaymentSource : viaRail
DonationDistribution <-- DistributionObservation : observed by
DonationDistribution <-- LastMileAcknowledgment : ackd by
class DonationCampaign {
+campaignId
+goods
+targetFunding
+raised
+sourceOfFunds
+cycleDays
}
class DonationContribution {
+contributionRail
+amount
+kycRef : private
+onChainTxHash
}
class DonationDistribution {
+deliveryStatus
+familiesServed : private
+kitsDistributed : private
+verifiedBy
}
class DonorAggregateReceipt {
+contributionRail
+aggregateAmount
+contributorCount : private
}
class DistributionObservation {
+observerDID
+observationDate
+verificationMethod
}
class LastMileAcknowledgment {
+coordinatorDID
+acknowledgmentDate
+stateAuthorityRef
}
A campaign's audit story converges across six independently-issued attestations: supplier invoice → IOM consolidation manifest → BL → customs → distribution observation (independent NGO) → state acknowledgment. No single party controls the chain.
How SKY-2026-00471 (Argentina → Sudan, 500 MT lentils) actually instantiates the schema. The cross-document edges (dashed) form via shared identifiers: container series MEDU 4471001-020, lot reference AR-LOT-2026-00471, BL MSCU-MAR-2026-00471.
graph LR
A((SKY-2026-00471
CommodityTrade)):::anchor
A --> BL[Bill of Lading
MSCU-MAR-2026-00471]:::doc
A --> SI[Supplier Invoice
AR-SUP-INV]:::doc
A --> PHY[Phytosanitary
AR-FITO-44712]:::doc
A --> SGS[SGS Quality
SGS-AR-INSP-44712]:::doc
A --> CUS[Argentina CUSDEC
AR-AFIP-DESP]:::doc
A --> PAY[Buyer Payment
SWIFT MT103]:::doc
A --> P1[Skyocean Argentina
shipper]:::party
A --> P2[Skyocean Sudan
consignee]:::party
A --> P3[Argentine Lentil Coop
supplier]:::party
A --> P4[MSC Carrier]:::party
A --> P5[SENASA]:::party
BL --> P4
BL --> P1
BL --> P2
SI --> P3
SI --> P1
PHY --> P5
BL -. "MEDU 4471001 to 020" .- PHY
BL -. "MEDU 4471001 to 020" .- SGS
BL -. "MEDU 4471001 to 020" .- CUS
SI -. "AR-LOT-2026-00471" .- PHY
SI -. "AR-LOT-2026-00471" .- SGS
PAY -. "SKY-INV-2026-00471" .- SI
classDef anchor fill:#0066FF,stroke:#00D4FF,stroke-width:3px,color:#fff
classDef doc fill:#142238,stroke:#4D94FF,color:#E8EDF5
classDef party fill:#1a2940,stroke:#8FA3BF,color:#E8EDF5
Solid edges (→) are direct anchor / issuer relationships. Dashed edges with labels are cross-document convergence — these emerge automatically because the documents independently reference the same container range, lot, or invoice ID. An auditor can walk this graph in any direction and verify that 6 independently-issued documents all agree on the same physical shipment.
All Skyocean Knowledge Assets use this @context in JSON-LD:
{
"@context": {
"schema": "http://schema.org/",
"gs1": "https://gs1.org/voc/",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"skyocean": "https://skyocean.io/ontology/",
"ot": "https://ontology.origintrail.io/dkg/1.0#"
}
}