# Distributed Text Services for Digital Classics

Thibault Clérice

► To cite this version:

Thibault Clérice. Distributed Text Services for Digital Classics. Digital Classicist London Seminar 2025, Jul 2025, Londres, United Kingdom. hal-05160204

HAL Id: hal-05160204

https://inria.hal.science/hal-05160204v1

Submitted on 13 Jul 2025

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>
<figure><img src="image_2.png" /></figure>

Distributed Text Services for Digital Classics

T. Clérice ¹

¹ALMAnaCH, Inria, Paris, France

11.07.2025

<figure><img src="image_3.png" /></figure>

<figure><img src="image_4.png" /></figure>

<figure><img src="image_5.png" /></figure>

<figure><img src="image_6.png" /></figure>

<figure><img src="image_7.png" /></figure>

<figure><img src="image_8.png" /></figure>
<figure><img src="image_9.png" /></figure>

The slides are a mix of previous presentation, given at DH2024, written by H. Cayless, I. Scott, M. Romanello and T. Clérice.

<figure><img src="image_10.png" /></figure>
<figure><img src="image_11.png" /></figure>

History

Overview

Introduction

Entrypoint

Collection Endoint

Navigation Endpoint

Document Endpoint

Tools

Announcement

<figure><img src="image_12.png" /></figure>

<figure><img src="image_13.png" /></figure>

<figure><img src="image_14.png" /></figure>

<figure><img src="image_15.png" /></figure>

<figure><img src="image_16.png" /></figure>

<figure><img src="image_17.png" /></figure>

<figure><img src="image_18.png" /></figure>

<figure><img src="image_19.png" /></figure>

<figure><img src="image_20.png" /></figure>

<figure><img src="image_21.png" /></figure>
<figure><img src="image_22.png" /></figure>

* First mooted at a workshop at the Harvard Center for Hellenic Studies in 2003 by Neel Smith and Chris Blackwell.

* Took the TLG and PHI digital publications of the Greek and Latin classical canon as a model.

* Developed (along with the subsequent CITE architecture) as a core support technology for the Homer Multitext.

* URN-based referencing system for authors, works, editions, and edition parts down to the character level.

* Provides ability to discover collection content, find out how to reference components of a text, retrieve those components.

<figure><img src="image_23.png" /></figure>
<figure><img src="image_24.png" /></figure>

* Homer Multitext context is important. They needed a citation scheme that could be used to map arbitrary bits of text to one another.

* The Perseus Project took it on as a citation scheme too. They have similar text alignment needs—putting translations next to source texts, for example.

* Technically only URN by syntax, as there is no official CTS URN registry.

urn:cts:CTSNAMESPACE:WORK(:PASSAGE)?
WORK = textgroup(.work(.version(.exemplar)?)??)

<figure><img src="image_25.png" /></figure>
<figure><img src="image_26.png" /></figure>

* A valid CTS URN identifying the text group "Homer poetry":
  urn:cts: greekLit: tlg0012::

* A valid CTS URN identifying the Iliad: urn:cts: greekLit: tlg0012.tlg001:

* A valid CTS URN identifying a specific English translation of the Iliad:
  urn:cts: greekLit: tlg0012.tlg001. hmt01:

* The Iliad is cited in a two-level hierarchy of "book" and "line". A valid CTS URN
  identifying one citable node line in the English translation:
  urn:cts: greekLit: tlg0012.tlg001. hmt01:10.1

* A valid CTS URN identifying one citable node at the top level of the citation
  hierarchy, i.e., all of book 10: urn:cts: greekLit: tlg0012.tlg001. hmt01:10

* A valid CTS URN identifying a range of lines in the English translation:
  urn:cts: greekLit: tlg0012.tlg001. hmt01:10.1-10.10

<figure><img src="image_27.png" /></figure>
<figure><img src="image_28.png" /></figure>

* CTS protocol is an XML-RPC-style web service.

* The text inventory is an unwieldy structure when you have very large collections.

* The "canonical" frame doesn't work so well when you're dealing with texts without a standard referencing system.

* The FRBR-influenced URN scheme doesn't necessarily fit all the scenarios we find with texts.

* More of a project than a standard: no room for building on top of CTS and feedback.

