Files
Marc Schier 55bd944609 WoT: Types-side TD/TM-NodeSet conversion with consolidated corpus and minimal consumer compat (#4758)
# Description

Adds the pure Types-side WoT Thing Description / Thing Model to NodeSet
conversion: resolution, context, declarations, types, values,
localization, URI/format handling, bounded hashing, plus supporting
native XML codec, NodeSet alias/value helpers, RelativePathFormatter and
a JsonElement equality polyfill.

- Carrier-witness fix: a missing native event is accepted only when the
owning preserved type declares it through a `GeneratesEvent` reference
(directly or via its type/supertype chain) AND a bounded, validated
selected EventType carrier identity equals the normalized authored
native target. Native-present events get a full compare; an ambiguous
native key and a missing map stay strict; a readable document is never
archive authority.
- Support-only dependencies: additive per-instance, non-serialized
`WotDocument.IsSupportOnly(kind, name)` (ArgumentNullException guard).
The resolver marks support-only after closure; explicit selection wins;
the View builder excludes only true support-only members, so unit/actsOn
dependencies stay in the JSON. Nested controls cover inner value-only
projection under an outer value-only selection (unit kept, support-only)
versus an outer explicit SelectAll (explicit, not support-only).
- Documentation/XML comments and member-order only in commit 5c368d3a;
no logic change.
- Timeout repair on current head 6957dd46: invocation-scoped
`ArchiveDerivations` reuse removes repeated document-set derivation work
without a global cache (functional files
`WotNodeSetConverter.{Archive,ArchiveDerivations,Partitions,WoT}.cs`,
plus `WotArchiveDerivationsTests` and
`WotDocumentSetSharedValidationTests`). The original local full29
reproduction changed from 27 passed / 2 Refresh timeouts to 29 passed
with unchanged limits; official CI on this head FAILED at three
per-project time ceilings (see the evidence ledger). Temporary RF1
diagnostics were fully removed; the final tree differs from 0f7b9a09
only in the six functional files.
- Test-only net48 compile repair in commit b838907 (earlier head):
official CI on 5c368d3a was RED on the net48 build with CS1061 (see
ledger); the fix adds `using System.Threading;` and an unqualified
`CancellationTokenSource` in one test file. No production change.

Defaults: DI default document budget 256 versus the sample's explicit
1024. Corpus: canonical 540-JSON inventory; the actual manifest is 535
entries = 394 TD + 141 TM (the roles of the other 5 are not claimed).
Native Pumps assertions (9624 nodes / 339 partitions) are unchanged.
2026-10-17 20:43:25 +02:00

51 lines
1.3 KiB
JSON

{
"@context": [
"https://www.w3.org/2022/wot/td/v1.1",
{
"tm": "https://www.w3.org/2019/wot/tm#",
"ua": "http://opcfoundation.org/UA/",
"uav": "http://opcfoundation.org/UA/WoT-Binding/"
}
],
"@type": [
"uav:projection",
"dataset"
],
"id": "urn:opcfoundation.org:UA:WotAggregation:Asset:Pump2:ProcessData",
"properties": {
"DifferentialPressure": {
"@type": "dataPoint",
"tm:ref": "pump2-members#/properties/DifferentialPressure"
},
"FluidTemperature": {
"@type": "dataPoint",
"tm:ref": "pump2-members#/properties/FluidTemperature"
},
"Level": {
"@type": "dataPoint",
"tm:ref": "pump2-members#/properties/Level"
},
"MassFlow": {
"@type": "dataPoint",
"tm:ref": "pump2-members#/properties/MassFlow"
}
},
"security": "nosec_sc",
"securityDefinitions": {
"nosec_sc": {
"scheme": "nosec"
}
},
"title": "ProcessData",
"uav:projectionKind": "ThingDescription",
"uav:projects": [
{
"href": "pump2-members",
"type": "application/ld+json; profile=\"http://opcfoundation.org/UA/WoT-Binding/v1.1/projection\"",
"uav:routing": "source",
"uav:sourceName": "pump2-members"
}
],
"uav:scenario": "urn:opcfoundation.org:UA:WotAggregation:AssetManagement"
}