PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xapi: <http://ns.inria.fr/ludo/v1/xapi#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

xapi:Authentication a rdfs:Class ;
  rdfs:label "Authentication"@en ;
  rdfs:comment "The concept of verifying the identity of a user or system. Authentication allows interactions between the two \"trusted\" parties."@en .

xapi:LMS a rdfs:Class ;
  rdfs:label "Learning Management System"@en ;
  rdfs:comment "A software package used to administer one or more courses to one or more learners. An LMS is typically a web-based system that allows learners to authenticate themselves, register for courses, complete courses and take assessments"@en .

xapi:Other a rdfs:Class ;
  rdfs:label "Other"@en ;
  rdfs:comment "A context Activity that doesn’t fit one of the other fields. For example: Anna studies a textbook for a biology exam. The Statement’s Activity refers to the textbook, and the exam is a context Activity of type “other”."@en .

xapi:xAPI a rdfs:Class ;
  rdfs:label "Experience API"@en ;
  rdfs:comment "The API defined in this document, the product of \"Project Tin Can\". A simple, lightweight way for any permitted Actor to store and retrieve extensible learning records, learner and learning experience profiles, regardless of platform."@en .

xapi:TinCanAPI a rdfs:Class ;
  rdfs:label "TIN CAN API"@en ;
  rdfs:comment "The previous name of the API defined in this document, often used in informal references to the Experience API."@en .

xapi:Parent a rdfs:Class ;
  rdfs:label "Parent"@en ;
  rdfs:comment "An Activity with a direct relation to the Activity which is the Object of the Statement. In almost all cases there is only one sensible parent or none, not multiple. For example: a Statement about a quiz question would have the quiz as its parent Activity."@en .

xapi:IRI a rdfs:Class ;
  rdfs:label "International Resource Identifier"@en ;
  rdfs:comment "A unique identifier which may be an IRL. In the xAPI, all IRIs should be a full absolute IRIs including a scheme. Relative IRIs should not be used. IRLs should be defined within a domain controlled by the person creating the IRL."@en .

xapi:Verb a rdfs:Class ;
  rdfs:label "Verb"@en ;
  rdfs:comment "Defines the action being done by the Actor within the Activity within a Statement."@en .

xapi:hasVerbID a rdf:Property ;
  rdfs:label "Verb ID"@en ;
  rdfs:comment "Corresponds to a Verb definition. Each Verb definition corresponds to the meaning of a Verb, not the word. The IRI should be human-readable and contain the Verb meaning."@en ;
  rdfs:domain xapi:Verb ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:InteractionComponent a rdfs:Class ;
  rdfs:label "Interaction Component"@en .

xapi:hasInteractionComponentDescription a rdf:Property ;
  rdfs:label "Interaction Component Description"@en ;
  rdfs:comment "A description of the interaction component (for example, the text for a given choice in a multiple-choice interaction)"@en ;
  rdfs:domain xapi:InteractionComponent ;
  rdfs:range xapi:LanguageMap .

xapi:hasInteractionComponentID a rdf:Property ;
  rdfs:label "Interaction Component ID"@en ;
  rdfs:comment "A value such as used in practice for \"cmi.interactions.n.id\" as defined in the SCORM 2004 4th Edition Run-Time Environment"@en ;
  rdfs:domain xapi:InteractionComponent ;
  rdfs:range xsd:string .

xapi:BaseEndpoint a rdfs:Class ;
  rdfs:label "Base Endpoint"@en ;
  rdfs:comment "The maximal path under all Experience API endpoints, including a slash. E.g. an LRS with a statements endpoint of http://example.com/xAPI/statements would have a Base Endpoint of http://example.com/xAPI/\""@en .

xapi:Result a rdfs:Class ;
  rdfs:label "Result"@en ;
  rdfs:comment "An optional field that represents a measured outcome related to the Statement in which it is included."@en .

xapi:hasScore a rdf:Property ;
  rdfs:label "Score"@en ;
  rdfs:comment "The score of the Agent in relation to the success or quality of the experience."@en ;
  rdfs:domain xapi:Result ;
  rdfs:range xapi:Score .

