vocabulary docs

What this is, and why it queried your server

sparqlwatch measures public SPARQL endpoints and publishes what it measured: it sends a few small read-only queries to each endpoint on a public list, and records what came back, per endpoint and per check.

If you found this line in a server log, that was this software asking your endpoint a question:

sparqlwatch/0.1.0 (+https://sparqlwatch.dev.k8s.semanticscience.org/about)

It reads and it does not write. Every query it sends comes from a fixed list of checks in the project's metrics.toml, and each one is a SELECT or an ASK sent as a GET with the query in the query string. Two of the checks are not queries at all: one OPTIONS preflight, to see whether a browser could reach the endpoint, and one plain GET asking for a service description. It does not crawl. It asks the one URL on its list and follows the redirects it is given, up to 5 in a chain, and stops there. Every hop goes through the same gate and the same pause as any other request, so a chain costs your server time and not extra load.

What it measured is published here, as a page per endpoint and one index of all of them. There is no score and no ranking: each endpoint carries one verdict per check, in words. Every page, this one included, is also available as RDF to a request that asks for it.

How often

No sweep runs on a schedule. Each one is started by hand, so a server sees a burst of requests and then nothing, possibly for weeks, rather than a visit at the same time every day. The one full sweep of this list so far took 1h26m21s.

That is what is true today and not a policy. If sweeps later run on a timer, this paragraph is what has to say so.

How politely

These are the prober's defaults, and they are the numbers a single operator sees:

Both of the first two numbers count a host and a port, and not a machine. Two endpoints on one server behind different ports are two as far as the pause and the count go, so they can be probed at the same time with no enforced gap between them. That is not hypothetical on this list: it carries http://eculture2.cs.vu.nl:8890/sparql and http://eculture2.cs.vu.nl:5020/sparql/, and those two are probed together. The reason is that two SPARQL engines on one host are usually two services and serialising them would halve the sweep's throughput for no politeness gain; the cost is that they are also one machine's processor and one network link. If that is your machine, the section below is the way to say so.

If your endpoint is marked dormant

Dormant is a place in this service's rotation, and it is nothing else. An endpoint marked that way is not asked in every sweep. It stays on the list, its page stays up, and the verdicts on that page stay exactly as the last sweep that really asked recorded them, with that sweep's own instant printed beside them.

It is not a verdict, and it is not a claim that your server is at fault. The checks this site publishes have a closed set of six values and dormant is not one of them: it says something about us. It is not drawn as a finding, it gets no mark against any check, and nothing here concludes from it that your endpoint does not work.

Three different things put an endpoint here, and the page that sent you says which. automatic is this service's own admission policy setting an endpoint aside on cost and silence. operator-hold is a person setting one aside by hand. not-in-this-sweep is neither, and it is described last. These are not three wordings of one thing: they differ in what was observed, in how often the endpoint is asked afterwards, and in what ends it. Read the one your row or your endpoint page names, and not the others.

Set aside automatically, and what was actually observed is narrower than the word may sound. In each of 2 sweeps in a row, the checks sent to that endpoint together spent longer than the first number below, and not one of them came back with something that could be counted as an answer: the time went on checks that were cancelled when their own budget ran out. A server that accepts the connection and then holds it open produces exactly that, and so does one that is merely slower than the budgets allow. Which it was is not something this project measured, and the mark does not say. An endpoint set aside this way is asked at most one sweep in every 7 days, and only when a person starts one, rather than in every sweep.

These four numbers are that case, and only that case:

Set aside by hand, and then nothing at all was observed. A hold is not a measurement and it is not a threshold: a sweep skips a held endpoint before it sends it anything, so no cancelled check and no cost figure lies behind the mark, and none of the four numbers above is what put it there. Neither is the cadence. A held endpoint is never asked, by any sweep, until a person lifts the hold, and it cannot answer its way back in because it is not asked. A hold put on by hand comes off by hand, at the address below. This site publishes that a person set the endpoint aside and not what for, because the reason may be one no verdict here expresses, and guessing at it on your behalf is the one thing this page will not do.

Not asked by a sweep that was repeating an earlier one, which is not a relegation at all. A sweep can be told to re-run an instant that has already run. It then asks exactly the endpoints that instant asked, so an endpoint it did not reach is one that was not in the earlier sweep either, and the run graph records that with the reason not-in-this-sweep. Nothing was observed, nothing was decided, no threshold was crossed and how often the endpoint is asked is exactly what it was before. If that is the reason your page names, none of the four numbers above applies to you and there is nothing here to overrule; a page that reported it as either of the two cases above would be describing a decision about your server that nobody took.

A person changes it, either way, at the address this page already publishes. Email michel.dumontier@maastrichtuniversity.nl and say which endpoint and which way. Nothing watches that mailbox: somebody reads the message and runs a command on the machine that holds the file, by hand, and there is no automation between the two and no service level attached. There is no button on this site, because this site is read-only and the decision lives on that machine and not here.

Why your endpoint is on the list

Because a public dump of dataset metadata named it. Nobody opted in.

The list was generated from the LOD Cloud dump of 2026-06-15, https://lod-cloud.net/versions/2026-06-15/lod-data.json. That file carried 725 endpoint entries, which came to 548 distinct URLs, of which 543 are on the list a sweep reads. The difference was dropped by rules that refuse a URL carrying credentials, a reserved documentation name, or a string that cannot be published as an identifier, and by one more that runs only where the list is generated: an entry naming a private or loopback address is dropped as the list is written, and one of the five refusals recorded for this dump came from that rule. A list handed to a sweep directly is not filtered for those addresses, which matters only to whoever is running the prober, since such an address names their own machine or a network reserved to receive nothing.

So an endpoint on the list is one somebody registered as public, and that is the only claim being made about it. It is not a claim that its operator wants it probed, which is what the next section is for.

How to ask not to be probed

Blocking the requests may or may not reduce them, and which kind of rule you write is what decides that. An endpoint that refuses us quickly, with a reset or an HTTP error, costs this project nothing, so nothing about it sets the endpoint aside: it is recorded as unreachable and asked again on the next sweep, at the same rate. An endpoint that silently drops our packets is the case the admission policy above notices, because every check then runs until it is cancelled, which is exactly what that policy measures: after 2 such sweeps in a row the endpoint is marked dormant and asked at most one sweep in every 7 days rather than once per sweep. That is fewer requests. It is not none of them, it takes two sweeps to arrive, and it is a decision about our own rotation that we can change without telling you. The list below is the thing that works.

Email michel.dumontier@maastrichtuniversity.nl and say which host to leave alone. A log line pasted in helps, and nothing more is needed. The address is a mailbox rather than a service on this machine, so it does not depend on this site being up.

Exactly what happens then, including what it does not do:

The file is named here because it is checkable. If you have asked, you can look and see your host on it, which is the only way this promise can be verified from outside.

What this site does not do

Listed rather than left to be discovered, so nobody hunts for a page that is not here.