<figure><img src="image_29.png" /></figure>
<figure><img src="image_30.png" /></figure>

* Support CTS URNs (at least the text identifier part)

* Provide commensurate:

* Discovery capability for collections

* Referencing / navigation facility

* Text / text fragment retrieval

* Be more flexible and democratic, update technologies, and try to be more of a followable standard.

<figure><img src="image_31.png" /></figure>
<figure><img src="image_32.png" /></figure>

**2015** "Distributed" Text Services first floated at the 2015 Triangle Scholarly Communications Institute. Chris Blackwell and Bridget Almas were organizers. One of their group dropped out at the last minute, so they asked Hugh to join.

▶ A group formed to discuss the idea and monthly meetings began. Bridget Almas agreed to chair.

▶ Lots of ideas, lots of discussion, some quite passionate arguments.

**2017** Jonathan Robie takes over as chair.

**2018** funded by a mini grant from the Pelagios Network, we held an in person meeting at Duke where we made a lot of progress on the public draft standard, which was finalized in July.

**2018–2024** Periodic online meetings, slow but mostly steady progress.

<figure><img src="image_33.png" /></figure>
<figure><img src="image_34.png" /></figure>

2019 Workshop in Hamburg

2021 Citation Structures for TEI released as part of v. 4.2.0

2021 Online Hackathon

2022-2023 Things are stalling a bit. We decide we need another in-person sprint, but it takes a long time to come together

2024 (March) in-person meeting at Duke. Massive progress; 1.0-alpha proposal released.

2025 (July 11th) ?

<figure><img src="image_35.png" /></figure>

<figure><img src="image_36.png" /></figure>

<figure><img src="image_37.png" /></figure>

<figure><img src="image_38.png" /></figure>

<figure><img src="image_39.png" /></figure>

<figure><img src="image_40.png" /></figure>

<figure><img src="image_41.png" /></figure>

<figure><img src="image_42.png" /></figure>

<figure><img src="image_43.png" /></figure>

<figure><img src="image_44.png" /></figure>

<figure><img src="image_45.png" /></figure>

<figure><img src="image_46.png" /></figure>

<figure><img src="image_47.png" /></figure>
<figure><img src="image_48.png" /></figure>

<figure><img src="image_49.png" /></figure>

After three days in an undergrood room writing and correcting specifications...

<figure><img src="image_50.png" /></figure>

<figure><img src="image_51.png" /></figure>

<figure><img src="image_52.png" /></figure>

<figure><img src="image_53.png" /></figure>

<figure><img src="image_54.png" /></figure>

<figure><img src="image_55.png" /></figure>

<figure><img src="image_56.png" /></figure>

<figure><img src="image_57.png" /></figure>

<figure><img src="image_58.png" /></figure>

<figure><img src="image_59.png" /></figure>

<figure><img src="image_60.png" /></figure>

<figure><img src="image_61.png" /></figure>
<figure><img src="image_62.png" /></figure>

### Some major contributors on this journey include:

* Bridget Almas

* Pietro Liuzzo

* Matteo Romanello

* Jeffrey Witt

### Current Technical Committee:

* Hugh Cayless

* Thibault Clérice

* Jonathan Robie

* Ian Scott

<figure><img src="image_63.png" /></figure>

<figure><img src="image_64.png" /></figure>

<figure><img src="image_65.png" /></figure>

<figure><img src="image_66.png" /></figure>

<figure><img src="image_67.png" /></figure>

<figure><img src="image_68.png" /></figure>

<figure><img src="image_69.png" /></figure>

<figure><img src="image_70.png" /></figure>

<figure><img src="image_71.png" /></figure>

<figure><img src="image_72.png" /></figure>

<figure><img src="image_73.png" /></figure>

<figure><img src="image_74.png" /></figure>
<figure><img src="image_75.png" /></figure>

## History

### Overview

- Introduction

- Entrypoint

- Collection Endoint

- Navigation Endpoint

- Document Endpoint

## Tools

## Announcement

<figure><img src="image_76.png" /></figure>
<figure><img src="image_77.png" /></figure>

History

Overview

Introduction

Entrypoint

Collection Endoint

Navigation Endpoint

Document Endpoint

Tools

Announcement

<figure><img src="image_78.png" /></figure>