xapi:hasDuration a rdf:Property ;
  rdfs:label "Duration"@en ;
  rdfs:comment "Period of time over which the Statement occurred. Formatted according to ISO 8601 with a precision of 0.01 seconds"@en ;
  rdfs:domain xapi:Result ;
  rdfs:range xsd:duration .

xapi:isCompleted a rdf:Property ;
  rdfs:label "Completion"@en ;
  rdfs:comment "Indicates whether or not the Activity was completed."@en ;
  rdfs:domain xapi:Result ;
  rdfs:range xsd:boolean .

xapi:isSuccess a rdf:Property ;
  rdfs:label "Success"@en ;
  rdfs:comment "Indicates whether or not the attempt on the Activity was successful."@en ;
  rdfs:domain xapi:Result ;
  rdfs:range xsd:boolean .

xapi:hasResponse a rdf:Property ;
  rdfs:label "Response"@en ;
  rdfs:comment "A response appropriately formatted for the given Activity."@en ;
  rdfs:domain xapi:Result ;
  rdfs:range xsd:string .

xapi:IRL a rdfs:Class ;
  rdfs:label "International Resource Locator"@en ;
  rdfs:comment "In the context of this document, an IRL is an IRI that when translated into a URI (per the IRI to URI rules), is a URL. Some communities of practice simply use URL even if they use IRIs, which isn't as technically correct within xAPI."@en .

xapi:Account a rdfs:Class ;
  rdfs:label "Account"@en ;
  rdfs:comment "A user account on an existing system, such as a private system (LMS or intranet) or a public system (social networking site)."@en .

xapi:hasHomePage a rdf:Property ;
  rdfs:label "Home page"@en ;
  rdfs:comment "The canonical home page for the system the account is on. This is based on FOAF’s accountServiceHomePage."@en ;
  rdfs:domain xapi:Account ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:hasName a rdf:Property ;
  rdfs:label "Name"@en ;
  rdfs:domain xapi:Account ;
  rdfs:range xsd:string .

xapi:hasAccountName a rdf:Property ;
  rdfs:label "Account Name"@en ;
  rdfs:comment "The unique id or name used to log in to this account. This is based on FOAF’s accountName."@en ;
  rdfs:domain xapi:Account ;
  rdfs:range xsd:string .

xapi:Category a rdfs:Class ;
  rdfs:label "Category"@en ;
  rdfs:comment "An Activity used to categorize the Statement. \"Tags” would be a synonym. Category SHOULD be used to indicate a “profile” of xAPI behaviors, as well as other categorizations. For example: Anna attempts a biology exam, and the Statement is tracked using the CMI–5 profile. The Statement’s Activity refers to the exam, and the category is the CMI–5 profile."@en .

xapi:MSM a rdfs:Class ;
  rdfs:label "MUST / SHOULD / MAY"@en ;
  rdfs:comment "Three levels of obligation with regards to conformance to the xAPI specification. A system that fails to implement a MUST (or a MUST NOT) requirement is non-conformant. Failing to meet a SHOULD requirement is not a violation of conformity, but goes against best practices. MAY indicates an option, to be decided by the developer with no consequences for conformity."@en .

xapi:REST a rdfs:Class ;
  rdfs:label "REST"@en ;
  rdfs:comment "An architecture for designing networked web Services. It relies on HTTP methods and uses current web best practices."@en .

xapi:InverseFunctionalIdentifier a rdfs:Class ;
  rdfs:label "Inverse Functional Identifier"@en .

xapi:hasSha1sum a rdf:Property ;
  rdfs:label "Mbox SHA1"@en ;
  rdfs:comment "The SHA1 hash of a mailto IRI (i.e. the value of an mbox property). An LRS MAY include Agents with a matching hash when a request is based on an mbox."@en ;
  rdfs:domain xapi:InverseFunctionalIdentifier ;
  rdfs:range xsd:string .

