World Cup Knowledge Graph Navigator
Namespace Prefixes
Always declare these prefixes at the top of every SPARQL query:
PREFIX fifa: <https://www.openlinksw.com/ontology/fifa#>
PREFIX position: <https://fifa.com/position#>
PREFIX positionSide: <https://fifa.com/positionSide#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
For ontology metadata queries also declare:
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX cc: <http://creativecommons.org/ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX prov: <http://www.w3.org/ns/prov#>
Full namespace URIs (for reference):
| Prefix | Full URI | Used for |
|---|---|---|
fifa: |
https://www.openlinksw.com/ontology/fifa# |
All classes, most properties |
position: |
https://fifa.com/position# |
Position instances (0=GK, 1=DEF, 2=MID, 3=FWD) |
positionSide: |
https://fifa.com/positionSide# |
Position side instances (1=right, 2=center, 3=left) |
dc: |
http://purl.org/dc/elements/1.1/ |
Ontology metadata (creator) |
cc: |
http://creativecommons.org/ns# |
Ontology license (CC-BY-SA 3.0) |
prov: |
http://www.w3.org/ns/prov# |
PROV-O (prov:wasDerivedFrom) |
Named Graphs
| Graph | Contents |
|---|---|
urn:worldcup:kg:2026 |
Main graph: competition, season, stage, group, team, player, squad, match, stadium, coach, staff, officials, lineup, goals, bookings, substitutions, timeline events, head-to-head analysis |
urn:worldcup:kg:2026:analytics |
Temporal snapshots: fifa:TeamMatchAnalyticsReport, fifa:PlayerMatchAnalyticsReport, fifa:PlayerPowerRanking. Each call appends a timestamped report. |
urn:worldcup:kg:past-matches |
Historical matches from the H2H API not in the 2026 season graph. Same fifa:Match structure as the main graph. |
urn:fifa:powerrankings |
Temporal snapshots of the FIFA/Coca-Cola world ranking (fifa:PowerRanking), one per team. Also holds fifa:Confederation, fifa:Gender, and team stub nodes. Self-contained graph. |
When writing SPARQL, always specify the graph with FROM <graph-iri> or GRAPH <graph-iri> { } unless you want to query all graphs (which can cause duplicates if the same match IRI appears in both the main and analytics graphs).
SPARQL Endpoint
Default endpoint: https://demo.openlinksw.com/sparql
Use this endpoint for all queries against the FIFA World Cup Knowledge Graph unless the user specifies otherwise.
Example curl:
curl -s -G "https://demo.openlinksw.com/sparql" \
-H "Accept: application/sparql-results+json" \
--data-urlencode "query=<SPARQL_QUERY>"
Example SPASQL via execute_spasql_query:
sql: SPARQL <SPARQL_QUERY>
Set the default-graph-uri parameter to a named graph IRI when needed.
Ontology Metadata
<https://www.openlinksw.com/ontology/fifa#> rdf:type owl:Ontology ;
rdfs:label "FIFA World Cup Ontology" ;
dc:creator <https://github.com/danielhmills/#this> ;
cc:license <https://creativecommons.org/licenses/by-sa/3.0/> .
License: CC-BY-SA 3.0.
Class Reference
| Class | URI | Notes |
|---|---|---|
| Competition | fifa:Competition |
e.g. FIFA World Cup |
| Season | fifa:Season |
A season/edition of a competition (e.g. 2022 World Cup) |
| Stage | fifa:Stage |
Group stage, Round of 16, Final, etc. |
| Group | fifa:Group |
Groups A–H within a stage |
| Match | fifa:Match |
Central hub — connects everything |
| Team | fifa:Team |
National teams |
| Player | fifa:Player |
Individual players |
| Stadium | fifa:Stadium |
Venue |
| City | fifa:City |
Host city |
| Goal | fifa:Goal |
A goal event; subclass of fifa:MatchEvent |
| Booking | fifa:Booking |
Yellow/red card event |
| Substitution | fifa:Substitution |
Player swap event |
| GoalType | fifa:GoalType |
Controlled vocabulary for goal types (penalty, regular, own) |
| CardType | fifa:CardType |
Controlled vocabulary for card types |
| MatchPeriod | fifa:MatchPeriod |
Controlled vocabulary for match periods |
| PlayerMatchAppearance | fifa:PlayerMatchAppearance |
Lineup slot for a player in a match |
| MatchEvent | fifa:MatchEvent |
Abstract base class for all timeline events |
| Foul | fifa:Foul |
Subclass of MatchEvent — fouls and disciplinary events |
| SetPiece | fifa:SetPiece |
Subclass of MatchEvent — free kicks, corners, throw-ins |
| EventQualifier | fifa:EventQualifier |
Supplementary annotation attached to a match event — spatial coordinates, jersey numbers, injured-player refs, cross-event links |
| Coach | fifa:Coach |
Team coach |
| CoachRole | fifa:CoachRole |
Coded role held by a coach (Head Coach, Assistant Coach) |
| Staff | fifa:Staff |
Non-playing technical/support staff member — can appear on fifa:Booking |
| StaffRole | fifa:StaffRole |
Coded role held by a staff member |
| CoachAssignment | fifa:CoachAssignment |
Coach ↔ Match link |
| StaffAssignment | fifa:StaffAssignment |
Staff ↔ Match link |
| Official | fifa:Official |
A match official (referee, assistant, etc.) |
| OfficialAssignment | fifa:OfficialAssignment |
Official ↔ Match assignment record |
| OfficialType | fifa:OfficialType |
Named class for role taxonomy (Referee, VAR, etc.) |
| Country | fifa:Country |
Country/football association — nationality of teams, players, officials |
| Tactic | fifa:Tactic |
Formation (e.g. 4-3-3) |
| Weather | fifa:Weather |
Match weather data |
| BallPossession | fifa:BallPossession |
Possession % per match |
| WorldRanking | fifa:WorldRanking |
Team ranking snapshot at a point in time |
| PowerRanking | fifa:PowerRanking |
Timestamped FIFA/Coca-Cola world ranking snapshot per team. Lives in urn:fifa:powerrankings. |
| SquadMembership | fifa:SquadMembership |
Team ↔ Player during a specific season |
| TeamMembership | fifa:TeamMembership |
Player ↔ Team with temporal bounds |
| MatchAnalyticsReport | fifa:MatchAnalyticsReport |
Abstract base for analytics reports |
| TeamMatchAnalyticsReport | fifa:TeamMatchAnalyticsReport |
Per-team analytics report for a match (urn:worldcup:kg:2026:analytics) |
| PlayerMatchAnalyticsReport | fifa:PlayerMatchAnalyticsReport |
Per-player analytics report for a match (urn:worldcup:kg:2026:analytics) |
| PlayerPowerRanking | fifa:PlayerPowerRanking |
Timestamped player in-match performance ranking snapshot (urn:worldcup:kg:2026:analytics) |
| HeadToHeadAnalysis | fifa:HeadToHeadAnalysis |
H2H stats between two teams for a match |
| Organization | fifa:Organization |
Governing/organizational body |
| Confederation | fifa:Confederation |
Continental confederation (UEFA, CONMEBOL, etc.); subClassOf fifa:Organization |
| Gender | fifa:Gender |
Gender category (instances: fifa:Male, fifa:Female) |
| AnalyticsMetricProperty | fifa:AnalyticsMetricProperty |
Meta-class tagging all analytics datatype properties |
The Match Node — Query Hub
fifa:Match is the central node. Nearly all interesting data hangs off it:
fifa:Match
├── fifa:homeTeam / fifa:awayTeam → fifa:Team
├── fifa:homeTeamScore / fifa:awayTeamScore → xsd:integer
├── fifa:winner → fifa:Team
├── fifa:date / fifa:localDate → xsd:dateTime
├── fifa:attendance → xsd:integer
├── fifa:stadium → fifa:Stadium
├── fifa:stage → fifa:Stage
├── fifa:season → fifa:Season
├── fifa:competition → fifa:Competition
├── fifa:group → fifa:Group
├── fifa:homeTeamTactics / fifa:awayTeamTactics → fifa:Tactic
├── fifa:weather → fifa:Weather
├── fifa:ballPossession → fifa:BallPossession
├── fifa:hasGoal → fifa:Goal
├── fifa:hasBooking → fifa:Booking
├── fifa:hasSubstitution → fifa:Substitution
├── fifa:hasPlayerAppearance → fifa:PlayerMatchAppearance
├── fifa:hasCoach → fifa:CoachAssignment
├── fifa:hasStaffAssignment → fifa:StaffAssignment
├── fifa:hasOfficial → fifa:Official (direct person node)
├── fifa:hasOfficialAssignment → fifa:OfficialAssignment
├── fifa:hasHeadToHeadAnalysis → fifa:HeadToHeadAnalysis
├── fifa:hasNewsArticle → schema:NewsArticle (FIFA Plus articles)
├── fifa:hasEvent → fifa:MatchEvent
│ ├── fifa:hasQualifier → fifa:EventQualifier
│ ├── fifa:Goal (subclass)
│ ├── fifa:Foul (subclass)
│ └── fifa:SetPiece (subclass)
├── fifa:hasTeamAnalyticsReport → fifa:TeamMatchAnalyticsReport
└── fifa:hasPlayerAnalyticsReport → fifa:PlayerMatchAnalyticsReport
Inferred match probability properties (derived via SPIN rules in wc2026_power_ranking_inference.sql):
| Property | Description |
|---|---|
fifa:homeTeamWinProbabilityByFifaRank |
Home-team win probability (0–100 %) via Elo logistic: 1/(1+10^((awayPts-homePts)/600)) |
fifa:awayTeamWinProbabilityByFifaRank |
Away-team win probability: 1/(1+10^((homePts-awayPts)/600)) |
fifa:homeTeamLossProbabilityByFifaRank |
Home-team loss probability = away win probability |
fifa:awayTeamLossProbabilityByFifaRank |
Away-team loss probability = home win probability |
PowerRanking — FIFA/Coca-Cola World Rankings
Named Graph
All fifa:PowerRanking data lives in urn:fifa:powerrankings. The graph is self-contained and also holds fifa:Confederation, fifa:Gender, and team stub nodes.
IRI Pattern
http://demo.openlinksw.com/fifa-kg#powerranking-{teamId}-{genTs}
{genTs} = ingestion timestamp (yyyymmddTHHMMSS).
PowerRanking Properties
| Property | Type | Range | Notes |
|---|---|---|---|
fifa:hasTeam |
Object | fifa:Team |
The team described |
fifa:hasConfederation |
Object | fifa:Confederation |
The team's confederation |
fifa:gender |
Object | fifa:Gender |
fifa:Male or fifa:Female |
fifa:rank |
Datatype | xsd:integer |
Ranking position in this snapshot |
fifa:prevRank |
Datatype | xsd:integer |
Previous ranking position |
fifa:rankingMovement |
Datatype | xsd:integer |
Net change (positive = moved up) |
fifa:ratedMatches |
Datatype | xsd:integer |
Matches counted towards ranking |
fifa:totalPoints |
Datatype | xsd:decimal |
Ranking points total |
fifa:prevPoints |
Datatype | xsd:decimal |
Previous ranking points |
fifa:generatedAt |
Datatype | xsd:dateTime |
Ingestion timestamp |
A new snapshot is recorded only when a team's rated-match count or rank changes — to avoid redundant data. Use MAX(fifa:generatedAt) to retrieve the latest snapshot for each team.
PowerRanking Query Pattern
PREFIX fifa: <https://www.openlinksw.com/ontology/fifa#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?team ?teamName ?confederation ?rank ?rankingMovement ?totalPoints ?generatedAt
WHERE {
GRAPH <urn:fifa:powerrankings> {
?snapshot a fifa:PowerRanking ;
fifa:hasTeam ?team ;
fifa:hasConfederation ?confederation ;
fifa:rank ?rank ;
fifa:rankingMovement ?rankingMovement ;
fifa:totalPoints ?totalPoints ;
fifa:generatedAt ?generatedAt .
?team rdfs:label ?teamName .
# Restrict to latest snapshot per team
{
SELECT ?team (MAX(?gen) AS ?generatedAt)
WHERE {
GRAPH <urn:fifa:powerrankings> {
?r a fifa:PowerRanking ; fifa:hasTeam ?team ; fifa:generatedAt ?gen .
}
}
GROUP BY ?team
}
}
}
ORDER BY ?rank
LIMIT 50
Analytics Reports
Class Hierarchy
fifa:MatchAnalyticsReport (abstract base)
├── fifa:TeamMatchAnalyticsReport — one report per team per match
└── fifa:PlayerMatchAnalyticsReport — one report per player per match
Both live in urn:worldcup:kg:2026:analytics. Both share the same pool of fifa:AnalyticsMetricProperty datatype properties (all xsd:decimal). Each report carries fifa:generatedAt (xsd:dateTime) for temporal versioning.
Accessing Analytics Reports
# Team-level analytics (from analytics graph)
?match fifa:hasTeamAnalyticsReport ?report .
?report fifa:match ?match ; fifa:team ?team ; fifa:generatedAt ?generatedAt .
# Player-level analytics
?match fifa:hasPlayerAnalyticsReport ?report .
?report fifa:match ?match ; fifa:player ?player ; fifa:generatedAt ?generatedAt .
Discovering Available Metrics
SELECT ?prop ?label WHERE {
?prop rdf:type fifa:AnalyticsMetricProperty ;
rdfs:label ?label .
}
ORDER BY ?label
Analytics Metric Properties
All have domain fifa:MatchAnalyticsReport, range xsd:decimal. Use OPTIONAL for every metric — not all reports populate every field.
Shooting & Goals
| Property | Description |
|---|---|
fifa:goals |
Goals scored |
fifa:goalsConceded |
Goals conceded |
fifa:goalsConcededFromAttemptAtGoalAgainst |
Goals conceded from opponent shots |
fifa:goalsFromDirectFreeKicks |
Goals from direct free kicks |
fifa:goalsInsideThePenaltyArea |
Goals scored inside the box |
fifa:goalsOutsideThePenaltyArea |
Goals scored outside the box |
fifa:ownGoals |
Own goals |
fifa:xG |
Expected goals — probability-weighted sum of chances |
fifa:attemptAtGoal |
Total attempts at goal |
fifa:attemptAtGoalAgainst |
Opponent attempts at goal |
fifa:attemptAtGoalAgainstOnTarget |
Opponent attempts on target |
fifa:attemptAtGoalBlocked |
Attempts blocked |
fifa:attemptAtGoalOnTarget |
Attempts on target |
fifa:attemptAtGoalOffTarget |
Attempts off target |
fifa:attemptAtGoalFromFreeKicks |
Attempts from free kicks |
fifa:attemptAtGoalInsideThePenaltyArea |
Attempts from inside the box |
fifa:attemptAtGoalInsideThePenaltyAreaOnTarget |
Attempts from inside box on target |
fifa:attemptAtGoalOutsideThePenaltyArea |
Attempts from outside the box |
fifa:attemptAtGoalOutsideThePenaltyAreaOnTarget |
Attempts from outside box on target |
fifa:headedAttemptAtGoal |
Headed attempts |
fifa:penalties |
Penalties awarded |
fifa:penaltiesScored |
Penalties scored |
fifa:attemptAtGoalFromBallProgression |
Attempts from ball progressions |
fifa:attemptAtGoalFromCorner |
Attempts from corners |
fifa:attemptAtGoalFromCross |
Attempts from crosses |
fifa:attemptAtGoalFromPass |
Attempts from passes |
fifa:attemptAtGoalFromPenalty |
Attempts taken as penalty kicks |
fifa:attemptAtGoalFromRebound |
Attempts from rebounds |
fifa:attemptAtGoalFromOther |
Attempts from other / uncategorised |
Passing & Ball Control
| Property | Description |
|---|---|
fifa:passes |
Total passes attempted |
fifa:passesCompleted |
Passes completed |
fifa:possession |
Ball possession % |
fifa:crosses |
Crosses attempted |
fifa:crossesCompleted |
Crosses completed |
fifa:assists |
Assists |
fifa:attemptedBallProgressions |
Ball progressions attempted |
fifa:completedBallProgressions |
Ball progressions completed |
fifa:attemptedSwitchesOfPlay |
Switches of play attempted |
fifa:completedSwitchesOfPlay |
Switches of play completed |
fifa:distributionsUnderPressure |
Distributions under pressure |
fifa:distributionsCompletedUnderPressure |
Distributions completed under pressure |
fifa:takeOnsCompleted |
Take-ons (dribbles) completed |
fifa:numberOfInvolvements |
Touches/actions in possession sequences |
fifa:numberOfPossessionSequences |
Total distinct possession sequences |
fifa:numberOfShotEndingSequences |
Possession sequences ending with a shot |
fifa:ballRecoveryTime |
Avg time to recover ball after losing possession |
Threat & Pitch Control
| Property | Description |
|---|---|
fifa:threat |
FIFA Expected Threat (xT) — value of on-ball actions moving toward goal |
fifa:pitchControl |
Overall share of pitch controlled (by player positions/reachability) |
fifa:finalThirdPitchControl |
Pitch control share in the attacking final third |
Defensive
| Property | Description |
|---|---|
fifa:defensivePressuresApplied |
Defensive pressures applied |
fifa:directDefensivePressuresApplied |
Direct defensive pressures |
fifa:forcedTurnovers |
Turnovers forced |
fifa:foulsFor |
Fouls won |
fifa:foulsAgainst |
Fouls committed |
fifa:yellowCards |
Yellow cards (analytics count) |
fifa:redCards |
Red cards (analytics count) |
fifa:directRedCards |
Straight red cards (not from second caution) |
fifa:indirectRedCards |
Red cards from second yellow card |
fifa:offsides |
Offsides |
fifa:goalkeeperDefensiveActionsInsidePenaltyArea |
GK actions inside box |
fifa:goalkeeperDefensiveActionsOutsidePenaltyArea |
GK actions outside box |
fifa:goalkeeperGoalPreventions |
GK goal preventions |
fifa:goalkeeperSaves |
Total saves made by the goalkeeper |
fifa:goalkeeperSavesOnTarget |
Saves against on-target attempts |
fifa:goalkeeperSavePercentage |
% of on-target attempts saved |
fifa:cleanSheets |
Matches completed without conceding |
Set Pieces
| Property | Description |
|---|---|
fifa:corners |
Corners |
fifa:freeKicks |
Free kicks |
fifa:directFreeKicks |
Direct free kicks |
fifa:indirectFreeKicks |
Indirect free kicks |
fifa:goalKicks |
Goal kicks |
fifa:throwIns |
Throw-ins |
Linebreaks & Progressions
| Property | Description |
|---|---|
fifa:linebreaksAttempted |
Linebreaks attempted |
fifa:linebreaksAttemptedCompleted |
Linebreaks completed |
fifa:linebreaksAttemptedAllLines |
Linebreaks attempted across all lines |
fifa:linebreaksCompletedAllLines |
Linebreaks completed across all lines |
fifa:linebreaksAttemptedAttackingLine |
vs. attacking line (combined) |
fifa:linebreaksAttemptedAttackingLineCompleted |
vs. attacking line completed (combined) |
fifa:linebreaksAttemptedAttackingLineOnly |
vs. attacking line only |
fifa:linebreaksAttemptedAttackingLineCompletedOnly |
vs. attacking line only, completed |
fifa:linebreaksAttemptedMidfieldLine |
vs. midfield line (combined) |
fifa:linebreaksAttemptedMidfieldLineCompleted |
vs. midfield line completed (combined) |
fifa:linebreaksAttemptedMidfieldLineOnly |
vs. midfield line only |
fifa:linebreaksAttemptedMidfieldLineCompletedOnly |
vs. midfield line only, completed |
fifa:linebreaksAttemptedDefensiveLine |
vs. defensive line (combined) |
fifa:linebreaksAttemptedDefensiveLineCompleted |
vs. defensive line completed (combined) |
fifa:linebreaksAttemptedDefensiveLineOnly |
vs. defensive line only |
fifa:linebreaksAttemptedDefensiveLineCompletedOnly |
vs. defensive line only, completed |
fifa:linebreaksAttemptedAttackingAndMidfieldLine |
vs. attacking + midfield lines |
fifa:linebreaksCompletedAttackingAndMidfieldLine |
vs. attacking + midfield completed |
fifa:linebreaksAttemptedMidfieldAndDefensiveLine |
vs. midfield + defensive lines |
fifa:linebreaksCompletedMidfieldAndDefensiveLine |
vs. midfield + defensive completed |
fifa:linebreaksAttemptedUnderPressure |
Linebreaks under pressure |
fifa:linebreaksCompletedUnderPressure |
Linebreaks under pressure completed |
Receptions & Offers to Receive
| Property | Description |
|---|---|
fifa:receivedOffersToReceive |
Offers to receive acted upon |
fifa:offersToReceiveTotal |
Total offers to receive |
fifa:offersToReceiveInBehind |
Offers to receive in behind |
fifa:offersToReceiveInBetween |
Offers to receive in between lines |
fifa:offersToReceiveInFront |
Offers to receive in front |
fifa:offersToReceiveInside |
Offers to receive inside |
fifa:offersToReceiveOutside |
Offers to receive outside |
fifa:receptionsInBehind |
Receptions in behind |
fifa:receptionsBetweenMidfieldAndDefensiveLine |
Receptions between midfield and defensive line |
fifa:receptionsUnderPressure |
Receptions under pressure |
fifa:receptionsUnderDirectPressure |
Receptions under direct pressure |
fifa:receptionsUnderIndirectPressure |
Receptions under indirect pressure |
fifa:receptionsUnderNoPressure |
Receptions under no pressure |
Final Third Entries
| Property | Description |
|---|---|
fifa:finalThirdEntriesReceptionCentralChannel |
Final third entries via central channel |
fifa:finalThirdEntriesReceptionInsideLeftChannel |
Final third entries inside left channel |
fifa:finalThirdEntriesReceptionInsideRightChannel |
Final third entries inside right channel |
fifa:finalThirdEntriesReceptionLeftChannel |
Final third entries left channel |
fifa:finalThirdEntriesReceptionRightChannel |
Final third entries right channel |
Tactical Phase Aggregates
| Property | Description |
|---|---|
fifa:phaseAggregateAttackingTransition |
Attacking transition phase |
fifa:phaseAggregateDefensiveTransition |
Defensive transition phase |
fifa:phaseAggregateBuildUpOpposed |
Build-up play (opposed) |
fifa:phaseAggregateBuildUpUnopposed |
Build-up play (unopposed) |
fifa:phaseAggregateCounterPress |
Counter-press phase |
fifa:phaseAggregateCounterattack |
Counterattack phase |
fifa:phaseAggregateFinalThird |
Final third phase |
fifa:phaseAggregateHighBlock |
High defensive block phase |
fifa:phaseAggregateHighPress |
High press phase |
fifa:phaseAggregateMidBlock |
Mid block phase |
fifa:phaseAggregateMidPress |
Mid press phase |
fifa:phaseAggregateLowBlock |
Low block phase |
fifa:phaseAggregateLowPress |
Low press phase |
fifa:phaseAggregateLongBall |
Long ball phase |
fifa:phaseAggregateProgression |
Progression phase |
fifa:phaseAggregateRecovery |
Recovery phase |
fifa:phaseAggregateSetPieces |
Set pieces phase |
Physical / Movement (Player-level)
| Property | Description |
|---|---|
fifa:totalDistance |
Total distance covered |
fifa:distanceWalking |
Distance walking |
fifa:distanceJogging |
Distance jogging |
fifa:distanceLowSpeedSprinting |
Distance at low-speed sprint |
fifa:distanceHighSpeedRunning |
Distance at high-speed running |
fifa:distanceHighSpeedSprinting |
Distance at high-speed sprint |
fifa:avgSpeed |
Average speed |
fifa:topSpeed |
Top speed |
fifa:sprints |
Number of sprints |
fifa:speedRuns |
Number of speed runs |
fifa:timePlayed |
Minutes played |
fifa:substitutionsIn |
Times substituted on |
fifa:substitutionsOut |
Times substituted off |
Aggregate / Multi-match
| Property | Description |
|---|---|
fifa:matchesPlayed |
Number of matches the report aggregates |
Coded Value Reference
Critical: Many properties use instance URIs, not raw integers.
Card Types (fifa:bookingCard)
| Instance URI | Label |
|---|---|
fifa:CardType-1 |
Yellow Card |
fifa:CardType-2 |
Second Yellow Card |
fifa:CardType-3 |
Straight Red Card |
Goal Types (fifa:goalType)
| Instance URI | Label |
|---|---|
fifa:GoalType-1 |
Penalty Goal |
fifa:GoalType-2 |
Regular Goal |
fifa:GoalType-3 |
Own Goal |
Match Periods
| Instance URI | Label |
|---|---|
fifa:MatchPeriod-0 |
Pre-Match |
fifa:MatchPeriod-3 |
First Half |
fifa:MatchPeriod-4 |
Half-Time |
fifa:MatchPeriod-5 |
Second Half |
fifa:MatchPeriod-7 |
Extra Time First Half |
fifa:MatchPeriod-8 |
Extra Time Half-Time |
fifa:MatchPeriod-9 |
Extra Time Second Half |
fifa:MatchPeriod-10 |
Full Time |
fifa:MatchPeriod-11 |
Penalty Kicks |
Gender Instances
| Instance URI | Label |
|---|---|
fifa:Male |
Male |
fifa:Female |
Female |
Positions (fifa:position, fifa:realPosition)
Two sets of position instances exist in the ontology, both typed as a fifa:Position:
| Instance URI | Namespace | Label | Used by |
|---|---|---|---|
position:0 / fifa:Position-0 |
position: / fifa: |
Goalkeeper | squad loader / JSON match loader |
position:1 / fifa:Position-1 |
position: / fifa: |
Defender | squad loader / JSON match loader |
position:2 / fifa:Position-2 |
position: / fifa: |
Midfielder | squad loader / JSON match loader |
position:3 / fifa:Position-3 |
position: / fifa: |
Forward | squad loader / JSON match loader |
Position IRI in practice: The JSON match loader emits
fifa:Position-NIRIs forfifa:PlayerMatchAppearancenodes. The squad loader emitsposition:NIRIs onfifa:Playerbio nodes. When querying lineups usefifa:Position-N; when querying player bio useposition:N. To cover both, useUNIONorVALUES ?pos { position:3 fifa:Position-3 }.
Position Sides (fifa:realPositionSide, fifa:positionSide)
positionSide: namespace (squad loader bio data, https://fifa.com/positionSide#):
| Instance URI | Label |
|---|---|
positionSide:1 |
right side |
positionSide:2 |
center |
positionSide:3 |
left side |
fifa: namespace (JSON match loader lineup data):
| Instance URI | Label |
|---|---|
fifa:PositionSide-1 |
right side |
fifa:PositionSide-2 |
center |
fifa:PositionSide-3 |
Unknown (side not determined) |
fifa:PositionSide-3is "Unknown" (side not determined), whereaspositionSide:3is the canonical "left side" individual.
Tactics
| Instance URI | Label |
|---|---|
fifa:Tactic-4-3-3 |
4-3-3 |
fifa:Tactic-4-4-2 |
4-4-2 |
fifa:Tactic-4-5-1 |
4-5-1 |
fifa:Tactic-3-5-2 |
3-5-2 |
fifa:Tactic-3-4-3 |
3-4-3 |
fifa:Tactic-3-6-1 |
3-6-1 |
fifa:Tactic-5-3-2 |
5-3-2 |
fifa:Tactic-5-4-1 |
5-4-1 |
Official Type Instances
| Instance URI | Label |
|---|---|
fifa:OfficialType-1 |
Referee |
fifa:OfficialType-2 |
Assistant Referee 1 |
fifa:OfficialType-3 |
Assistant Referee 2 |
fifa:OfficialType-4 |
Fourth official |
fifa:OfficialType-5 |
Video Assistant Referee (VAR) |
fifa:OfficialType-6 |
Reserve referee |
fifa:OfficialType-8 |
Assistant VAR |
fifa:OfficialType-9 |
Support VAR |
Coach Role Instances
| Instance URI | Label |
|---|---|
fifa:CoachRole-0 |
Head Coach |
fifa:CoachRole-1 |
Assistant Coach |
Event Types (subclasses of fifa:MatchEvent via rdf:type)
OWL equivalentClass notes:
fifa:EventType-0≡fifa:Goal,fifa:EventType-2≡fifa:Booking,fifa:EventType-5≡fifa:Substitution. The preferred classes arefifa:Goal,fifa:Booking,fifa:Substitution— use those rather than the coded EventType equivalents.
Subclass hierarchy:
fifa:MatchEvent
├── fifa:Goal (preferred — equiv: EventType-0)
│ ├── fifa:EventType-34 (Own goal)
│ ├── fifa:EventType-39 (Free Kick goal)
│ └── fifa:EventType-41 (Penalty Goal)
├── fifa:Booking (preferred — equiv: EventType-2)
│ ├── fifa:EventType-3 (Red card)
│ └── fifa:EventType-4 (Second Caution - Red Card)
├── fifa:Foul
│ └── fifa:EventType-18 (Foul)
├── fifa:SetPiece
│ ├── fifa:EventType-14 (Free Kick)
│ ├── fifa:EventType-16 (Corner)
│ └── fifa:EventType-24 (Throw In)
├── fifa:Substitution (preferred — equiv: EventType-5)
├── fifa:EventType-1 (Assist)
├── fifa:EventType-6 (Penalty Awarded)
├── fifa:EventType-7 (Start Time)
├── fifa:EventType-8 (End Time)
├── fifa:EventType-9 (Pause Time)
├── fifa:EventType-10 (Resume Time)
├── fifa:EventType-12 (Attempt at Goal)
├── fifa:EventType-15 (Offside)
├── fifa:EventType-17 (Goal Prevention)
├── fifa:EventType-19 (Coin Toss)
├── fifa:EventType-23 (Dropped Ball)
├── fifa:EventType-25 (Clearance)
├── fifa:EventType-26 (Match end)
├── fifa:EventType-27 (Aerial Duel)
├── fifa:EventType-33 (Attempt Missed)
├── fifa:EventType-49 (Attempt Missed)
├── fifa:EventType-51 (Penalty missed)
├── fifa:EventType-57 (Goal Prevention)
├── fifa:EventType-60 (Penalty missed)
├── fifa:EventType-65 (Penalty missed)
├── fifa:EventType-71 (VAR)
└── fifa:EventType-72 (Penalty Conceded!)
Use intermediate classes for category-level queries:
?event a fifa:Foul . # all foul-related events
?event a fifa:Goal . # all goal events
?event a fifa:SetPiece . # all set pieces
?event a fifa:EventType-18 . # foul only, not cards
WRONG — there is no fifa:eventType datatype property:
# ?event fifa:eventType 18 . ← DO NOT USE
Spatial Properties on fifa:MatchEvent
| Property | Range | Description |
|---|---|---|
fifa:positionX |
xsd:decimal |
X coordinate of event on the field |
fifa:positionY |
xsd:decimal |
Y coordinate of event on the field |
fifa:goalGatePositionX |
xsd:decimal |
X coordinate of ball position at goal gate |
fifa:goalGatePositionY |
xsd:decimal |
Y coordinate of ball at the goal line |
fifa:goalGatePositionZ |
xsd:decimal |
Z coordinate (height) of ball at the goal line |
Other fifa:MatchEvent Properties
| Property | Range | Description |
|---|---|---|
fifa:typeLabel |
xsd:string |
Localised human-readable label for the event type |
fifa:hasStoppageTime |
xsd:integer |
Stoppage time minutes added at end of period |
fifa:eventMatchMinute |
xsd:string |
Match minute string (e.g. "90'+7'") |
fifa:eventTimestamp |
xsd:dateTime |
Timestamp at which the event occurred |
fifa:eventHomeGoals |
xsd:integer |
Home-team goal tally at time of event |
fifa:eventAwayGoals |
xsd:integer |
Away-team goal tally at time of event |
VAR Properties on fifa:MatchEvent
These appear on fifa:EventType-71 (VAR) events:
| Property | Range | Description |
|---|---|---|
fifa:varIncident |
xsd:integer |
VAR incident type code |
fifa:varReason |
xsd:integer |
Reason for VAR review |
fifa:varStatus |
xsd:integer |
Status of VAR review |
fifa:varResult |
xsd:integer |
Outcome of VAR review |
fifa:varDecision |
xsd:integer |
VAR decision outcome (VarNotificationData/Decision) |
EventQualifier — Supplementary Annotations
A fifa:MatchEvent can have zero or more fifa:EventQualifier nodes attached via fifa:hasQualifier. These carry spatial and cross-event data: goalkeeper positions, goalmouth coordinates, blocked shot locations, jersey numbers, injured-player references, and links to related events.
?match fifa:hasEvent ?event .
?event fifa:hasQualifier ?q .
?q fifa:qualifierId ?qid ;
fifa:qualifierRecordId ?recId .
OPTIONAL { ?q fifa:pitchZone ?zone }
OPTIONAL { ?q fifa:gkXCoordinate ?gkX }
OPTIONAL { ?q fifa:gkYCoordinate ?gkY }
OPTIONAL { ?q fifa:goalmouthYCoordinate ?gmY }
OPTIONAL { ?q fifa:goalmouthZCoordinate ?gmZ }
OPTIONAL { ?q fifa:blockedXCoordinate ?blkX }
OPTIONAL { ?q fifa:blockedYCoordinate ?blkY }
OPTIONAL { ?q fifa:jerseyNumbers ?jerseys }
OPTIONAL { ?q fifa:playerPosition ?playerPos }
OPTIONAL { ?q fifa:injuredPlayer ?injPlayer }
OPTIONAL { ?q fifa:relatedEvent ?relEvt }
OPTIONAL { ?q fifa:oppositeRelatedEvent ?oppEvt }
OPTIONAL { ?q fifa:secondRelatedEvent ?secEvt }
fifa:timelineEvent — Cross-Reference to Timeline
Links a derived live-match entity (fifa:Goal, fifa:Booking, fifa:Substitution) back to the corresponding raw fifa:MatchEvent in the timeline. Use it to join structured live data (typed properties like fifa:goalMinute, fifa:goalType, fifa:player) with the full event-qualifier annotations.
?match fifa:hasGoal ?goal .
?goal fifa:timelineEvent ?event .
?event fifa:hasQualifier ?q .
?q fifa:goalmouthYCoordinate ?gmY ;
fifa:goalmouthZCoordinate ?gmZ .
Key Property Quick Reference
Match Scores & Result
?match fifa:homeTeamScore ?homeScore ;
fifa:awayTeamScore ?awayScore ;
fifa:winner ?winnerTeam ;
fifa:resultType ?resultType . # 1=normal, 2=AET, 3=penalties
Goal Details
?match fifa:hasGoal ?goal .
?goal rdfs:label ?goalLabel ;
fifa:goalMinute ?minute ;
fifa:goalPeriod fifa:MatchPeriod-3 ;
fifa:goalType fifa:GoalType-1 ;
fifa:assistPlayer ?assistingPlayer ;
fifa:team ?scoringTeam ;
fifa:player ?scorer .
Booking Details
?match fifa:hasBooking ?booking .
?booking fifa:bookingCard fifa:CardType-1 ;
fifa:bookingMinute ?minute ;
fifa:bookingPeriod ?period ;
fifa:bookingReason ?reasonCode ;
fifa:team ?bookedTeam ;
fifa:player ?bookedPlayer .
OPTIONAL { ?booking fifa:coach ?coach } # coach booking (fifa:Coach)
OPTIONAL { ?booking fifa:staff ?staff } # staff booking (fifa:Staff)
OPTIONAL { ?booking fifa:timelineEvent ?event }
Substitution Details
?match fifa:hasSubstitution ?sub .
?sub fifa:playerOff ?outPlayer ;
fifa:playerOffName ?outName ;
fifa:playerOn ?inPlayer ;
fifa:playerOnName ?inName ;
fifa:substitutionMinute ?minute ;
fifa:substitutionPeriod ?period ;
fifa:substitutionReason ?reason .
Player Lineup
?match fifa:hasPlayerAppearance ?appearance .
?appearance fifa:player ?player ;
fifa:team ?team ;
fifa:shirtNumber ?shirt ;
fifa:captain ?isCaptain ;
fifa:fieldStatus ?fieldStatus ; # 1=starting, 2=substitute
fifa:position ?pos ;
fifa:lineupX ?x ;
fifa:lineupY ?y .
Player Bio
?player rdfs:label ?name ;
fifa:playerId ?id ;
fifa:birthDate ?dob ;
fifa:height ?height ;
fifa:weight ?weight ;
fifa:jerseyNum ?jersey ;
fifa:realPosition ?realPos ;
fifa:realPositionSide ?side .
Team & Squad
?team rdfs:label ?teamName ;
fifa:teamId ?id ;
fifa:abbreviation ?abbr ;
fifa:hasWorldRanking ?ranking ;
fifa:hasPlayer ?player . # direct → fifa:Player
# Squad membership via inSquad (player → SquadMembership)
?player fifa:inSquad ?squadMembership .
?squadMembership fifa:forTeam ?team ;
fifa:duringSeason ?season .
# Team membership (temporal) via hasTeamMembership (player → TeamMembership)
?player fifa:hasTeamMembership ?membership .
?membership fifa:team ?team ;
fifa:duringSeason ?season ;
fifa:fromJoinDate ?joined ;
fifa:fromLeaveDate ?left .
Weather
?match fifa:weather ?weather .
?weather fifa:temperature ?temp ;
fifa:humidity ?humidity ;
fifa:windSpeed ?wind ;
fifa:weatherTypeLocalized ?description .
Ball Possession
?match fifa:ballPossession ?poss .
?poss fifa:overallHome ?homePct ;
fifa:overallAway ?awayPct .
Stadium & Location
?match fifa:stadium ?stadium .
?stadium rdfs:label ?stadiumName ;
fifa:hasRoof ?hasRoof ;
fifa:city ?city .
?city rdfs:label ?cityName .
OPTIONAL { ?stadium fifa:capacity ?capacity }
OPTIONAL { ?stadium fifa:latitude ?lat }
OPTIONAL { ?stadium fifa:longitude ?lon }
OPTIONAL { ?stadium fifa:length ?pitchLength }
OPTIONAL { ?stadium fifa:width ?pitchWidth }
Common Query Patterns
Pattern 1: All Goals in a Match
SELECT ?match ?matchLabel ?goalMinute ?periodLabel ?goalTypeLabel ?scorerName ?assistName
WHERE {
?match a fifa:Match ;
rdfs:label ?matchLabel ;
fifa:hasGoal ?goal .
?goal fifa:goalMinute ?goalMinute ;
fifa:goalPeriod ?period ;
fifa:goalType ?goalType .
?period rdfs:label ?periodLabel .
?goalType rdfs:label ?goalTypeLabel .
OPTIONAL { ?goal rdfs:label ?scorerName }
OPTIONAL { ?goal fifa:assistPlayer ?assist . ?assist rdfs:label ?assistName }
}
ORDER BY ?goalMinute
Pattern 2: Match Results with Score
SELECT ?match ?homeTeamName ?awayTeamName ?homeScore ?awayScore ?winnerName ?date
WHERE {
?match a fifa:Match ;
fifa:homeTeam ?homeTeam ;
fifa:awayTeam ?awayTeam ;
fifa:homeTeamScore ?homeScore ;
fifa:awayTeamScore ?awayScore ;
fifa:date ?date .
?homeTeam rdfs:label ?homeTeamName .
?awayTeam rdfs:label ?awayTeamName .
OPTIONAL { ?match fifa:winner ?winner . ?winner rdfs:label ?winnerName }
}
ORDER BY ?date
Pattern 3: Player Appearances (Starting XI)
SELECT ?match ?playerName ?shirtNumber ?posLabel ?isCaptain
WHERE {
?match a fifa:Match ;
fifa:hasPlayerAppearance ?app .
?app fifa:player ?player ;
fifa:shirtNumber ?shirtNumber ;
fifa:fieldStatus 1 ;
fifa:captain ?isCaptain .
?player rdfs:label ?playerName .
OPTIONAL { ?player fifa:realPosition ?pos . ?pos rdfs:label ?posLabel }
}
Pattern 4: Yellow/Red Cards by Team
SELECT ?team ?teamName (COUNT(?booking) AS ?cards)
WHERE {
?match a fifa:Match ;
fifa:hasBooking ?booking .
?booking fifa:bookingCard fifa:CardType-1 ; # Yellow; CardType-3 for straight red
fifa:team ?team .
?team rdfs:label ?teamName .
}
GROUP BY ?team ?teamName
ORDER BY DESC(?cards)
Pattern 5: Tactics Used Per Match
SELECT ?matchLabel ?homeTeamName ?homeTacticLabel ?awayTeamName ?awayTacticLabel
WHERE {
?match a fifa:Match ;
rdfs:label ?matchLabel ;
fifa:homeTeam ?homeTeam ; fifa:awayTeam ?awayTeam ;
fifa:homeTeamTactics ?homeTactic ;
fifa:awayTeamTactics ?awayTactic .
?homeTeam rdfs:label ?homeTeamName .
?awayTeam rdfs:label ?awayTeamName .
?homeTactic rdfs:label ?homeTacticLabel .
?awayTactic rdfs:label ?awayTacticLabel .
}
Pattern 6: Team Analytics for a Match
SELECT ?match ?matchLabel ?reportLabel
?passes ?passesCompleted ?possession
?attemptAtGoal ?goals ?xG ?yellowCards
WHERE {
?match a fifa:Match ;
rdfs:label ?matchLabel ;
fifa:hasTeamAnalyticsReport ?report .
?report rdfs:label ?reportLabel .
OPTIONAL { ?report fifa:passes ?passes }
OPTIONAL { ?report fifa:passesCompleted ?passesCompleted }
OPTIONAL { ?report fifa:possession ?possession }
OPTIONAL { ?report fifa:attemptAtGoal ?attemptAtGoal }
OPTIONAL { ?report fifa:goals ?goals }
OPTIONAL { ?report fifa:xG ?xG }
OPTIONAL { ?report fifa:yellowCards ?yellowCards }
}
ORDER BY ?matchLabel
Pattern 7: Player Physical Performance
SELECT ?matchLabel ?reportLabel
?totalDistance ?distanceHighSpeedSprinting ?topSpeed ?sprints ?timePlayed
WHERE {
?match a fifa:Match ;
rdfs:label ?matchLabel ;
fifa:hasPlayerAnalyticsReport ?report .
?report rdfs:label ?reportLabel .
OPTIONAL { ?report fifa:totalDistance ?totalDistance }
OPTIONAL { ?report fifa:distanceHighSpeedSprinting ?distanceHighSpeedSprinting }
OPTIONAL { ?report fifa:topSpeed ?topSpeed }
OPTIONAL { ?report fifa:sprints ?sprints }
OPTIONAL { ?report fif
…(truncated)