Una introducción al entorno de BIBFRAME:

Un marco de datos enlazados para las bibliotecas

Network of interconnected nodes and lines on a gradient background that transitions from a warm golden hue at the bottom to a clear blue at the top. The nodes vary in size and are connected by thin lines, creating a web-like structure. Some nodes appear as filled circles while others are outlined, and the density of the network varies across the image, with some areas more clustered and others more sparse.

Taller práctico

21 a 25 de octubre de 2024 

 

XXXVI Semana de la Facultad de Ciencias de la Información

Universidad Autónoma de San Luis Potosí

 

Mtro. Timothy A. Thompson 

Mtra. Irmarie Fraticelli-Rodríguez 

Yale University Library 

Equipo de Servicios de Metadatos 

Irma Fraticelli

Analista de Metadatos

irma.fraticelli@yale.edu

www.linkedin.com/in/irmarie-fraticelli

Tim Thompson

Bibliotecario para la Investigación Aplicada de Metadatos

timothy.thompson@yale.edu

www.linkedin.com/in/timathompson

@timathom@indieweb.social

Día 2: Hacia un Nuevo Marco Bibliográfico

Plan para el Segundo Día

Hora

Tema

9:00–9:15

Repaso del día anterior

9:15–10:15

Actividad con Turtle, discusión

10:15–10:45

BIBFRAME

10:45–11:00

Receso

11:00–12:45

BIBFRAME en español

12:45–1:00

Discusión

Repaso del día anterior

Actividad:

¿Qué términos o conceptos nuevos aprendí ayer?

  • Creen grupos de dos o tres personas
  • Accedan a la página: https://bit.ly/glosario_talleres
  • Elijan una hoja de cálculo que representará su grupo
  • Anoten en la hoja de cálculo el término o concepto nuevo.
  • Intenten definirlo en sus propias palabras.

 

 

Crédito: Thomas Meehan, "MARC and BIBFRAME", 2014.

Crédito: Thomas Meehan, "MARC and BIBFRAME", 2014.

Crédito: Thomas Meehan, "MARC and BIBFRAME", 2014.

Crédito: Thomas Meehan, "MARC and BIBFRAME", 2014.

Crédito: Thomas Meehan, "MARC and BIBFRAME", 2014.

Crédito: Thomas Meehan, "MARC and BIBFRAME", 2014.

Lección 1: Ontologías, Tripletas y "Tortugas"

Modelos Conceptuales y Ontologías

Modelo Conceptual
Forma abstracta de pensar sobre el mundo,
de manera holística, consistente y coherente.

Ontología
Conjunto compartido de términos para codificar ese pensamiento
de forma lógica y procesable por máquinas (por ejemplo, en RDF).

Vocabularios "Universales"

Definen clases y propiedades aplicables a una amplia gama de casos y contextos.

Vocabulario Términos
schema CreativeWork > WebPage, name, author
dcterms Agent, BibliographicResource, title, creator
foaf Agent, Document, name, knows, maker
skos Concept, prefLabel, altLabel, broader, narrower

Schema.org y Bibliotecas

  • Google ha implementado servicios basados en las "Acciones de Libros" definidas por Schema.org.
  • Existen dos tipos de acciones: BorrowAction (para bibliotecas) y ReadAction (para vendedores).
  • Una biblioteca puede proporcionar a Google una fuente de sindicación con información sobre los libros en su catálogo, creando enlaces entre los resultados de búsqueda y los registros en el catálogo local.

Crédito: Gloria González, "Acciones de Préstamo y Datos Vinculados de Bibliotecas en EBSCO".

Schema.org y Bibliotecas

  • Los datos expresados utilizando Schema.org también pueden incrustarse en una página web para mejorar la indexación y la visibilidad de los catálogos de las bibliotecas.

Schema.org y Bibliotecas

Ejemplo del catálogo de la Universidad de Almería:

{
  "@context": "http://schema.org",
  "@type": "WebPage",
  "@id": "/fulldisplay/alma991001882797904991/34CBUA_UAL:VU1",
  "identifier": {
    "@type": "PropertyValue",
    "propertyID": "local",
    "value": "alma991001882797904991"
  },
  "name": "Ejército constitucionalista : división del norte manifiesto del general Francisco Villa a la nación y documentos que justifican el desconocimiento del C. Venustiano Carranza como primer jefe de la revolución 1914 / Francisco Villa.",
  "mainEntity": {
    "@type": "Book",
    "@id": "#Book",
    "inLanguage": "spa",
    "publisher": "2013",
    "about": [
      {
        "@type": "Thing",
        "name": "Carranza, Venustiano, 1859-1920"
      },
      {
        "@type": "Thing",
        "name": "Mexico -- History -- Revolution, 1910-1920"
      },
      {
        "@type": "Thing",
        "name": "México -- Historia -- Revolución, 1910-1920"
      }
    ],
    "isbn": "1-4492-9977-6",
    "bookFormat": "1 online resource (146 p.)"
  }
}

