Commit 21be1aa5 authored by Massimo Costantini's avatar Massimo Costantini
Browse files

Updated

parent 4e559f93
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
# IVOA TAP and DataLink Server

This project implements an IVOA-compliant TAP (Table Access Protocol) and DataLink server.
This project implements a TAP (Table Access Protocol) and DataLink server, as defined by the International Virtual Observatory Alliance (IVOA).

[TAP](https://www.ivoa.net/documents/TAP/) is a protocol for querying astronomical databases using ADQL (Astronomical Data Query Language). It provides a unified HTTP interface for both synchronous and asynchronous table queries.

[DataLink](https://www.ivoa.net/documents/DataLink/) is a protocol for describing and accessing additional resources related to data retrieved via TAP or other services. It enables linking datasets, documentation, calibration files, or processing services to individual records.

Together, these standards enable interoperable access to astronomical datasets within the Virtual Observatory ecosystem.

## Philosophy

@@ -14,19 +20,20 @@ In this model, all effectful computations are represented as higher-order functi

**JavaScript version:**
```js
(IO) => Promise<T>
(req) => async (IO) => Promise<T>
```

**Python version:**
```python
Callable[[IO], Awaitable[T]]
def handler(req) -> Callable[[IO], Awaitable[T]]
```

In these examples:
- `IO` is a token that represents the **impure world** and must be explicitly passed to authorize the execution of effects.
- The return value (`Promise<T>` or `Awaitable[T]`) represents a deferred, possibly asynchronous computation, producing a value of type `T`.
- `req` contains the pure input data (e.g., HTTP request or SQL parameters),
- `IO` is a token representing the **impure world** and must be explicitly passed to authorize the execution of effects.
- The return value (`Promise<T>` or `Awaitable[T]`) represents an asynchronous computation that eventually produces a value of type `T`.

These functions do **not** perform any side effects immediately. Instead, they return deferred computations that only execute once the `IO` token is provided.
These functions **do not** perform any side effects immediately. Instead, they return deferred computations that only execute once the `IO` token is provided.

### Code Examples