xapi:hasOpenID a rdf:Property ;
  rdfs:label "Open ID"@en ;
  rdfs:comment "An openID that uniquely identifies the Agent."@en ;
  rdfs:domain xapi:InverseFunctionalIdentifier ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:Activity a rdfs:Class ;
  rdfs:label "Activity"@en ;
  rdfs:comment "An Activity is a type of Object making up the “this” in I did “this”; it is something with which an Actor interacted. It can be a unit of instruction, experience, or performance that is to be tracked in meaningful combination with a Verb. Interpretation of Activity is broad, meaning that Activities can even be tangible objects such as a chair (real or virtual). In the statement \"Anna tried a cake recipe\", the recipe constitutes the Activity in terms of the xAPI statement. Other examples of activities include a book, an e-learning course, a hike or a meeting."@en .

xapi:Profile a rdfs:Class ;
  rdfs:label "Profile"@en ;
  rdfs:comment "A construct where information about the learner or activity is kept, typically in name/document pairs that have meaning to an instructional system component."@en .

xapi:Service a rdfs:Class ;
  rdfs:label "Service"@en ;
  rdfs:comment "A software component responsible for one or more aspects of the distributed learning process. An LMS typically combines many services to design a complete learning experience."@en .

xapi:Context a rdfs:Class ;
  rdfs:label "Context"@en ;
  rdfs:comment "An optional field that provides a place to add contextual information to a Statement. All properties are optional."@en .

xapi:hasLanguage a rdf:Property ;
  rdfs:label "Language"@en ;
  rdfs:comment "Code representing the language in which the experience being recorded in this Statement (mainly) occurred in, if applicable and known. As defined in RFC 5646"@en ;
  rdfs:domain xapi:Context ;
  rdfs:range xsd:string .

xapi:hasRevision a rdf:Property ;
  rdfs:label "Revision"@en ;
  rdfs:comment "Revision of the learning activity associated with this Statement. Format is free."@en ;
  rdfs:domain xapi:Context ;
  rdfs:range xsd:string .

xapi:hasInstructor a rdf:Property ;
  rdfs:label "Instructor"@en ;
  rdfs:comment "Instructor that the Statement relates to, if not included as the Actor of the Statement."@en ;
  rdfs:domain xapi:Context ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:hasRegistration a rdf:Property ;
  rdfs:label "Registration"@en ;
  rdfs:comment "The registration that the Statement is associated with. UUID"@en ;
  rdfs:domain xapi:Context ;
  rdfs:range xsd:string .

xapi:hasPlatform a rdf:Property ;
  rdfs:label "Platform"@en ;
  rdfs:comment "Platform used in the experience of this learning activity."@en ;
  rdfs:domain xapi:Context ;
  rdfs:range xsd:string .

xapi:hasStatement a rdf:Property ;
  rdfs:label "Statement"@en ;
  rdfs:comment "Another Statement, which should be considered as context for this Statement."@en ;
  rdfs:domain xapi:Context ;
  rdfs:range xapi:Object .

xapi:hasTeam a rdf:Property ;
  rdfs:label "Team"@en ;
  rdfs:comment "Team that this Statement relates to, if not included as the Actor of the Statement."@en ;
  rdfs:domain xapi:Context ;
  rdfs:range xapi:Group .

xapi:LRS a rdfs:Class ;
  rdfs:label "Learning Record Store"@en ;
  rdfs:comment "A system that stores learning information. Prior to the xAPI most LRSs were Learning Management Systems (LMSs); however this document uses the term LRS to be clear that a full LMS is not necessary to implement the xAPI. The xAPI is dependent on an LRS to function."@en .

xapi:CommunityOfPractice a rdfs:Class ;
  rdfs:label "Community of Practice"@en ;
  rdfs:comment "A group, usually connected by a common cause, role or purpose, which operates in a common modality."@en .

xapi:InteractionActivity a rdfs:Class ;
  rdfs:label "Interaction Activity"@en ;
  rdfs:comment "Traditional e-learning has included structures for interactions or assessments. As a way to allow these practices and structures to extend Experience API's utility, this specification includes built-in definitions for interactions, which borrows from the SCORM 2004 4th Edition Data Model. These definitions are intended to provide a simple and familiar utility for recording interaction data. These definitions are simple to use, and consequently limited. It is expected that communities of practice requiring richer interactions definitions will do so through the use of extensions to an Activity's type and definition."@en .