El Formato Turtle

  • Aunque JSON-LD es un formato común para intercambiar datos enlazados en la web, una de las mejores formas de aprender, escribir y leer RDF es a través de la serialización Turtle (Lenguaje Conciso de Tripletas RDF), o Terse RDF Triple Language (TTL, por sus siglas en inglés).
  • Un subconjunto de Turtle, llamado N-Triples, simplemente son líneas de tripletas (que pueden ser difíciles de leer).

Prefijos (@prefix)

  • Cuando estamos escribiendo RDF en Turtle, una de las primeras cosas que podríamos querer hacer es declarar algunos prefijos y espacios de nombres para que no tengamos que repetir esta información.
@prefix bf: <http://id.loc.gov/ontologies/bibframe/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<https://bibfra.mx/alejandra> foaf:name "Alejandra" .

Base (@base)

@base <https://bibfra.mx/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<alicia> foaf:name "Alicia" .
  • Además de declarar prefijos, también podemos usar la palabra clave @base para declarar la URI base de un archivo Turtle. Cualquier URI relativo en nuestros datos será entonces resuelto contra la base.
  • En lugar de escribir <https://bibfra.mx/alicia>, podemos declarar un URI base y luego usar URIs relativos.
@base <https://bibfra.mx/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<alejandra> foaf:name "Alejandra" .

Punto y Coma

Podemos repetir afirmaciones sobre el mismo tema usando punto y coma.

@base <https://bibfra.mx/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<alejandra> foaf:name "Alejandra" ; foaf:nick "Ale" .

Nota: Observa el espacio alrededor de la puntuación. (Espaciado no es requerido, pero facilita la lectura de la sintaxis.)

Coma

Podemos repetir objetos para el mismo predicado usando comas.

@base <https://bibfra.mx/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<alejandra> foaf:name "Alejandra", "Ale" .

Literales

  • Cuando el objeto de una declaración es un literal (no un recurso sobre el que podamos hacer declaraciones), puede tomar un tipo de dato.
  • RDF utiliza los tipos de datos definidos para XML, generalmente declarados con el prefijo xsd.
  • Los tipos de datos se indican con doble acento circunflejo, seguido por el nombre del tipo.
@base <https://bibfra.mx/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#fecha> .


<alejandra> foaf:name "Alejandra" ; <birthDate> "1946"^^xsd:date .

Nodos en Blanco

  • En RDF, a veces necesitamos decir algo sobre un recurso cuya identidad no conocemos (o nos es indiferente).
  • Estos se llaman nodos en blanco.

Nodos en Blanco

@base <https://bibfra.mx/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#fecha> .


<alejandra> foaf:name "Alejandra" ; 
foaf:knows [ a foaf:Person ] ;
foaf:knows _:b1 .

_:b1 a foaf:Person .

Nota: El ejemplo muestra dos formas diferentes de codificar un nodo en blanco: uno con un identificador (_:b1) y otro con corchetes cuadrados. Los identificadores de nodos en blanco no están garantizados de ser únicos entre diferentes archivos Turtle.

Listas

También podemos definir listas, que pueden ser complicadas en RDF, pero son fáciles de escribir en Turtle.

@base <https://bibfra.mx/> .
@prefix foaf:<http://xmlns.com/foaf/0.1/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#fecha> .


<alejandra> foaf:name "Alejandra" ; 
            foaf:knows (_:b1 _:b2 _:b3) .

Tipos

Además, Turtle define una expresión abreviada para el predicado RDF predefinido rdf:type.

Tipos

En Turtle, podemos usar la palabra "a" en lugar de rdf:type.

De esa manera, se lee casi como una oración en inglés:

Nota: rdf:type es un predicado importante porque nos permite decir de qué tipo de entidad se trata (a qué clase de cosas pertenece).

@base <https://bibfra.mx/> .
@prefix foaf:<http://xmlns.com/foaf/0.1/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#fecha> .

<alejandra> a foaf:Person .

Comentarios

Por último, podemos agregar comentarios a nuestros datos para proporcionar aclaraciones.

@base <https://bibfra.mx/> .
@prefix foaf:<http://xmlns.com/foaf/0.1/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#fecha> .

# Alejandra es una persona muy amable.

