Um breve resumo sobre xAPI

Experience API (xAPI)

Álvaro Ferreira Pires de Paiva
6 min readSep 23, 2019

O principal objetivo desse artigo é dar um pequeno resumo do xAPI, como mostrar as partes que o compõem.

Imagem retirada de https://xapi.com/overview/

O xAPI trata-se de uma especificação de API para as tecnologias de aprendizagem, possibilitando uma ampla e consistente coleta de dados das experiências de uma pessoa no sistema (online e offline) durante o processo de aprendizagem. Uma das principais vantagens, além da estrutura facilitar a coleta de dados, é a interoperabilidade, isto é, sistemas diferentes que possuem implementado xAPI conseguem se comunicar entre si sem dificuldades.

As camadas

Imagem retirada do Google Imagens

Para ajudar a entender o potencial do xAPI, podemos descrever ele em 4 camadas, sendo elas as seguintes:

  • Camada 1: é uma versão modernizada do SCORM (especificação que antecedeu o xAPI), preenchendo as lacunas que o SCORM não atende, devido aos novos meios de aprendizagem;
  • Camada 2: nos permite registrar qualquer experiência de aprendizado, incluindo aprendizado informal, fornecendo uma melhor visualização sobre o caminho de aprendizado de um indivíduo;
  • Camada 3: diferente das outras especificações que apenas tratavam como os dados eram salvos no LMS (Learning Management System), o xAPI exige que os dados, além de salvos, também sejam acessíveis, para isso faz uso de LRS (Learning Record Store);
  • Camada 4: o fluxo de atividade (Activity Streams) permite correlacionar o desempenho do trabalho com o treinamento para avaliar a eficácia do treinamento, além de outras análises que antes eram bastante difíceis de se realizar.

Declarações e instruções

Declarações ditam o formato de um momento especifico do fluxo de atividades, desta forma, transmitem uma experiência que ocorreu ou pode estar ocorrendo. Geralmente possuem uma boa tradução para a linguagem humana, exemplo: “Álvaro concluiu o ‘Treinamento de xAPI nível 1’”.

As instruções possuem 3 partes obrigatórias (podendo ser adicionado outras): “[ator] [verbo] [objeto]”. Perceba que isso cria frases do tipo “Eu fiz isso”. Pegando a declaração usada no exemplo anterior, podemos identificar as partes da instrução:

  • Ator: Álvaro;
  • Verbo: concluiu;
  • Objeto: “Treinamento de xAPI nível 1”.

Sua estrutura JSON seria:

{
"actor": "Álvaro",
"verb": "concluiu",
"object": "Treinamento de xAPI nível 1"
}

Isso foi uma instrução bem simples, porém podemos adicionar novas informações nela para que nos ajude a, por exemplo, saber qual Álvaro estamos nos referindo:

{
"actor": {
"name": "Álvaro Ferreira",
"mbox": "mailto:alvarofepipa@gmail.com"
},
"verb": {
"id": "http://example.com/verbs/completed",
"display": {"pt-BR": "concluiu"}
},
"object": {
"id": "http://example.com/activities/treinamento-xapi-1",
"definition": {
"name": { "pt-BR": "Treinamento de xAPI nível 1" }
}
}
}

Com esses outros campos na nossa instrução, podemos identificar as partes que a compõem, melhorando as possíveis correlações de declarações que podemos fazer posteriormente (por pessoa, por verbo, por objeto, etc).

Ator (Actor)

O ator é uma abstração para quem está realizando a ação presente na declaração. Ele pode assumir dois papeis distintos: Agente (Agent) ou Grupo (Group).

O Agente é um tipo de objeto que possui um ou mais identificadores que o diferenciam de outros entidades. Esse identificador pode ser referente ao seu papel em um sistema (conta de Twitter, Facebook, etc) ou algo mais genérico, como uma conta de e-mail. Nas intenções é interessante possuir apenas um único identificador do Agente, visto que os identificadores podem nos dar informações extras (a conta do Twitter nos diz sobre uma rede social especifica, outro identificador pode nos dar sobre outra rede social, porém não a da conta do Twitter) e isso pode prejudicar durante as análises. Um exemplo de Agente pode ser visto a seguir:

{
"account": {
"homePage": "https://twitter.com",
"name": "alvaroComAcento"
},
"objectType": "Agent"
}