<figure><img src="image_79.png" /></figure>

<figure><img src="image_80.png" /></figure>

<figure><img src="image_81.png" /></figure>

<figure><img src="image_82.png" /></figure>

<figure><img src="image_83.png" /></figure>

<figure><img src="image_84.png" /></figure>

<figure><img src="image_85.png" /></figure>

<figure><img src="image_86.png" /></figure>

<figure><img src="image_87.png" /></figure>
<figure><img src="image_88.png" /></figure>

► https://www.w3id.org/dts

► Structured text collections

► Hierarchical structuring of the collection

► Structuring of each member text with a citation scheme

► Access

► Discovering the collection's structure

► Discovering a member's citation scheme structure

► Retrieving metadata about a specific collection, subcollection, text, or passage

► Retrieving the textual content of a text or passage

► Standardized

► Allowing clients to access any collection/text without retooling

► Allowing publishers/editors to make collections/texts FAIR

<figure><img src="image_89.png" /></figure>

<figure><img src="image_90.png" /></figure>

<figure><img src="image_91.png" /></figure>

<figure><img src="image_92.png" /></figure>

<figure><img src="image_93.png" /></figure>

<figure><img src="image_94.png" /></figure>

<figure><img src="image_95.png" /></figure>

<figure><img src="image_96.png" /></figure>

<figure><img src="image_97.png" /></figure>

<figure><img src="image_98.png" /></figure>

<figure><img src="image_99.png" /></figure>

<figure><img src="image_100.png" /></figure>

<figure><img src="image_101.png" /></figure>

<figure><img src="image_102.png" /></figure>

<figure><img src="image_103.png" /></figure>

<figure><img src="image_104.png" /></figure>

<figure><img src="image_105.png" /></figure>
<figure><img src="image_106.png" /></figure>

* Use a standard reader client to explore any text or collection

* Combine or aggregate diverse collections

* Ingest text for data processing

<figure><img src="image_107.png" /></figure>

<figure><img src="image_108.png" /></figure>

<figure><img src="image_109.png" /></figure>

<figure><img src="image_110.png" /></figure>

<figure><img src="image_111.png" /></figure>

<figure><img src="image_112.png" /></figure>
<figure><img src="image_113.png" /></figure>

**Resource** A text document.

**Collection** A named aggregation of digital Resources. Collections may contain other Collections or Resources.

**Citable Unit** A portion of a Resource identified by a reference label (string).

**Citation Tree** A tree of reference labels corresponding to the hierarchical structure of a Resource.

<figure><img src="image_114.png" /></figure>

<figure><img src="image_115.png" /></figure>

<figure><img src="image_116.png" /></figure>

<figure><img src="image_117.png" /></figure>

<figure><img src="image_118.png" /></figure>

<figure><img src="image_119.png" /></figure>

<figure><img src="image_120.png" /></figure>

<figure><img src="image_121.png" /></figure>

<figure><img src="image_122.png" /></figure>

<figure><img src="image_123.png" /></figure>

<figure><img src="image_124.png" /></figure>
<figure><img src="image_125.png" /></figure>

Classic English Novels

Victorian Novels

Emma

Dracula

Pride and Prejudice

Frankenstein

Horror Novels

19th Century H.

Frankenstein

Dracula

20th Century H.

It

Naked Lunch

Finnegan's Wake

<figure><img src="image_126.png" /></figure>

<figure><img src="image_127.png" /></figure>

<figure><img src="image_128.png" /></figure>

<figure><img src="image_129.png" /></figure>

<figure><img src="image_130.png" /></figure>

<figure><img src="image_131.png" /></figure>

<figure><img src="image_132.png" /></figure>

<figure><img src="image_133.png" /></figure>

<figure><img src="image_134.png" /></figure>

<figure><img src="image_135.png" /></figure>

<figure><img src="image_136.png" /></figure>

<figure><img src="image_137.png" /></figure>
<figure><img src="image_138.png" /></figure>

<figure><img src="image_139.png" /></figure>

<figure><img src="image_140.png" /></figure>

<figure><img src="image_141.png" /></figure>

<figure><img src="image_142.png" /></figure>

<figure><img src="image_143.png" /></figure>

<figure><img src="image_144.png" /></figure>