<alejandra> a foaf:Person .
  • Para ello, usamos el símbolo de la etiqueta (#).
  • Los comentarios se ignoran al procesar los datos.

Ontologías y Hojas de Cálculo

  • Ahora que sabemos cómo se expresa el formato Turtle, podemos regresar al ejemplo de la hoja de cálculo.
  • Veamos un ejemplo de una ontología sencilla expresada usando RDFS (ejemplo inspirado en el libro Linked Data: Structured Data on the Web, Wood et al., 2013).

Ontologías y Hojas de Cálculo

  • Acá tenemos un esquema semántico para la hoja de cálculo.
  • Identifica claramente las entidades y relaciones en los datos.
  • Incorpora conceptos de otros vocabularios de datos enlazados, como Friend of a Friend (FOAF) y Schema.org.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema: <http://schema.org/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .

<https://bibfra.mx/data/dataset> a schema:Dataset ;
    dcterms:title "Participantes del taller" ;
    dcterms:description "Conjunto de datos que contiene información acerca de personas, sus instituciones y las ubicaciones de estas." ;
    dcterms:created "2023-05-08"^^xsd:date ;
    dcterms:creator <https://bibfra.mx/data/person/49274> .

<https://bibfra.mx/data/person/49274> a schema:Person ;
    foaf:name "Timothy Thompson" .

<https://bibfra.mx/ontology/User> a rdfs:Class ;
    rdfs:label "User" ;
    skos:definition "Usuario con ID, nombre, nombre de usuario, institución y información de ubicación." .

<https://bibfra.mx/ontology/id> a rdf:Property ;
    rdfs:label "ID" ;
    rdfs:domain <https://bibfra.mx/ontology/User> ;
    rdfs:range xsd:integer ;
    skos:definition "Identificador único para el usuario." .

<https://bibfra.mx/ontology/name> a rdf:Property ;
    rdfs:label "Nombre" ;
    rdfs:domain <https://bibfra.mx/ontology/User> ;
    rdfs:range xsd:string ;
    skos:definition "Nombre completo del usuario." .

<https://bibfra.mx/ontology/username> a rdf:Property ;
    rdfs:label "User" ;
    rdfs:domain <https://bibfra.mx/ontology/User> ;
    rdfs:range xsd:string ;
    skos:definition "Nombre de usuario del usuario." .

<https://bibfra.mx/ontology/institution> a rdf:Property ;
    rdfs:label "Inst" ;
    rdfs:domain <https://bibfra.mx/ontology/User> ;
    rdfs:range schema:EducationalOrganization ;
    skos:definition "Institución a la que pertenece el usuario." .

<https://bibfra.mx/ontology/location> a rdf:Property ;
    rdfs:label "Loc" ;
    rdfs:domain <https://bibfra.mx/ontology/User> ;
    rdfs:range schema:Country ;
    skos:definition "País en el que se ubica la institución del usuario." .

Ejercicios con Turtle

  • Este conjunto de ejercicios mejorará tus habilidades en trabajar con RDF y el formato Turtle.
  • Para los ejercicios, vamos a usar el editor Sketch, de Zazuko.
  • Accede a la página con enlaces a los ejercicios:

bibfra.mx/2024/uaslp/turtle

Ejercicio 1

Agrega una nueva tripleta con una persona3 y asígnale un nombre.


<https://bibfra.mx/data/person/person1> <http://xmlns.com/foaf/0.1/name> "Alejandra" .
<https://bibfra.mx/data/person/person2> <http://xmlns.com/foaf/0.1/name> "Roberto" .

Ejercicio 2

Reescribe estos triples usando la característica de Turtle que nos permita evitar repetir un sujeto.


<https://bibfra.mx/data/person/person1> <http://xmlns.com/foaf/0.1/name> "Alejandra" .
<https://bibfra.mx/data/person/person1> <http://xmlns.com/foaf/0.1/knows> <https://bibfra.mx/data/person/person2> .
               
               

Ejercicio 3

Ahora acorta las URIs declarando prefijos en la parte superior y utilizando la forma calificada.


<https://bibfra.mx/data/person/person1> <http://xmlns.com/foaf/0.1/name> "Alejandra" ;
										<http://xmlns.com/foaf/0.1/knows> <https://bibfra.mx/data/person/person2> .
               

Ejercicio 4 (Opcional)

  1. Explora el vocabulario de Schema.org y descubre qué tipos de entidades y propiedades están definidas allí.

  2. Enumera cinco posibles "plantillas de tripletas" en una tabla como la de arriba, utilizando clases que puedan estar relacionadas entre sí como sujeto y objeto.

Sujeto (Dominio) Propiedad Objeto (Rango)

Ejercicio 5

  • Utiliza el predicado rdf:type o el atajo especial "a" para indicar de qué tipo de cosa se trata el sujeto de estas declaraciones.

  • Elige un término de Schema.org.

@prefix schema: <http://schema.org/>.

<> a schema: ;
   schema:name "" ;
   schema:author <> .
              

Ejercicio 6 (Opcional)

  1. Explora la especificación de vocabulario para FOAF y mira qué tipos de entidades y propiedades están definidas allí.

  2. Enumera cinco posibles "plantillas de tripletas" en una tabla como la de arriba, utilizando clases que puedan estar relacionadas entre sí como sujeto y objeto.

Sujeto (Dominio) Propiedad Objeto (Rango)

Ejercicio 7

  • Usando FOAF, elige algunos términos para comenzar a crear un perfil para ti mismo.

  • ¿Cuántas declaraciones puedes agregar?

@prefix foaf: <http://xmlns.com/foaf/0.1/>.

<> foaf:firstName "" ;
   foaf:lastName "" ;
   foaf:knows <> .
               

Ejercicio 8

  • Explora la especificación del vocabulario de Términos de Dublin Core.

  • Completa los valores faltantes y agrega más declaraciones.

@prefix dcterms: <https://purl.org/dc/terms/> .

<https://metadatafram.es/data/document> dcterms:title "Una Introducción a RDF" ;
										dcterms:creator <> ;
										dcterms:date "" .
     

Ejercicio 9

  • ¿Son válidas estas declariones, según la sintaxis de Turtle?
  • ¿Por qué sí o por qué no?
@base <urn:name/> .

<alejandra> a <Person> ; <age> 77 .
              

Ejercicio 10

  1. ¿Dónde están los nodos en blanco en estas declaraciones?

  2. Identifícalos usando comentarios.

  3. Reescribe los nodos en blanco utilizando una sintaxis alternativa y completa las declaraciones.

@prefix bf: <http://id.loc.gov/ontologies/bibframe/> .
@prefix dcterms: <https://purl.org/dc/terms/> .
@prefix schema: <http://schema.org/> .

<> a schema:Book ;
   bf:title [ 
     a bf:Title ; bf:mainTitle "" ;
     dcterms:creator [] 
   ] .
            

Ejercicio 11

  1. Ahora revisen la pequena ontología que representa los datos de la hoja de cálculo mostrada anteriormente.

  2. ¿Pueden identificar posibles problemas o inconsistencias en cómo se han modelado los datos?

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema: <http://schema.org/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .

<https://bibfra.mx/data/dataset> a schema:Dataset ;
    dcterms:title "Participantes del taller" ;
    dcterms:description "Conjunto de datos que contiene información acerca de personas, sus instituciones y las ubicaciones de estas." ;
    dcterms:created "2023-05-08"^^xsd:date ;
    dcterms:creator <https://bibfra.mx/data/person/49274> .

<https://bibfra.mx/data/person/49274> a schema:Person ;
    foaf:name "Timothy Thompson" .

<https://bibfra.mx/ontology/User> a rdfs:Class ;
    rdfs:label "User" ;
    skos:definition "Usuario con ID, nombre, nombre de usuario, institución y información de ubicación." .

<https://bibfra.mx/ontology/id> a rdf:Property ;
    rdfs:label "ID" ;
    rdfs:domain <https://bibfra.mx/ontology/User> ;
    rdfs:range xsd:integer ;
    skos:definition "Identificador único para el usuario." .

<https://bibfra.mx/ontology/name> a rdf:Property ;
    rdfs:label "Nombre" ;
    rdfs:domain <https://bibfra.mx/ontology/User> ;
    rdfs:range xsd:string ;
    skos:definition "Nombre completo del usuario." .

<https://bibfra.mx/ontology/username> a rdf:Property ;
    rdfs:label "User" ;
    rdfs:domain <https://bibfra.mx/ontology/User> ;
    rdfs:range xsd:string ;
    skos:definition "Nombre de usuario del usuario." .

<https://bibfra.mx/ontology/institution> a rdf:Property ;
    rdfs:label "Inst" ;
    rdfs:domain <https://bibfra.mx/ontology/User> ;
    rdfs:range schema:EducationalOrganization ;
    skos:definition "Institución a la que pertenece el usuario." .

<https://bibfra.mx/ontology/location> a rdf:Property ;
    rdfs:label "Loc" ;
    rdfs:domain <https://bibfra.mx/ontology/User> ;
    rdfs:range schema:Country ;
    skos:definition "País en el que se ubica la institución del usuario." .

¡Muchas Gracias!

¿Preguntas?