Sdcreader

io.github.SemanticDataCharter由 GitHub 账号 SemanticDataCharter 发布v4.4.1更新于 Nov 2, 2026

Read published Semantic Data Charter models: catalog search, record structure, codes, pinned schema.

概览

AI 生成的概览

读取已发布的 Semantic Data Charter 模型:可从 SDCStudio 公开目录或本地包获取目录检索、结构、代码、固定 schema 与受管记录。

可以做什么
  • 按文本检索公开目录,或按名称列出某个公开项目的模型
  • 描述单个模型:标题、项目、根记录、叶子与组件数量、Dublin Core、固定 SHA-256 的 schema 地址
  • 按文档顺序分页列出模型的叶子及其路径、类型、约束与标识链接
  • 列出某个组件的枚举值及其 IRI、定义与代码系统
  • 校验包目录的完整性并返回 SHA-256 与固定 schema 地址
  • 按模型读取磁盘上的受管数据记录:属性、各值、上下文与例外值
适用场景
适合处理 Semantic Data Charter / SDC4 模型的场景:让助手查看已发布模型的结构与代码,读取受管数据记录,或在把模型投影到 DCAT、CDIF 等其他标准前核验包。
运行要求
以 stdio 方式在本机运行,通常通过 uvx 启动 PyPI 包 sdcreader(Python)。无需账号、API 密钥或环境变量。使用目录检索和 ct_id 查询时需要访问 SDCStudio 公开目录主机,主机可在启动时通过命令行参数指定;包目录与记录相关工具只处理本地文件。
安装前请注意
所有工具均为只读且无需账号,且没有工具接受 URL,目录主机在启动时固定。记录与包从你指定的本地路径读取。读取器不对值做类型化、校验或解释,这部分仍由调用方负责。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Sdcreader,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

sdcreader

Read a published Semantic Data Charter model's package for projection into other standards.

A projection describes a model's governed data records in another standard's terms: CDIF, DCAT-US 3.0, DCAT-AP 3.0.1, HealthDCAT-AP, and whatever comes next. What every projection describes is the same evidence, the model's package, and reads it into the same shape. sdcreader is that evidence and that shape, once, with nothing about any projection in it. The four projection writers (sdc_cdif, sdc_dcat3_us, sdc_dcat3_ap, sdc_healthdcat_ap) carried it as identical copies until this package.

pip install sdcreader            # the reader, with HTTP for fetching from the public catalog (since 4.1.0 no extra is needed)
python
from sdcreader import fetch_package, load_package, read_model
pkg = load_package("samples/nhanes-participant")          # a package on diskpkg = fetch_package("xy8upneajsb8vdcmnve01g6g", save_to="pkg/")   # or from SDCStudio's public catalog, no accountmodel = read_model(pkg)
pkg.schema_url_pinned        # https://sdcstudio.axius-sdc.com/dmlib/dm-xy8u...xsd?sha256=0df4...   the exact bytes the records are validated againstmodel.title, model.leaves    # 'NHANES Participant', 153 leaves in document order, each with its path of clustersmodel.codes[ct_id]           # the enumerated values of a component with the IRI, definition and code the schema annotates them withmodel.dc("publisher")        # what the modeler wrote, None where SDCStudio's default sits

What a package is

SDCStudio generates a package for every published model and serves it publicly for models in public projects:

GET /api/v1/catalog/dm/<ct>/the catalog record: title, description, project, the artifact list (catalog.json)
GET /api/v1/catalog/dm/<ct>/<artifact>/a storage pointer, {"download_url": ..., "filename": ..., "storage": "gcs"}, for jsonld, xsd and the rest; the reader follows it
dm-<ct>.jsonldthe model and its components: type, label, description, cardinality, constraints (enumerations, units, ranges, patterns), semantic links (dcterms:identifier the library slot, dcterms:source, dcterms:publisher, skos:exactMatch, rdfs:seeAlso, prov:wasRevisionOf), contains
GET /dmlib/dm-<ct>.xsdthe schema bytes: the Dublin Core header for the model, and for each enumerated value its definition and the code it is defined by (dm-<ct>.xsd)
GET /dmlib/dm-<ct>.versions.jsonevery published version of the schema by SHA-256, with the current one (versions.json)

A package directory holds those four files. The reader refuses a directory without the JSON-LD and the schema, a JSON-LD whose identifier is not the directory's model, and a schema whose bytes are not the published current version: a projection cites the schema by URL and SHA-256, so the bytes have to be the ones that URL serves.

Two gaps in the package are on SDCStudio's issue tracker: the JSON-LD metadata drops fields the schema header carries (#748), and the header omits dc:source (#749). The reader takes the model's Dublin Core from the header, which is complete.

