
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Resussun is an implementation of the https://reconciliation-api.github.io/specs/0.1/, providing reconciliation endpoints for datasets from https://github.com/HuygensING/timbuctoo instances.
mvn clean install to build your application./target/appassembler/bin/resussun server config.ymlhttp://localhost:8080docker-compose -f docker/docker-compose.yml up -dhttp://localhost:8080This docker-compose uses the local build to run with Elasticsearch and Redis.
mvn clean install to build your applicationdocker-compose -f docker/docker-compose-local.yml up -dhttp://localhost:8080Resussun is a service written in Java using the Dropwizard framework. It makes use of https://www.elastic.co/elasticsearch as the search engine and https://redis.io for the storage of metadata and to provide caching.
Through the admin interface an administrator can create reconciliation services for any number of configured datasets from various https://github.com/HuygensING/timbuctoo instances. Resussun will use the https://graphql.org interface provided by Timbuctoo to obtain and index the data in ElasticSearch. Various metadata, like the URL of the Timbuctoo instance where the data is hosted and the URL of the Timbuctoo GUI, is stored in Redis.
Resussun will use the metadata stored in Redis to provide a new reconciliation service endpoint and with it a https://reconciliation-api.github.io/specs/0.1/#service-manifest. All https://reconciliation-api.github.io/specs/0.1/#sending-reconciliation-queries-to-a-service sent to the endpoint are transformed as queries to the ElasticSearch index and those results are then transformed back to https://reconciliation-api.github.io/specs/0.1/#reconciliation-candidates. Various other requests, for example to the https://reconciliation-api.github.io/specs/0.1/#suggest-services or to the https://reconciliation-api.github.io/specs/0.1/#data-extension-service, are transformed to GraphQL queries to Timbuctoo, before being transformed back to results according to the specification.
In the specification three important https://reconciliation-api.github.io/specs/0.1/#core-concepts
are defined: entities, types and properties. In Timbuctoo we also recognize entities within a dataset,
as well as properties on those entities. However, each entity in a dataset is placed in a collection
based on the rdf_type. So, the mapping of the core concepts to those from Timbuctoo is:
rdf_types in TimbuctooFor each entity, Timbuctoo recognizes by default four fields:
uri: The URI of the entity, and used as the identifier in the reconciliation servicetitle: A title of the entity, but may fall back to the URI as valuedescription: A description of the entity, if availableimage: A link to an image of the entity, if availableIn ElasticSearch, each entity is indexed using the uri as the identifier. Furthermore, we index the rdf_type
and the collection the entity belongs to as keywords for filtering. Furthermore, the title is indexed as a text field,
as it is the most accurate description of the entity. All other properties of the entity are concatenated and indexed
as a separate text field for additional search data. This results in the following mapping:
json5{ "properties": { "uri": { "type": "keyword" }, "types": { "type": "keyword" }, "collectionIds": { "type": "keyword" }, "title": { "type": "text" }, "values": { "type": "text" } } }
In order to search for candidates, the following ElasticSearch query is constructed:
a https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html
is used to match the given query on both the title and the values fields. As the title is more important,
it's score is boosted by 5. We use the most_fields type to find entities which match any of the two fields
and which will combine the scores from both fields.
If one or more types are passed along with the query, we have to add a filter to the ElasticSearch query. In order
to do so we use a https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html.
The boolean query will use the multi match query as a must.
But will use a https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html
for the type(s) as a filter.
This results in the following query:
json5{ "query": { "bool": { "must": { "multi_match": { "query": "<query>", // The query "fields": [ "title^5.0", // Boost score on the title field by 5 "values^1.0" ], "type": "most_fields" } }, "filter": { "term": { "types": "<type>" // One or more types to filter on } } } } }
As an example, we will be using the DWC dataset
with dataset id u74ccc032adf8422d7ea92df96cd4783f0543db3b__dwc
from the Huygens ING Timbuctoo instance: https://repository.huygens.knaw.nl.
If we would like to create a reconciliation service endpoint for this dataset, an administrator would have to call the createIndex task with the following parameters:
dataSetId: u74ccc032adf8422d7ea92df96cd4783f0543db3b__dwctimbuctooUrl: _[***]timbuctooGuiUrl: _[***]The following query is sent to the Timbuctoo GraphQL interface to obtain the properties of the entity with the uri
http://example.org/datasets/u33707283d426f900d4d33707283d426f900d4d0d/bia/collection/Places_PL00000011 from the
dwc_col_Places collection:
graphqlquery { dataSets { u74ccc032adf8422d7ea92df96cd4783f0543db3b__dwc { dwc_col_Places(uri: "http://example.org/datasets/u33707283d426f900d4d33707283d426f900d4d0d/bia/collection/Places_PL00000011") { uri title { value } description { value } image { value } rdf_type { uri } dwc_pred_Country { value } schema_nameList { items { value } } http___www_geonames_org_ontology_countryCode { value } } } } }
Besides the default four properties, we also request the properties for the country, name and country code. This results in the following response:
json5{ "data": { "dataSets": { "u74ccc032adf8422d7ea92df96cd4783f0543db3b__dwc": { "dwc_col_Places": { "uri": "http://example.org/datasets/u33707283d426f900d4d33707283d426f900d4d0d/bia/collection/Places_PL00000011", "title": { "value": "Amsterdam" }, "description": null, "image": null, "rdf_type": { "uri": "http://example.org/datasets/u33707283d426f900d4d33707283d426f900d4d0d/bia/collection/Places" }, "dwc_pred_Country": { "value": "Netherlands" }, "schema_nameList": { "items": [ { "value": "Amsterdam" } ] }, "http___www_geonames_org_ontology_countryCode": { "value": "NL" } } } } } }
This will be indexed in ElasticSearch as:
json5{ "uri": "http://example.org/datasets/u33707283d426f900d4d33707283d426f900d4d0d/bia/collection/Places_PL00000011", "types": ["http://example.org/datasets/u33707283d426f900d4d33707283d426f900d4d0d/bia/collection/Places"], "collectionIds": ["dwc_col_Places"], "title": "Amsterdam", "values": "Netherlands Amsterdam NL" }
We assume the web interface is running on localhost on port 8080
URL: /
Method: GET
curl: curl -X GET http://localhost:8080
Returns a JSON serialized list of URLs to all provided reconciliation service endpoints.
URL: /{dataSetId}
Method: GET
curl: curl -X GET http://localhost:8080/{dataSetId}
Returns a https://reconciliation-api.github.io/specs/0.1/#service-manifest
for a reconciliation service with the given dataSetId.
Consult this manifest for the various other endpoints and consult the https://reconciliation-api.github.io/specs/0.1 on how to use them.
We assume the admin interface is running on localhost on port 8081
URL: /healthcheck
Method: GET
curl: curl -X GET http://localhost:8081/healthcheck
Shows the applications health.
URL: /tasks/createIndex
Method: POST
Parameters: dataSetId, timbuctooUrl, timbuctooGuiUrl
curl: curl -X POST --data "dataSetId={dataSetId}&timbuctooUrl={timbuctooUrl}&timbuctooGuiUrl={timbuctooGuiUrl}" http://localhost:8081/tasks/createIndex
Creates a new index (reconciliation service endpoint) for a dataset with the given dataSetId
from the given timbuctooUrl. The timbuctooGuiUrl of the corresponding GUI of this Timbuctoo instance is also given.
These parameters and their values are stored as metadata in Redis.
URL: /tasks/deleteIndex
Method: POST
Parameters: dataSetId
curl: curl -X POST --data "dataSetId={dataSetId}" http://localhost:8081/tasks/deleteIndex
Deletes a index (reconciliation service endpoint) with the given dataSetId.
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务