xapi:hasStep a rdf:Property ;
  rdfs:label "Step"@en ;
  rdfs:comment "Array of interaction components"@en ;
  rdfs:domain xapi:InteractionActivity ;
  rdfs:range xapi:InteractionComponent .

xapi:hasChoice a rdf:Property ;
  rdfs:label "Choice"@en ;
  rdfs:comment "Array of interaction components"@en ;
  rdfs:domain xapi:InteractionActivity ;
  rdfs:range xapi:InteractionComponent .

xapi:hasTarget a rdf:Property ;
  rdfs:label "Target"@en ;
  rdfs:comment "Array of interaction components"@en ;
  rdfs:domain xapi:InteractionActivity ;
  rdfs:range xapi:InteractionComponent .

xapi:hasInteractionCorrectResponsesPattern a rdf:Property ;
  rdfs:label "Correct Responses Pattern"@en ;
  rdfs:comment "Corresponds to \"cmi.interactions.n.correct_responses.n.pattern\" as defined in the SCORM 2004 4th Edition Run-Time Environment, where the final n is the index of the array."@en ;
  rdfs:domain xapi:InteractionActivity ;
  rdfs:range xsd:string .

xapi:hasScale a rdf:Property ;
  rdfs:label "Scale"@en ;
  rdfs:comment "Array of interaction components"@en ;
  rdfs:domain xapi:InteractionActivity ;
  rdfs:range xapi:InteractionComponent .

xapi:hasSource a rdf:Property ;
  rdfs:label "Source"@en ;
  rdfs:comment "Array of interaction components"@en ;
  rdfs:domain xapi:InteractionActivity ;
  rdfs:range xapi:InteractionComponent .

xapi:hasInteractionType a rdf:Property ;
  rdfs:label "Interaction Type"@en ;
  rdfs:comment "As in \"cmi.interactions.n.type\" as defined in the SCORM 2004 4th Edition Run-Time Environment."@en ;
  rdfs:domain xapi:InteractionActivity ;
  rdfs:range xsd:string .

xapi:Registration a rdfs:Class ;
  rdfs:label "Registration"@en ;
  rdfs:comment "An instance of a learner experiencing a particular Activity."@en .

xapi:LanguageMap a rdfs:Class ;
  rdfs:label "LanguageMap"@en ;
  rdfs:comment "A language map is a dictionary where the key is a  RFC 5646 Language Tag, and the value is an string in the language specified in the tag. This map should be populated as fully as possible based on the knowledge of the string in question in different languages."@en .

xapi:hasLanguageVerb a rdf:Property ;
  rdfs:label "Language Verb"@en ;
  rdfs:domain xapi:LanguageMap ;
  rdfs:range xsd:string .

xapi:hasLanguageTag a rdf:Property ;
  rdfs:label "Language Tag"@en ;
  rdfs:comment "Language tags are used to help identify languages, whether spoken, written, signed, or otherwise signaled, for the purpose of communication. This includes constructed and artificial languages but excludes languages not intended primarily for human communication, such as programming languages."@en ;
  rdfs:domain xapi:LanguageMap ;
  rdfs:range xsd:string .

xapi:Actor a rdfs:Class ;
  rdfs:label "Actor"@en ;
  rdfs:comment "An identity or persona of an individual or group tracked using Statements as doing an action (Verb) within an Activity."@en .

xapi:hasInverseFunctionalIdentifier a rdf:Property ;
  rdfs:label "Inverse Functional Identifier"@en ;
  rdfs:comment "An Inverse Functional Identifier unique to the Agent."@en ;
  rdfs:domain xapi:Actor ;
  rdfs:range xapi:InverseFunctionalIdentifier .

xapi:Group a rdfs:Class ;
  rdfs:label "Group"@en ;
  rdfs:comment "A Group represents a collection of Agents and can be used in most of the same situations an Agent can be used. There are two types of Groups, anonymous and identified."@en .

xapi:hasGroupName a rdf:Property ;
  rdfs:label "Group Name"@en ;
  rdfs:comment "Name of the group."@en ;
  rdfs:domain xapi:Group ;
  rdfs:range xsd:string .