What the reader gives

  • ModelPackage: the four files, the SHA-256, the schema URL and its pinned form (?sha256=), the public catalog URL, and check().
  • Model: title, description, root (the governed record's cluster), components by identifier, leaves in document order (each a Leaf with its component, its path of clusters and a slug of that path, unique in the record), codes (the enumerated values per component as Code: value, IRI, definition, the code it is defined by), metadata (the JSON-LD's) and header (the schema's Dublin Core).
  • Model.dc(name): what the modeler wrote, the header first and the JSON-LD second, with SDCStudio's field defaults as unset: "Universal" for coverage, "None" for relation, "SDC Data Model (DM)" for type, blanks. A projection never publishes a default as a fact. contributors, subjects (the semicolon list), rights_url and rights_statement derive from it.
  • Component: sdc_type, label, description, data_type, constraints, links by predicate (link(p) for the first), contains, iri.
  • Constants: the leaf, numeric and quantified types; the predicate IRIs IDENTIFIER, SOURCE, PUBLISHER, EXACT, CLOSE, SEE_ALSO, HAS_UNIT; DC_DEFAULTS.

Reading a record (4.3.0)

read_record(source, model) reads a Governed Data Record, the XML instance, and joins each value to the component that defines it. source is the record's bytes, its text or a path; a record of another model is refused (RecordError), as is anything that is not an sdc4:dm-<ct_id> record.

  • Record: attributes (instance_id, instance_version, creation_timestamp, current-state, ...), values in document order, and exceptional, the values that carry an Exceptional Value.
  • RecordValue: the component, its path of clusters (root first), instances parallel to the path (which occurrence each cluster is among the same cluster's repeats under the same parent; instance_key pairs them with the clusters' identifiers, one key per cluster instance), an occurrence index for a component repeated within its cluster instance, its position, its elements as the record holds them (a quantity's units nested: {"xdquantity-value": "1", "xdquantity-units": {"label": "Trade Units", "xdstring-value": "EA"}}), and its context (act, vtb, vte, tr, modified, latitude, longitude).
  • ExceptionalValue: the ISO 21090 null flavor (code, name) and its origin: source when it stands in place of the value, recovery when sdcvalidator's recovery inserted it beside a value that failed its constraint. For recovery, RecordValue.rejected is that value, kept so a person can see it.

Cluster members sit inside adapter elements that are not components of the model; the reader passes through them. It does not type, validate or interpret values: that is the caller's work (a mapper, an exporter, a checker).

MCP server

sdcreader is also an MCP server, registered as io.github.SemanticDataCharter/sdcreader, so an assistant can read a published model the way sdcvalidator, sdcgovernance and sdcreceipt let it validate, govern and settle a record. stdio, no SDK, no account, read-only.

uvx sdcreader                    # or: sdcreader-mcp, or python -m sdcreader.mcp_serveruvx sdcreader --host https://your-sdcstudio.example   # a sovereign SDCStudio's public catalog
ToolDoes
find_modelssearch the public catalog by text, or list a public project's models by name
describe_modelone model: title, project, root record, leaf and component counts by type, Dublin Core with SDCStudio's defaults as null, the schema URL pinned to its SHA-256
list_leavesthe leaves in document order with path, type, constraints, code count and identity links, paged
list_codesone component's enumerated values with IRI, definition and code system
check_packagethe reader's integrity check on a package directory
read_recorda Governed Data Record on disk read against its model: attributes, then each value with its component, path, elements, context and Exceptional Value, paged; the model is the one the record names unless a source is given

Each model tool takes a ct_id (fetched from the host the server was started with) or a package directory on disk. No tool takes a URL: the host is fixed at start, so a caller cannot point the server elsewhere. Every tool calls the same functions as the library; the two interfaces describe one model the same way.

Tests

pip install -e ".[dev]"python -m pytest tests -q                    # includes one fetch against productionpython -m pytest tests -q -m "not network"   # offline, as CI runs it

The fixture is the NHANES Participant package of the FAIR Data Demo, the record every projection is proven on.

Versioning

The leading 4 is the SDC4 reference model, as with every Semantic Data Charter package. An addition to what the reader exposes is a minor version, a fix a patch; the major changes only when the reference model does.

License

Apache-2.0 (see LICENSE, NOTICE).

来源:README.md,提交 743f9a4

工具

6

find_models

Search SDCStudio's public catalog of published models by text, or list the models of one public project by name. Needs no account. Returns identifiers, titles and projects; pass an identifier to describe_model.

输入参数pagesearchprojectpage_size

describe_model

Describe one published model: title, description, project, the root record, how many leaves and components it has and of which types, its Dublin Core as the modeler wrote it (defaults reported as null), its semantic links, and the schema URL pinned to the SHA-256 of the bytes every record is validated against.

输入参数ct_iddirectory

list_leaves

The model's leaves in document order, each with its path of clusters, its SDC4 type, its constraints, how many enumerated values it has and its identity links. Paged: a model can have more than a thousand leaves.

输入参数ct_idlimitoffsetdirectory

list_codes

The enumerated values of one component in a model: each value with the IRI, definition and code system the published schema annotates it with.

输入参数ct_idcomponent必填directory

read_record

Read a Governed Data Record (an XML file on disk) against its model: the record's attributes and each value in document order with its component, path of clusters, elements, context and any Exceptional Value (ISO 21090 code, name, and whether it was written at the source or inserted by recovery beside a rejected value). The model is the one the record names, fetched by its identifier unless ct_id or directory is given. Paged. Does not validate the record.

输入参数ct_idlimitoffsetrecord必填directory

check_package

Run the reader's integrity check on a package directory: the JSON-LD names the directory's model, it has components, the schema is an XML Schema, and its bytes are the published current version when versions.json is present. Returns the SHA-256 and the pinned schema URL.

输入参数directory必填

版本历史

4
  1. v4.4.1最新Oct 26, 2026
  2. v4.4.0Oct 25, 2026
  3. v4.3.1Oct 25, 2026
  4. v4.2.0Oct 13, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分