
Dannet
io.github.kuhumcstv1.0.2更新於 Oct 6, 2026
DanNet - Danish WordNet with rich lexical relationships and SPARQL access.
概覽
讓助理透過遠端 MCP 端點查詢丹麥語詞網 DanNet,取得丹麥語詞義、同義詞集與詞彙關係。
- 功能
- DanNet 是丹麥語的 WordNet,以遠端 MCP 伺服器形式提供,助理可直接查詢其語意關係。底層資料是 Apache Jena 提供的 RDF 知識圖譜,支援 SPARQL 存取與自訂相似度函式。README 說明連線後即可透過助理查詢 DanNet 的語意關係。
- 適用情境
- 適合處理丹麥語語言資料的情境:查詢詞義、同義詞集、釋義以及詞彙或語意關係,或探索丹麥語與英語詞網之間的連結。不適用於一般網路搜尋或非語言類任務。
- 執行需求
- 遠端 MCP 端點;未宣告本機執行環境、套件、帳號、API 金鑰或環境變數。README 提供 MCP 伺服器網址,並說明可在桌面用戶端中新增為自訂連接器。需要能連線至提供方主機的網路。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Dannet,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
其他 MCP 客戶端
把它新增到你客戶端的 mcpServers 設定中。
{
"mcpServers": {
"dannet": {
"type": "http",
"url": "https://wordnet.dk/mcp"
}
}
}README
[DanNet logo]
DanNet is a WordNet for the Danish language. DanNet uses RDF as its native representation at both the database level, in the application space, and as its primary serialisation format.
- Browse the data at wordnet.dk
- Query the data by integrating with AI
- Download datasets from the releases page
Table of Contents
- Dataset Formats
- Companion Datasets
- Standards
- LLM Integration (AI)
- Implementation
- Setup
- Deployment
- Database Release Workflow
Dataset Formats
DanNet is available in multiple formats to maximise compatibility:
Example: Using DanNet with Python
Differences Between Formats
While every format includes all synsets/senses/words, the CSV, WN-LMF and DMLex variants do not include every data point:
- CSV: Some data is lost when converting from an open graph to fixed tables.
- WN-LMF: Only official GWA relations are included per the standard (proprietary DanNet relations from the DanNet schema are excluded).
- DMLex: Combines DanNet with COR, DDS and COR.SEM in one file. Relations to other datasets are not included. See doc/dmlex/plan.md for the conversion rules.
For the complete dataset, use the RDF format or browse at wordnet.dk.
Companion Datasets
Several companion datasets expand the RDF graph with additional data:
Inferred Data
Additional data is implicitly inferred from the base dataset, companion datasets, and ontological metadata. These inferences can be browsed at wordnet.dk. Releases containing fully inferred graphs are specifically marked as such.
Standards
DanNet is based on the Ontolex-lemon standard combined with relations defined by the Global Wordnet Association as used in the official GWA RDF standard.
[Ontolex-lemon representation]
URI Prefixes
All DanNet URIs resolve to HTTP resources. Accessing one of these URIs via a GET request returns the data for that resource.
Schemas
DanNet has proprietary relations defined in the DanNet schema in an Ontolex-compatible way. There is also a schema for EuroWordNet concepts. Both schemas follow the RDF conventions listed by Philippe Martin.
LLM Integration
DanNet can be connected to AI tools like Claude via MCP (Model Context Protocol).
- MCP server URL:
https://wordnet.dk/mcp - Registry ID:
io.github.kuhumcst/dannet
To connect in e.g. Claude Desktop: go to Settings > Connectors > Browse Connectors, click "add a custom one", enter a name (e.g., "DanNet") and the MCP server URL.
Once connected, you can query DanNet's semantic relations directly through Claude.
Implementation
The database backend is Apache Jena, a mature RDF triplestore with OWL inference support. When represented in Jena, DanNet's relations form a queryable knowledge graph. DanNet is developed in Clojure, using libraries like Aristotle to interact with Jena.
See rationale.md for more on the design decisions.
Full Production Setup
The production deployment at wordnet.dk consists of three services managed via Docker Compose:
- DanNet — the Clojure/ClojureScript web application
- MCP server — a Python-based MCP server providing LLM access to DanNet
- Caddy — reverse proxy handling HTTPS and routing
Clojure Support
DanNet can be queried in various ways from Clojure (see queries.md). Apache Jena transactions are built-in and enable persistence via the TDB 2 layer.
Web Application
The frontend is written in ClojureScript using Rum, served by Pedestal. The app works both as a single-page application (with JavaScript) and as a regular HTML website (without). Content negotiation serves different representations (HTML, RDF, Transit+JSON) based on the request.
See doc/web.md for details.
Bootstrap Process
New releases are bootstrapped from the preceding release. The process (in dk.cst.dannet.db.bootstrap):
- Load and clean the previous version's RDF data
- Convert to triples using the current schema
- Import into Apache Jena graphs and apply release changes (only when cutting a release, i.e. when
todiffers fromfrom) - Infer additional triples via OWL/RDFS schemas
- Export the final RDF dataset (see Database Release Workflow)
Bootstrap data lives under
./bootstraprelative to the execution directory: the DanNet release assets in./bootstrap/from/<version>/(named after the release being bootstrapped from, so several can coexist) and the shared English datasets in./bootstrap/other/english/. Missing files are downloaded automatically, so manual placement is only needed when working offline.
Setup
DanNet requires Java and Clojure's official CLI tools. Dependencies are specified in deps.edn.
Development
- Start the web service using
(restart)in dk.cst.dannet.web.service — available atlocalhost:3456 - Run the frontend with shadow-cljs:
Testing a Release Build
Using Docker (requires Docker daemon running):
Or manually:
Memory Requirements
The system uses ~1.5 GB when idle and ~3 GB when rebuilding the database. A server should have at least 4 GB of available RAM.
Validating RDF (SHACL)
The dn: dataset is validated against SHACL shapes located in resources/schemas/internal/shapes/ (see dk.cst.dannet.db.shapes). This happens in several ways:
- a non-fatal check of the asserted graph runs asynchronously at every boot, logging violations and comparing counts to a known baseline,
- RDF exports of the
dn:dataset are gated: a baseline regression aborts the export, and - fixture-based tests run via
clojure -X:validate:test, which is also executed by the GitHub Actions workflow in .github/workflows/test.yml.
Validating WN-LMF
Validating DMLex
The validator in dk.cst.dannet.db.export.dmlex-validate checks both serializations of a variant against the official DMLex schemas. It needs the :validate alias:
Deployment
The production server at wordnet.dk runs as a systemd service delegating to Docker.
Service Setup
Updating the Web Service
To update the web service software without changing the database:
Database Release Workflow
When releasing a new version of the database:
-
Set
toin dk.cst.dannet.release to the new version, leavingfromon the release being bootstrapped from. The release-specific changes inmake-release-changes!only run once the two differ. -
Build the database via REPL in
dk.cst.dannet.web.service: -
Generate the export artifacts, each in its own namespace:
This writes
export/rdf/(dannet.zip,cor.zip,cor-sem.zip,framenet.zip,dds.zip,oewn-extension.zip),export/csv/dannet-csv.zip,export/wn-lmf/dannet-wn-lmf.xml.gz,export/dmlex/(dannet-dmlex-da.zip,dannet-dmlex-en.zip) andexport/synset-indegree.edn. These ship to production (step 7) and become the GitHub release assets that the next cycle bootstraps from (step 4). -
Publish a GitHub release tagged
v<version>and attach the bootstrap assets listed bybootstrap-filesin dk.cst.dannet.db.bootstrap.downloads:dannet.zip,cor.zip,cor-sem.zip,dds.zip,oewn-extension.zipandsynset-indegree.edn. The next cycle fetches these from GitHub. -
Compact the database, then zip it on the dev machine, ready for transfer:
TDB2 only reclaims the space left by in-place updates when compacted, and writes a new
Data-000Ngeneration, so restart the service afterwards. Before transferring, check that the database size divided by the triple count is in the hundreds of bytes, not the thousands. -
Stop the service on production:
-
Transfer database and export files via SFTP, then:
-
Ship the
export/synset-indegree.edngenerated in step 3. Production runs with--no-bootstrapand so never downloads it, but it is read at query time to rank search results and entity relations, and it should describe the database actually being shipped. Either location works, the first taking precedence (seeindegrees-filesin dk.cst.dannet.db.query):If neither exists the service still starts and search still works, but results come back unranked and a
:dannet.query/indegrees-unavailableerror is logged. -
Restart:
-
Bump
fromto the new version and deleteto, which then defaults tofromagain. Clear out the release-specific block inmake-release-changes!: its changes have now shipped. This readies the next cycle.
來源:README.md,提交 468d37a
工具
0版本歷史
1- v1.0.2最新Sep 16, 2026