xapi:Statement a rdfs:Class .

xapi:hasContext a rdf:Property ;
  rdfs:label "Context"@en ;
  rdfs:comment "An optional field that provides a place to add contextual information to a Statement. All properties are optional."@en ;
  rdfs:domain xapi:Statement ;
  rdfs:range xapi:Context .

xapi:hasVerb a rdf:Property ;
  rdfs:label "Verb"@en ;
  rdfs:comment "Action of the Learner or Team Object. Represents the \"Did\" in \"I Did This\"."@en ;
  rdfs:domain xapi:Statement ;
  rdfs:range xapi:Verb .

xapi:hasStatementID a rdf:Property ;
  rdfs:label "Statement ID"@en ;
  rdfs:domain xapi:Statement ;
  rdfs:range xsd:integer .

xapi:hasActor a rdf:Property ;
  rdfs:label "Actor"@en ;
  rdfs:comment "An mandatory Agent or Group Object"@en ;
  rdfs:domain xapi:Statement ;
  rdfs:range xapi:Actor .

xapi:hasVersion a rdf:Property ;
  rdfs:label "Version"@en ;
  rdfs:comment "Version information in Statements helps systems that process data from an LRS get their bearings. Since the Statement data model is guaranteed consistent through all 1.0.x versions, in order to support data flow among such LRSs the LRS is given some flexibility on Statement versions that are accepted."@en ;
  rdfs:domain xapi:Statement ;
  rdfs:range xsd:string .

xapi:hasStoredTime a rdf:Property ;
  rdfs:label "Stored time"@en ;
  rdfs:domain xapi:Statement ;
  rdfs:range xsd:dateTime .

xapi:hasResult a rdf:Property ;
  rdfs:label "Result"@en ;
  rdfs:comment "An optional field that represents a measured outcome related to the Statement in which it is included."@en ;
  rdfs:domain xapi:Statement ;
  rdfs:range xapi:Result .

xapi:hasObject a rdf:Property ;
  rdfs:label "Object"@en ;
  rdfs:comment "Activity, Agent, or another Statement that is the Object of the Statement. Represents the \"This\" in \"I Did This\". Note that Objects which are provided as a value for this field should include an \"objectType\" field. If not specified, the Object is assumed to be an Activity."@en ;
  rdfs:domain xapi:Statement ;
  rdfs:range xapi:Object .

xapi:hasTimeStamp a rdf:Property ;
  rdfs:label "Time stamp"@en ;
  rdfs:domain xapi:Statement ;
  rdfs:range xsd:dateTime .

xapi:hasAttachment a rdf:Property ;
  rdfs:label "Attachment"@en ;
  rdfs:domain xapi:Statement ;
  rdfs:range xapi:Attachment .

xapi:ActivityDefinition a rdfs:Class ;
  rdfs:label "Activity Definition"@en .

xapi:hasActivityDefinitionDescription a rdf:Property ;
  rdfs:label "Activity Definition Description"@en ;
  rdfs:comment "A description of the Activity"@en ;
  rdfs:domain xapi:ActivityDefinition ;
  rdfs:range xapi:LanguageMap .

xapi:hasMoreInfo a rdf:Property ;
  rdfs:label "Activity Definition More Info"@en ;
  rdfs:comment "Resolves to a document with human-readable information about the Actiivty, which could include a way to launch the activity."@en ;
  rdfs:domain xapi:ActivityDefinition ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:hasActivityDefinitionName a rdf:Property ;
  rdfs:label "Activity Definition Name"@en ;
  rdfs:comment "The human readable visual name of the Activity"@en ;
  rdfs:domain xapi:ActivityDefinition ;
  rdfs:range xapi:LanguageMap .

xapi:hasActivityDefinitionType a rdf:Property ;
  rdfs:label "Activity Definition Type"@en ;
  rdfs:comment "The type of Activity."@en ;
  rdfs:domain xapi:ActivityDefinition ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:Object a rdfs:Class ;
  rdfs:label "Object"@en ;
  rdfs:comment "The Object of a Statement can be an Activity, Agent/Group, Sub-Statement, or Statement Reference. It is the \"this\" part of the Statement, i.e. \"I did this\"."@en .