<figure><img src="image_145.png" /></figure>
<figure><img src="image_146.png" /></figure>

<figure><img src="image_147.png" /></figure>

## Entry

* JSON-LD

* URL templates for the other three endpoints.

* DTS version supported

<figure><img src="image_148.png" /></figure>

## Collection

* JSON-LD

* Collection structure

* Metadata about collection, subcollections, resources

<figure><img src="image_149.png" /></figure>

## Navigation

* JSON-LD

* Resource's internal structure

<figure><img src="image_150.png" /></figure>

## Document

* Textual content of a Resource or citable unit

<figure><img src="image_151.png" /></figure>
<figure><img src="image_152.png" /></figure>

History

Overview

Introduction

**Entrypoint**

Collection Endoint

Navigation Endpoint

Document Endpoint

Tools

Announcement

<figure><img src="image_153.png" /></figure>
<figure><img src="image_154.png" /></figure>

* Key information about how to navigate the other API endpoints

* URL templates for the other three endpoints

* Supported DTS version

* DTS does not restrict the URLs used by implementations

* Endpoint names?

* Argument and parameter arrangement?

* Allows for static sites

* Request example

* https://example.org/api/

<figure><img src="image_155.png" /></figure>
<figure><img src="image_156.png" /></figure>

Entrypoint example

DigiClass London

1 {

2 "@context": "https://distributed-text-services.github.io/specifications/context/1-alpha1.json",

3 "dtsVersion": "1-alpha",

4 "@id": "/api/dts/",

5 "@type": "Entrypoint",

6 "collection": "/api/dts/collection/{/?id,page,nav}",

7 "navigation" : "/api/dts/navigation/{/?resource,ref,start,end,down,tree,page}",

8 "document": "/api/dts/document/{/?resource,ref,start,end,tree,mediaType}"

9 }

<figure><img src="image_157.png" /></figure>
<figure><img src="image_158.png" /></figure>

Table of Contents
DigiClass London

History

Overview

Introduction

Entrypoint

Collection Endpoint

Navigation Endpoint

Document Endpoint

Tools

Announcement

<figure><img src="image_159.png" /></figure>
<figure><img src="image_160.png" /></figure>

## Role

* Expose the structure of the collection

* Expose metadata about the collection and its subcollections

## Collections can have nearly any structure

* Uni-directional tree of nested Collection and Resource objects

* Branches can have varying "depths"

* Resources can appear in more than one Collection

<figure><img src="image_161.png" /></figure>
<figure><img src="image_162.png" /></figure>

Top level https://example.org/api/collection/

Child Collection https://example.org/api/collection/?id=horror-novels

Child Resource https://example.org/api/collection/?id=Dracula

<figure><img src="image_163.png" /></figure>

<figure><img src="image_164.png" /></figure>

<figure><img src="image_165.png" /></figure>

<figure><img src="image_166.png" /></figure>

<figure><img src="image_167.png" /></figure>

<figure><img src="image_168.png" /></figure>

<figure><img src="image_169.png" /></figure>

<figure><img src="image_170.png" /></figure>

<figure><img src="image_171.png" /></figure>

<figure><img src="image_172.png" /></figure>

<figure><img src="image_173.png" /></figure>

<figure><img src="image_174.png" /></figure>

<figure><img src="image_175.png" /></figure>

<figure><img src="image_176.png" /></figure>

<figure><img src="image_177.png" /></figure>

<figure><img src="image_178.png" /></figure>

<figure><img src="image_179.png" /></figure>

<figure><img src="image_180.png" /></figure>
<figure><img src="image_181.png" /></figure>

* Returns a Collection or Resource object (JSON-LD)

* Returned Collection or Resource must include

* @id, @type, dtsVersion, @context

* title

* collection (URL template)

* totalParents, totalChildren

* May include a "member" list of children

* Either Collection (subcollections) or Resource (documents)

* Can carry parent instead of children

* If the object is a Resource

* URLs for the Navigation and Document endpoints

<figure><img src="image_182.png" /></figure>
<figure><img src="image_183.png" /></figure>