Os Grupos são semelhantes aos Agentes, porém com uma propriedade a mais: member. Essa propriedade nos permite enumerar todos ou alguns dos membros que compõe o grupo. Diferente dos Agentes, os grupos podem ou não possuírem um identificador, a diferença é que caso haja um identificador, não é obrigatório a propriedade member e caso não haja um identificador, é obrigatório essa propriedade. Um exemplo de Grupo pode ser visto a seguir:

{
"objectType": "Group",
"member": [
{
"mbox_sha1sum": "90f96ca8c3ae315f0e40df4e16772eb6d05e3937"
},
{
"mbox_sha1sum": "ca3ffdb44c4727137e29ebf42ee80c2afdd8d328"
}
]
}

É interessante adicionar a propriedade objectType nas instruções para diferenciar quando é Agente ou Grupo. O detalhe aqui é que quando não há essa propriedade, normalmente é considerado que a declaração seja referente a um Agente. Se em determinado momento do fluxo do sistema só será feito declarações sobre Agentes ou Grupos, essa propriedade pode ser descartada, visto que a implementação irá cuidar disso.

Verbo (Verb)

São um elemento crucial nas declarações, pois é o que descreve o que aconteceu entre o ator e o objeto.

Os verbos devem serem salvos no sistema, de forma que sejam referenciados nas instruções pelo seus respectivos ids. Outra propriedade que pode ser colocado é display, nele conterá o verbo em diferentes idiomas, isso fornece interoperabilidade de dados entre sistemas de diferentes nacionalidades. Um exemplo de Verbo pode ser visto a seguir:

{
"id": "http://example.com/verbs/finished",
"display": {
"pt-BR": "finalizou",
"en-US": "finished",
}
}

O uso de id para identificar o verbo permite que outras informações sobre ele sejam salvas. Comumente são direcionados a um endereço que retorna outros dois campos: name e description, contendo respectivamente o nome e a descrição do verbo. A medida que os verbos vão evoluindo, pode-se adicionar outros campos a eles.

É desejável que se use verbos já usados pela comunidade, como: “experienced”, “attended”, “attempted”, “completed”, “passed”, “failed”, “answered”, “interacted”, “imported”, “created”, “shared” e “voided”. Criar um novo Verbo deve ser a última opção.

Objeto (Object)

Normalmente um objeto será referente a algo na aplicação (um curso, vídeo, item, etc), pode-se usar esse campo para referenciar outro ator ("objectType": "Agent"), ou uma declaração ("objectType": "StatementRef") ou uma sub-declaração ("objectType": "SubStatement").

Além da propriedade id, é interessante criar outros campos que ajudem a entender melhor o que é aquele objeto. Campos como definition, type, name (em múltiplos idiomas) edescription (em múltiplos idiomas) podem ser adicionados ao Objeto. Um exemplo de Objeto pode ser visto a seguir:

{
"id": "http://example.com/activities/treinamento-xapi-1",
"definition": {
"type": "http://example.com/activities/training",
"name": {
"pt-BR": "Treinamento de xAPI nível 1"
},
"description": {
"pt-BR": "Treinamento básico sobre xAPI, oferecido pela entidade X"
}
}
}

Outros campos

Vários outros campos podem ser adicionados as instruções. Os mais comuns são: Contexto (Context), Resultado (Result) e Extensões (Extensions). Para explicar melhor esses 3 campos, vamos usar como exemplo um curso online.

O campo de Contexto nos fornece informações contextuais as nossas instruções. É nesse campo que colocamos quem foi o instrutor do curso e quais as atividades do curso realizadas pelo Ator naquele momento.

O campo de Resultado nos dar informações sobre a finalização da declaração. Dados que indiquem se o Ator completou um curso, se obteve êxito no mesmo, sua pontuação, quantos segundos demorou para selecionar uma opção, etc, ficam nesse campo.

O campo de Extensões pode estar presente nos campos de Objeto, Contexto e Resultado. Possuem o objetivo de estender esses outros campos, a fim de atribuir algum uso especializado sobre os mesmo. Os dados que uma Extensão pode conter é arbitrário, por isso deve-se ter bastante cuidado na hora de usá-lo. Idealmente esse campo deve ser uma URI ou identificador apontando para a extensão daquele campo em que esta inserido.

Extras

Caso você queira validar as instruções, como também validar as declarações resultantes, o site do xAPI recomenda usar o xAPI Lab.

Referências

Além dos links declarados durante o artigo, usei como referência:

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Álvaro Ferreira Pires de Paiva
Álvaro Ferreira Pires de Paiva

No responses yet

Write a response