xapi:hasObjectInteration a rdf:Property ;
  rdfs:label "Object Interaction Property"@en ;
  rdfs:domain xapi:Object ;
  rdfs:range xapi:InteractionActivity .

xapi:hasObjectDefinition a rdf:Property ;
  rdfs:label "Object Definition"@en ;
  rdfs:domain xapi:Object ;
  rdfs:range xapi:ActivityDefinition .

xapi:Grouping a rdfs:Class ;
  rdfs:label "Grouping"@en ;
  rdfs:comment "an Activity with an indirect relation to the Activity which is the Object of the Statement. For example: a course that is part of a qualification. The course has several classes. The course relates to a class as the parent, the qualification relates to the class as the grouping."@en .

xapi:Attachment a rdfs:Class ;
  rdfs:label "Attachment"@en ;
  rdfs:comment "A digital artifact providing evidence of a learning experience."@en .

xapi:hasContentType a rdf:Property ;
  rdfs:label "Content type"@en ;
  rdfs:comment "The content type of the attachment. https://www.ietf.org/rfc/rfc2046.txt?number=2046"@en ;
  rdfs:domain xapi:Attachment ;
  rdfs:range xsd:string .

xapi:hasDescription a rdf:Property ;
  rdfs:comment "Description of the attachment"@en ;
  rdfs:domain xapi:Attachment ;
  rdfs:range xapi:LanguageMap .

xapi:hasSha-2 a rdf:Property ;
  rdfs:label "SHA-2"@en ;
  rdfs:comment "The SHA-2 (SHA-256, SHA-384, SHA-512) hash of the attachment data. SHA-224 SHOULD not be used: a minimum key size of 256 bits is recommended."@en ;
  rdfs:domain xapi:Attachment ;
  rdfs:range xsd:string .

xapi:hasUsageType a rdf:Property ;
  rdfs:label "Usage Type"@en ;
  rdfs:comment "Identifies the usage of this attachment. For example: one expected use case for attachments is to include a \"completion certificate\". A type IRI corresponding to this usage should be coined, and used with completion certificate attachments."@en ;
  rdfs:domain xapi:Attachment ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:hasLength a rdf:Property ;
  rdfs:label "Length"@en ;
  rdfs:comment "The length of the attachment data in octets."@en ;
  rdfs:domain xapi:Attachment ;
  rdfs:range xsd:integer .

xapi:hasUrl a rdf:Property ;
  rdfs:label "File URL"@en ;
  rdfs:comment "An IRL at which the attachment data may be retrieved, or from which it used  to be retrievable."@en ;
  rdfs:domain xapi:Attachment ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:Agent a rdfs:Class ;
  rdfs:label "Agent"@en ;
  rdfs:comment "An Agent (an individual) is a persona or system."@en .

xapi:hasAccount a rdf:Property ;
  rdfs:label "Account"@en ;
  rdfs:comment "Account property"@en ;
  rdfs:domain xapi:Agent ;
  rdfs:range xapi:Account .

xapi:hasMbox a rdf:Property ;
  rdfs:label "mbox"@en ;
  rdfs:comment "The required format is \"mailto:email address\". Only email addresses that have only ever been and will ever be assigned to this Agent, but no others, should be used for this property and mbox_sha1sum."@en ;
  rdfs:domain xapi:Agent ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:hasAgentName a rdf:Property ;
  rdfs:label "Agent name"@en ;
  rdfs:comment "Full name of the Agent."@en ;
  rdfs:domain xapi:Agent ;
  rdfs:range xsd:string .

xapi:Score a rdfs:Class ;
  rdfs:label "Score"@en ;
  rdfs:comment "An optional field that represents the outcome of a graded Activity achieved by an Agent."@en .

xapi:hasMax a rdf:Property ;
  rdfs:label "Max"@en ;
  rdfs:comment "Decimal number greater than min (if present). Cf. ‘cmi.score.max’"@en ;
  rdfs:domain xapi:Score ;
  rdfs:range xsd:decimal .