```json
{
  "@context": "https://distributed-text-services.github.io/specifications/context/1-alpha1.json",
  "@id": "general",
  "@type": "Collection",
  "collection": "https://example.org/api/collection/?id=page,nav",
  "dtsVersion": "1-alpha",
  "totalParents": 0,
  "totalChildren": 8,
  "title": "Classic English Novels",
  "member": [
    {
      "@id": "horror-novels",
      "title": "Horror Novels",
      "@type": "Collection",
      "collection": "https://example.org/api/collection/?id=horror-novels&page,nav",
      "totalParents": 1,
    },
    /* ... */
  ]
}
```

<figure><img src="image_184.png" /></figure>
<figure><img src="image_185.png" /></figure>

* Description

* Metadata objects

* dublinCore

* extensions (any scheme)

* Additional information on a Resource object

* download (URL)

* citeStructure (list of citationTree objects)

* mediaTypes

<figure><img src="image_186.png" /></figure>

<figure><img src="image_187.png" /></figure>

<figure><img src="image_188.png" /></figure>

<figure><img src="image_189.png" /></figure>

<figure><img src="image_190.png" /></figure>

<figure><img src="image_191.png" /></figure>

<figure><img src="image_192.png" /></figure>
<figure><img src="image_193.png" /></figure>

1 {

2 "@type": "Collection",

3 /* ... */

4 "description": "A collection of horror novels"

5 "dublinCore": {

6 "publisher": ["École Nationale des Chartes"],

7 "title": [

8 {"lang": "en", "value": "Horror Novels"}

9 }

10 },

11 "extensions": [

12 /* metadata in other schemes */

13 }]

14 }

<figure><img src="image_194.png" /></figure>
<figure><img src="image_195.png" /></figure>

1 {
2 "@type": "Resource",
3 /* ... */
4 "navigation":
5 "https://example.org/api/navigation/?resource,ref,start,end,down,tree,page",
6 "document":
7 "https://example.org/api/document/?resource,ref,start,end,tree,mediaType"
8 "description": "A collection of horror novels",
9 "dublinCore": { /* DCT metadata */ },
10 "extensions": [ /* metadata in other schemes */ ],
11 "download": "https://example.org/downloads/?id=dracula",
12 "mediaTypes": ["application/tei+xml", "text/html"],
13 "citationTrees": [
14 /* ... */
15 ]
16 }

<figure><img src="image_196.png" /></figure>
<figure><img src="image_197.png" /></figure>

1 "citationTrees": [
2 {
3 "@type": "CitationTree",
4 "citeStructure" : [
5 {
6 "@type": "CiteStructure",
7 "citeType": "poem",
8 "citeStructure": [
9 {
10 "@type": "CiteStructure",
11 "citeType": "line"
12 }
13 ]
14 }
15 ]
16 }
17 ]

<figure><img src="image_198.png" /></figure>
<figure><img src="image_199.png" /></figure>

"citationTrees": [
  {
    "@type": "CitationTree",
    "identifier": "poems"
    "citeStructure" : [
      /* ... */
    ]
  },
  {
    "@type": "CitationTree",
    "identifier": "pages"
    "citeStructure" : [
      /* ... */
    ]
  }
]

<figure><img src="image_200.png" /></figure>
<figure><img src="image_201.png" /></figure>

History

Overview

Introduction

Entrypoint

Collection Endpoint

**Navigation Endpoint**

Document Endpoint

Tools

Announcement

<figure><img src="image_202.png" /></figure>
<figure><img src="image_203.png" /></figure>

## Role

* Expose the internal structure of a Resource (one member of collection)

* Expose metadata about citable units in the Resource

* Returns a Navigation object

## Why not just give the TEI XML text?

* Tells us where to find citable units in the XML

* Tells us the citation structure without parsing the XML

<figure><img src="image_204.png" /></figure>

<figure><img src="image_205.png" /></figure>

<figure><img src="image_206.png" /></figure>

<figure><img src="image_207.png" /></figure>

<figure><img src="image_208.png" /></figure>

<figure><img src="image_209.png" /></figure>

<figure><img src="image_210.png" /></figure>

<figure><img src="image_211.png" /></figure>

<figure><img src="image_212.png" /></figure>

<figure><img src="image_213.png" /></figure>

<figure><img src="image_214.png" /></figure>

<figure><img src="image_215.png" /></figure>
<figure><img src="image_216.png" /></figure>

* member

* a section of the citation tree relative to ref/start/end

* A flat array of citable units in document order

* Can specify how deep

* Can specify an alternate citation tree

* basic contents

* @id, @type, dtsVersion, @context

* passage

* navigation

* resource

* ref or start/end

<figure><img src="image_217.png" /></figure>
<figure><img src="image_218.png" /></figure>

Level 1

<figure><img src="image_219.png" /></figure>

Level 2

<figure><img src="image_220.png" /></figure>

<figure><img src="image_221.png" /></figure>

<figure><img src="image_222.png" /></figure>

<figure><img src="image_223.png" /></figure>

<figure><img src="image_224.png" /></figure>

<figure><img src="image_225.png" /></figure>
<figure><img src="image_226.png" /></figure>

Chapter 1

Paragraph 1

Paragraph 2

...

Chapter 2

Paragraph 1

Paragraph 2

...

<figure><img src="image_227.png" /></figure>
<figure><img src="image_228.png" /></figure>

* https://example.org/api/navigation/?resource=dracula&down=1

* All the top-level citableUnits in the document's citation tree (down=1)

* Use cases

* Table of contents

* Next/Previous navigation links

<figure><img src="image_229.png" /></figure>

<figure><img src="image_230.png" /></figure>

<figure><img src="image_231.png" /></figure>
<figure><img src="image_232.png" /></figure>