xapi:hasMin a rdf:Property ;
  rdfs:label "Min"@en ;
  rdfs:comment "Decimal number less than max (if present)"@en ;
  rdfs:domain xapi:Score ;
  rdfs:range xsd:decimal .

xapi:hasRaw a rdf:Property ;
  rdfs:label "Raw"@en ;
  rdfs:comment "Decimal number between min and max (if present, otherwise unrestricted), inclusive."@en ;
  rdfs:domain xapi:Score ;
  rdfs:range xsd:decimal .

xapi:hasScaled a rdf:Property ;
  rdfs:label "Scaled"@en ;
  rdfs:comment "Decimal number between –1 and 1, inclusive. Cf. ‘cmi.score.scaled’ in SCORM 2004 4th Edition"@en ;
  rdfs:domain xapi:Score ;
  rdfs:range xsd:decimal .

xapi:ContextActivity a rdfs:Class ;
  rdfs:label "Context Activity"@en .

xapi:hasContextActivity a rdf:Property ;
  rdfs:label "Context Activity"@en ;
  rdfs:comment "A map of types of learning activity context that this Statement is related to."@en ;
  rdfs:domain xapi:ContextActivity ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://xmlns.com/foaf/0.1/Organization> a rdfs:Class .

xapi:Immutable a rdfs:Class ;
  rdfs:label "Immutable"@en ;
  rdfs:comment "Adjective used to describe things which cannot be changed. With some exceptions, Statements in the xAPI are immutable. This ensures that when Statements are shared between LRSs, multiple copies of the Statement remain the same."@en .

xapi:Client a rdfs:Class ;
  rdfs:label "Client"@en ;
  rdfs:comment "Refers to any entity that may interact with an LRS. A Client can be an Activity Provider, reporting tool, an LMS, or another LRS."@en .

xapi:Authorization a rdfs:Class ;
  rdfs:label "Authorization"@en ;
  rdfs:comment "The affordance of permissions based on a user or system's role; the process of making one user or system \"trusted\" by another."@en .

xapi:ActivityProvider a rdfs:Class ;
  rdfs:label "Activity Provider"@en ;
  rdfs:comment "The software object that is communicating with the LRS to record information about a learning experience. May be similar to a SCORM package in that it is possible to bundle learning assets with the software object that performs this communication, but an Activity Provider may also be separate from the experience it is reporting about."@en .

<https://w3id.org/linkml/Any> a rdfs:Class ;
  rdfs:comment "An unconstrained type or object"@en .

xapi:Extension a rdfs:Class ;
  rdfs:label "Extension"@en .

xapi:hasActorObjectType a rdf:Property ;
  rdfs:label "Actor Object Type"@en ;
  rdfs:comment "Either an Agent or Group of agents"@en ;
  rdfs:range xsd:string .

xapi:hasAuthority a rdf:Property ;
  rdfs:label "Authority"@en ;
  rdfs:comment "The authority property provides information about whom or what has asserted that this Statement is true."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:hasDisplay a rdf:Property ;
  rdfs:range xapi:LanguageMap .

xapi:hasExtension a rdf:Property ;
  rdfs:label "Extension"@en ;
  rdfs:comment "A map of other properties as needed."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:hasID a rdf:Property ;
  rdfs:label "ID"@en ;
  rdfs:comment "A UUID (see RFC 4122 for requirements, and the UUID must be in standard string form)."@en ;
  rdfs:range xsd:string .

xapi:hasMember a rdf:Property ;
  rdfs:label "Member"@en ;
  rdfs:range xapi:Agent .

xapi:hasObjectExtension a rdf:Property ;
  rdfs:label "Object Extension"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:hasObjectID a rdf:Property ;
  rdfs:label "Object ID"@en ;
  rdfs:comment "An identifier for a single unique Activity"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

xapi:hasObjectType a rdf:Property ;
  rdfs:label "Object Type"@en ;
  rdfs:comment "Can be an Activity, Agent, Group, Statement or SubStatemen"@en ;
  rdfs:range xsd:string .