1 {

2 /* ... */

3 "@context": "https://distributed-text-services.github.io/specifications/context/1-alpha1.json",

4 "dtsVersion": "1-alpha",

5 "@type": "Navigation",

6 "@id": "https://example.org/api/dts/navigation/?resource=https://en.wikisource.org/wiki/Dracula&do

7 "resource": {

8 "@id": "https://en.wikisource.org/wiki/Dracula", 7

9 "@type": "Resource",

10 /* ... */

11 "citationTrees": [

12 /* ... */

13 }

14 },

15 "member": [

16 {

17 "identifier": "C1",

18 "@type": "CitableUnit",

19 "level": 1,

20 "parent": null,

21 "citeType": "Chapter",

22 }

23 /* ... */

24

<figure><img src="image_233.png" /></figure>

<figure><img src="image_234.png" /></figure>

<figure><img src="image_235.png" /></figure>

<figure><img src="image_236.png" /></figure>

<figure><img src="image_237.png" /></figure>

<figure><img src="image_238.png" /></figure>
<figure><img src="image_239.png" /></figure>

* https://example.org/api/navigation/?resource=dracula&down=1

* https://example.org/api/navigation/?resource=dracula&down=2

* The document's whole citation tree down to the second level)

* Use cases

* Table of contents

* Building a navigation menu

* Determine structure prior to requesting text for data processing

<figure><img src="image_240.png" /></figure>

<figure><img src="image_241.png" /></figure>

<figure><img src="image_242.png" /></figure>

<figure><img src="image_243.png" /></figure>

<figure><img src="image_244.png" /></figure>

<figure><img src="image_245.png" /></figure>

<figure><img src="image_246.png" /></figure>
<figure><img src="image_247.png" /></figure>

1 /* ... */

2 "member": [
3 {
4 "identifier": "C1",
5 "@type": "CitableUnit",
6 "level": 1,
7 "parent": null,
8 "citeType": "Chapter",
9 },
10 {
11 "identifier": "C1.E1",
12 "@type": "CitableUnit",
13 "level": 2,
14 "parent": "C1",
15 "citeType": "Journal Entry",
16 },
17 {
18 "identifier": "C1.E2",
19 "@type": "CitableUnit",
20 "level": 2,
21 "parent": "C1",
22 "citeType": "Journal Entry",
23 },
24

<figure><img src="image_248.png" /></figure>
<figure><img src="image_249.png" /></figure>

* `.../navigation/?resource=dracula&down=1`

* `.../navigation/?resource=dracula&down=2`

* `.../navigation/?resource=dracula&ref=C2&down=-1`

* All the descendants below one citableUnit (C2)

* Use cases

* Build a dynamic menu of subsections when navigating a particular chapter

* `.../navigation/?resource=dracula&start=C1.E1&end=C2.E2&down=2`

<figure><img src="image_250.png" /></figure>
<figure><img src="image_251.png" /></figure>

History

Overview

Introduction

Entrypoint

Collection Endoint

Navigation Endpoint

Document Endpoint

Tools

Announcement

<figure><img src="image_252.png" /></figure>
<figure><img src="image_253.png" /></figure>

* Exposes the textual content of a Resource or citable unit

* Should return TEI/XML as the default (but this is not a "must")

* May expose other formats and media types as well

* Should also provide a link header

* Pointing to collection endpoint for the Resource

* Link: https://example.org/api/collection/?id=Dracula; rel="collection"

<figure><img src="image_254.png" /></figure>
<figure><img src="image_255.png" /></figure>

► Type of requests

An entire document .../document/?resource=Dracula

One citable unit .../document/?resource=Dracula&ref=C1

A range .../document/?resource=Dracula&start=C1.E1,P1&end=C1.E1,P2

► Requests can specify an alternate citation scheme

► https://example.org/api/document/?resource=Dracula&tree=pages&ref=5

► If the implementation exposes one for the Resource

► Alternate citation trees exposed at Navigation and Collection

► Requests can specify an alternate media type

► https:

//example.org/api/document/?resource=Dracula&mediaType=text/html

<figure><img src="image_256.png" /></figure>
<figure><img src="image_257.png" /></figure>

Table of Contents
DigiClass London

History

Overview

Introduction

Entrypoint

Collection Endoint

Navigation Endpoint

Document Endpoint

Tools

Announcement

<figure><img src="image_258.png" /></figure>
<figure><img src="image_259.png" /></figure>

Known Client Side implementations:

* DTS Aggregators

* DoTS Vue

Known API implementations that are up to date:

* DoTS (BaseX, PSL-École nationale des Chartes)

* Implementation of UNIL/FTSR

* Implementation of KDL (Javascript [Doubt on version])

* Implementation of Heidelberg

* TEI Publisher implementation (eXistDB, no navigation implementation)

* Dapytains (Python)

<figure><img src="image_260.png" /></figure>
<figure><img src="image_261.png" /></figure>

The DTS Aggregator is a client-side project that aims at demonstrating the distributed side of DTS. By connecting to various APIs, it allows a user to browse the whole network of DTS APIs.

Ultimately, a DTS Aggregator could also provide search capacities, once such an option is available in DTS specifications, across various APIs.

<figure><img src="image_262.png" /></figure>
<figure><img src="image_263.png" /></figure>

All code is written in XQuery, and a few bash scripts are used for creating or deleting a DoTS project. Input data must be in XML/TEI format.

The declaration of passages for the Navigation endpoint uses `<citeStructure/>` tags (albeit only a subset of valid `xpath` are allowed, mostly using `position()` or `xml:id`.)

Online documentation: https://chartes.github.io/dots_documentation/ Code: https://github.com/chartes/dots

<figure><img src="image_264.png" /></figure>

<figure><img src="image_265.png" /></figure>

<figure><img src="image_266.png" /></figure>

<figure><img src="image_267.png" /></figure>

<figure><img src="image_268.png" /></figure>

<figure><img src="image_269.png" /></figure>
<figure><img src="image_270.png" /></figure>

https://dracor.org/

► 21 corpora of theater plays in 14 languages/dialects (total 3.7k plays)

► It covers a period of about 2500 years (472 BC – 2017 AC)

DTS API – https://dev.dracor.org/api/v1/dts

► Builds upon an eXistDB backend

► Implementation is up to date with the standard.

<figure><img src="image_271.png" /></figure>
<figure><img src="image_272.png" /></figure>

DTS validator - https://github.com/mromanello/dts-validator/

* Built upon pytest

* Suite of tests to validate implementation of DTS specs

* Work-in-progress:

* Ready to use, up to date with unstable.

* Ready for CI/CD (already used by Dapytains)

* Features:

* Validation of remote DTS API or examples from documentation

*

* Ensures appropriate errors are raised (e.g. for invalid parameter combinations)

* Generates HTML validation report

* Planned features:

* Validation of JSON-LD/RDF via SHACL shapes

<figure><img src="image_273.png" /></figure>
<figure><img src="image_274.png" /></figure>

https://github.com/distributed-text-services/MyDapytains

* Complete implementation Distributed Text Services, up to date.

* Can be used as a webapp OR as a way to generate a static DTS API as it includes a way to parse data easily.

* Allows for mapping to at least one level of "milestone-type" nodes, which enables epigraphic and papyrological corpora, and in general document-oriented citation trees.

* Python, but the algorithm is portable to other languages, as it mostly uses XPATH, and some xQuery (albeit mostly to deal with issues in Saxon CHE Python implementation).

* Lightweight, unlike MyCapytains (we learned from our mistakes): only focus on getting data in and out. For the webapp, metadata are stored in a sqlite database.

<figure><img src="image_275.png" /></figure>
<figure><img src="image_276.png" /></figure>

https://github.com/cllg-project/hooktest

* To some extent, independent from to Distributed Text Services.

* Ability to deal with CiteStructure TEI Elements and test them beyond what schema languages can do.

* Ability to evaluate both repositories (with catalog metadata) and tei files (with CiteStructure) and provide a clear report.

<figure><img src="image_277.png" /></figure>

<figure><img src="image_278.png" /></figure>

<figure><img src="image_279.png" /></figure>

<figure><img src="image_280.png" /></figure>

<figure><img src="image_281.png" /></figure>

<figure><img src="image_282.png" /></figure>

<figure><img src="image_283.png" /></figure>

<figure><img src="image_284.png" /></figure>

<figure><img src="image_285.png" /></figure>

<figure><img src="image_286.png" /></figure>

<figure><img src="image_287.png" /></figure>

<figure><img src="image_288.png" /></figure>

<figure><img src="image_289.png" /></figure>

<figure><img src="image_290.png" /></figure>

<figure><img src="image_291.png" /></figure>
<figure><img src="image_292.png" /></figure>

Table of Contents
DigiClass London

History

Overview

Introduction

Entrypoint

Collection Endoint

Navigation Endpoint

Document Endpoint

Tools

Announcement

<figure><img src="image_293.png" /></figure>
<figure><img src="image_294.png" /></figure>

Distributed Text Services 1.0 Release Candidate Published – July 11, 2025

After years of development, independent implementations, interoperability testing, and a public comment period, the Distributed Text Services Technical Committee is pleased to announce the publication of the Distributed Text Services 1.0 Release Candidate (RC1).

We strongly encourage you to implement DTS now and share your feedback. The specification is feature-complete and stable, and we expect only minor clarifications before the final 1.0 release in three months (October 10th, 2025). Early adoption will ensure your projects are ready and help the community validate the standard in real-world use.

<figure><img src="image_295.png" /></figure>

<figure><img src="image_296.png" /></figure>

<figure><img src="image_297.png" /></figure>

<figure><img src="image_298.png" /></figure>

<figure><img src="image_299.png" /></figure>

<figure><img src="image_300.png" /></figure>

<figure><img src="image_301.png" /></figure>

<figure><img src="image_302.png" /></figure>

<figure><img src="image_303.png" /></figure>

<figure><img src="image_304.png" /></figure>

<figure><img src="image_305.png" /></figure>

<figure><img src="image_306.png" /></figure>

<figure><img src="image_307.png" /></figure>

<figure><img src="image_308.png" /></figure>

<figure><img src="image_309.png" /></figure>

<figure><img src="image_310.png" /></figure>

<figure><img src="image_311.png" /></figure>

<figure><img src="image_312.png" /></figure>

<figure><img src="image_313.png" /></figure>
<figure><img src="image_314.png" /></figure>

CLLG Project.

Ce travail a bénéficié d'une aide de l'État gérée par l'Agence Nationale de la Recherche au titre de France 2030 portant la référence « ANR-24-RRII- 0002 » et opéré par le Programme Inria Quadrant.

<figure><img src="image_315.png" /></figure>

<figure><img src="image_316.png" /></figure>

<figure><img src="image_317.png" /></figure>

<figure><img src="image_318.png" /></figure>

<figure><img src="image_319.png" /></figure>

<figure><img src="image_320.png" /></figure>

<figure><img src="image_321.png" /></figure>

<figure><img src="image_322.png" /></figure>

<figure><img src="image_323.png" /></figure>

<figure><img src="image_324.png" /></figure>

<figure><img src="image_325.png" /></figure>