DID测试套件

news2024/11/27 2:48:34

DID测试套件

介绍

名称

  • DID Test Suite

网址

  • https://github.com/w3c/did-test-suite

功能

  • 用于验证DID实现是否符合W3C DID Core规范的一系列测试
  • 反映各DID方法(如did:orbdid:keydid:web等)的实现对DID Core规范的遵从程度
  • 确保不同DID方法解析器URL解引用器之间的互操作性

技术架构

  • 编程语言:HTML+JavaScript
  • 框架: Jest

维护团队

W3C的DID工作组(DID Working Group)

项目价值

  • W3C制定DID标准非常权威
  • 合作方众多,包括3Box Labs、ART GROUP LIMITED ARTRACX.COM、cheqd、ConsenSys Mesh、Knox Networks、Spruce Systems、Transmute 、EBSI等

项目组织结构

请添加图片描述

使用方式

  1. 拉取代码
git clone git@github.com:w3c/did-test-suite.git
  1. 安装依赖(请注意nodejs版本,16+)
npm i
  1. 将要测试的json文件放置到对应目录下,并添加到对应的default.js文件中
./packages/did-core-test-server/suites/implementations/
  • DID输入文件名称添加到相应测试套件的default.js文件中
  • DID方法应当将其自身添加至 did-identifierdid-core-propertiesdid-productiondid-consumption 测试套件
  • DID解析器实现只需添加至 did-resolution 测试套件
  • DID url解析器实现只需添加至did-url-dereferencers测试套件
  1. 切换到工作目录
cd ./packages/did-core-test-server
  1. 测试并生成报告
npm run test-and-generate-report

报告生成在./docs文件夹下,格式为html
其他测试方式:
a. 通过http启动

npm run start

![[Pasted image 20240417091111.png]]
b. 只测试不生成报告

npm run test

DID方法示例

参考文档: did-example-didwg.json
详细描述了 “Example DID Method” 的基本信息、支持的 DID 参数示例,以及 DID did:example:123 在不同内容类型(JSON 和 JSON-LD)下的表示及其相关元数据。

{
### DID 方法基本信息
  "didMethod": "did:example",                   定义了所使用的 DID 方法前缀。
  "implementation": "Example DID Method",       描述了具体的 DID 方法实现名称
  "implementer": "DID Working Group",           指出负责实现和维护此 DID 方法的组织或团队
  "supportedContentTypes": [                    列出了该 DID 方法支持的文档表示格式:
    "application/did+json",JSON 格式表示 DID 文档。
    "application/did+ld+json"JSON+ld 格式表示 DID 文档,包含链接数据上下文。
  ],
### DID 参数示例 
  "dids": ["did:example:123"],                   提供了一个使用该 DID 方法的实际 DID 示例列表
  "didParameters": {                             展示了与 DID 关联的可选查询参数的示例
    "hl": "did:example:123?hl=zQmWvQxTqbG2Z9HPJgG57jjwR154cKhbtJenbyYTWkjgF3e", 高亮(Highlight)参数
    "service": "did:example:123?service=agent&relativeRef=%2Fpath%2Fto%2Fresource", 服务查询参数,指定了服务类型(`agent`)和相对引用路径。
    "relativeRef": "did:example:123?service=agent&relativeRef=%2Fpath%2Fto%2Fresource",相对引用参数,与上述服务查询参数相同,但作为独立条目列出。
    "versionId": "did:example:123?versionId=0.1.0", 版本标识符参数,提供了一个版本号
    "versionTime": "did:example:123?versionTime=2020-09-26T20:14:02Z" 版本时间戳参数,给出了一个具体的时间点
  },
### DID `did:example:123` 的详细信息
  "did:example:123": {
	  #### DID Document Data Model (通用属性)
    "didDocumentDataModel": {
      "properties": {
        "id": "did:example:123",   DID 文档的唯一标识符。
        "verificationMethod": [   包含两个公钥对象,每个对象代表一种可用于验证签名的密钥
          {
            "id": "did:example:123#key-0",  key-0:使用 Ed25519 曲线的 JsonWebKey2020 类型密钥
            "type": "JsonWebKey2020",
            "controller": "did:example:123",
            "publicKeyJwk": {
              "kty": "OKP",
              "crv": "Ed25519",
              "x": "VDXDwuGKVq91zxU6q7__jLDUq8_C5cuxECgd-1feFTE"
            }
          },
          {
            "id": "did:example:123#key-1", key-1:使用 X25519 曲线的 JsonWebKey2020 类型密钥
            "type": "JsonWebKey2020",
            "controller": "did:example:123",
            "publicKeyJwk": {
              "kty": "OKP",
              "crv": "X25519",
              "x": "3kY9jl1by7pLzgJktUH-e9H6fihdVUb00-sTzkfmIl8"
            }
          }
        ],
        "authentication": ["#key-0"], 指定 `#key-0` 为身份认证所使用的密钥。
        "assertionMethod": ["#key-0"], 同样指定 `#key-0` 为断言方法所使用的密钥
        "capabilityInvocation": ["#key-0"], 指定 `#key-0` 为能力调用所使用的密钥
        "capabilityDelegation": ["#key-0"], 指定 `#key-0` 为能力委托所使用的密钥
        "keyAgreement": ["#key-1"], 指定 `#key-1` 为密钥协商所使用的密钥
        "bespokeDatetime": "2020-09-26T20:14:02Z", 一个定制的日期时间字符串
        "bespokeDouble": 1.2, 一个定制的双精度浮点数
        "bespokeInteger": 5, 定制的整数
        "bespokeBoolean": true, 定制的布尔值
        "bespokeNull": null  定制的空值
      }
    },
    #### application/did+json 表示
    "application/did+json": {
      "didDocumentDataModel": {
        }
      },
      "representation": "{\"id\":\"did:example:123\",\"verificationMethod\":[{\"id\":\"did:example:123#key-0\",\"type\":\"JsonWebKey2020\",\"controller\":\"did:example:123\",\"publicKeyJwk\":{\"kty\":\"OKP\",\"crv\":\"Ed25519\",\"x\":\"VDXDwuGKVq91zxU6q7__jLDUq8_C5cuxECgd-1feFTE\"}},{\"id\":\"did:example:123#key-1\",\"type\":\"JsonWebKey2020\",\"controller\":\"did:example:123\",\"publicKeyJwk\":{\"kty\":\"OKP\",\"crv\":\"X25519\",\"x\":\"3kY9jl1by7pLzgJktUH-e9H6fihdVUb00-sTzkfmIl8\"}}],\"authentication\":[\"#key-0\"],\"assertionMethod\":[\"#key-0\"],\"capabilityInvocation\":[\"#key-0\"],\"capabilityDelegation\":[\"#key-0\"],\"keyAgreement\":[\"#key-1\"],\"bespokeDatetime\":\"2020-09-26T20:14:02Z\",\"bespokeDouble\":1.2,\"bespokeInteger\":5,\"bespokeBoolean\":true,\"bespokeNull\":null}",
      提供了以纯 JSON 格式表示的 DID 文档字符串,与 DID Document Data Model 中的通用属性一致。
      "didDocumentMetadata": {   描述了 DID 文档的元数据
        "canonicalId": "did:example:one-two-three",DID 文档 ID 相同
        "equivalentId": "did:example:one-two-three",DID 文档 ID 相同,
        "created": "2020-09-26T20:14:02.000Z", 创建的时间戳
        "updated": "2020-09-27T20:14:02.000Z", 更新的时间戳
        "nextUpdate": "2020-09-28T20:14:02.000Z",  下次更新的时间戳
        "versionId": "0.1.0",  版本标识号
        "nextVersionId": "0.2.0" 下一版本标识号
      },
      "didResolutionMetadata": {
        "contentType": "application/did+json" 描述了 DID 解析过程中的元数据,仅包含 **contentType** 字段,其值为
      }
    },
    #### application/did+ld+json 表示
    "application/did+ld+json": {
      "didDocumentDataModel": {
        "representationSpecificEntries": {
          "@context": ["https://www.w3.org/ns/did/v1"]
        }
      },
      "representation": "{\"@context\":[\"https://www.w3.org/ns/did/v1\"],\"id\":\"did:example:123\",\"verificationMethod\":[{\"id\":\"did:example:123#key-0\",\"type\":\"JsonWebKey2020\",\"controller\":\"did:example:123\",\"publicKeyJwk\":{\"kty\":\"OKP\",\"crv\":\"Ed25519\",\"x\":\"VDXDwuGKVq91zxU6q7__jLDUq8_C5cuxECgd-1feFTE\"}},{\"id\":\"did:example:123#key-1\",\"type\":\"JsonWebKey2020\",\"controller\":\"did:example:123\",\"publicKeyJwk\":{\"kty\":\"OKP\",\"crv\":\"X25519\",\"x\":\"3kY9jl1by7pLzgJktUH-e9H6fihdVUb00-sTzkfmIl8\"}}],\"authentication\":[\"#key-0\"],\"assertionMethod\":[\"#key-0\"],\"capabilityInvocation\":[\"#key-0\"],\"capabilityDelegation\":[\"#key-0\"],\"keyAgreement\":[\"#key-1\"],\"bespokeDatetime\":\"2020-09-26T20:14:02Z\",\"bespokeDouble\":1.2,\"bespokeInteger\":5,\"bespokeBoolean\":true,\"bespokeNull\":null}",
      提供了以 JSON-LD 格式表示的 DID 文档字符串,包含了 `"@context"` 属性,其值为 `"https://www.w3.org/ns/did/v1"`,确保文档符合 W3C DID 规范的语义。
      "didDocumentMetadata": {},
      "didResolutionMetadata": {
        "contentType": "application/did+ld+json"
      }
    }
  }
}

DID解析器示例

参考文档: resolver-example-didwg.json
详细描述了 “Example Resolver” 解析器的基本信息、预期结果分类,以及在不同条件下解析 DID 的七个执行案例及其输入、输出细节。这些案例涵盖了成功解析、DID 格式错误、DID 不存在、DID 已撤销等不同场景,以及对 JSON、JSON-LD 和 CBOR 等不同内容类型的支持

{

  "implementation": "Example Resolver",   指定解析器的名称。

  "implementer": "DID Working Group",     明确解析器由 DID Working Group 开发和维护
 
  "didMethod": "did:example",             指出该解析器适用于以 `did:example` 为前缀的 DID

  "expectedOutcomes": {             定义了解析过程中可能出现的几种典型结果类别,并关联了执行案例的索引

    "defaultOutcome": [ 0, 4, 5, 6 ],    对应成功解析且无特殊状态的案例(索引为 0456"invalidDidErrorOutcome": [ 1 ],     对应解析时因 DID 格式不正确导致的错误案例(索引为 1"notFoundErrorOutcome": [ 2 ],       对应解析时因 DID 不存在导致的错误案例(索引为 2"representationNotSupportedErrorOutcome": [ ],  未关联任何案例,可能表示此解析器目前不处理任何特定表示不支持的情况

    "deactivatedOutcome": [ 3 ]        对应解析到已撤销/停用的 DID 的案例(索引为 3},

  "executions": [                      包含多个解析器执行案例

    {

      "function": "resolve",         调用的解析器函数,resolve为 解析 DID 并返回 DID 文档

      "input": {

        "did": "did:example:111",    待解析的 DID

        "resolutionOptions": {       解析选项,可能包含接受的内容类型(`accept`}

      },

      "output": {                    函数调用的预期输出  

        "didResolutionMetadata": {      解析过程的元数据,可能包含错误信息(`error`)或内容类型(`contentType`},

        "didDocument": {    成功解析时返回的 DID 文档,包含 `id``verificationMethod``service` 等字段;若解析失败,则为 `null`

          "id": "did:example:111",

          "verificationMethod": [],

          "service": []

        },

        "didDocumentMetadata": {DID 文档相关的元数据,如 `canonicalId`(规范化的 DID)、`equivalentId`(等价的 DID 列表)或 `deactivated`(是否已撤销/停用)。

          "canonicalId": "did:example:oneoneone",

          "equivalentId": ["did:example:one1one", "did:example:1one1"]

        }

      }

    },

    {

      "function": "resolve",

      "input": {

        "did": "did:example_222",

        "resolutionOptions": {

        }

      },

      "output": {

        "didResolutionMetadata": {

          "error": "invalidDid"

        },

        "didDocument": null,

        "didDocumentMetadata": {

        }

      }

    },

    {

      "function": "resolve",

      "input": {

        "did": "did:example:333",

        "resolutionOptions": {

        }

      },

      "output": {

        "didResolutionMetadata": {

          "error": "notFound"

        },

        "didDocument": null,

        "didDocumentMetadata": {

        }

      }

    },

    {

      "function": "resolve",

      "input": {

        "did": "did:example:444",

        "resolutionOptions": {

        }

      },

      "output": {

        "didResolutionMetadata": {

        },

        "didDocument": {

          "id": "did:example:444",

          "verificationMethod": [],

          "service": []

        },

        "didDocumentMetadata": {

          "deactivated": true

        }

      }

    },

    {

      "function": "resolveRepresentation",  解析 DID 并返回特定内容类型的 DID 文档流

      "input": {

        "did": "did:example:555",

        "resolutionOptions": {

          "accept": "application/did+json" 接受内容类型: `"application/did+json"`

        }

      },

      "output": {

        "didResolutionMetadata": {

          "contentType": "application/did+json"

        },

        "didDocumentStream": "{\"id\":\"did:example:555\",\"verificationMethod\":[],\"service\":[]}",

        "didDocumentMetadata": {

        }

      }

    },

    {

      "function": "resolveRepresentation",

      "input": {

        "did": "did:example:666",

        "resolutionOptions": {

          "accept": "application/did+ld+json"  接受内容类型: `"application/did+cbor"`
 
        }

      },

      "output": {

        "didResolutionMetadata": {

          "contentType": "application/did+ld+json"

        },

        "didDocumentStream": "{\"@context\":\"https://www.w3.org/ns/did/v1\",\"id\":\"did:example:666\",\"verificationMethod\":[],\"service\":[]}",  返回一个 CBOR 编码的 DID 文档流

        "didDocumentMetadata": {

        }

      }

    },

    {

      "function": "resolveRepresentation",

      "input": {

        "did": "did:example:777",

        "resolutionOptions": {

          "accept": "application/did+cbor"

        }

      },

      "output": {

        "didResolutionMetadata": {

          "contentType": "application/did+cbor"

        },

        "didDocumentStream": "62a36469646f6469653a6178706d656c313a3332767272656669636974616f694d6e74656f68806473677265697665630080",

        "didDocumentMetadata": {

        }

      }

    }

  ]

}

DID URL-解引用器示例

参考文档: dereferencer-example-didwg.json
详细描述了 “Example Dereferencer” 解析器的基本信息、预期结果分类,以及在不同条件下解析 DID URL 的四个执行案例及其输入、输出细节。这些案例涵盖了成功解析 DID 文档和其内部资源、DID URL 格式错误以及资源未找到等不同场景,所有案例都要求解析结果以 JSON 格式返回。

{

  "implementation": "Example Dereferencer",

  "implementer": "DID Working Group",

  "didMethod": "did:example",                指出该解析器适用于以 `did:example` 为前缀的 DID URL

  "expectedOutcomes": {                   定义了解析过程中可能出现的几种典型结果类别,并关联了执行案例的索引

    "defaultOutcome": [ 0, 1 ],           对应成功解析且无特殊状态的案例(索引为 01)。

    "invalidDidUrlErrorOutcome": [ 2 ],   对应解析时因 DID URL 格式不正确导致的错误案例(索引为 2)。

    "notFoundErrorOutcome": [ 3 ]          对应解析时因请求的资源不存在导致的错误案例(索引为 3},

  "executions": [

    {

      "function": "dereference",

      "input": {

        "didUrl": "did:example:222",         待解析的 DID URL

        "dereferenceOptions": {

          "accept": "application/did+json"    解析选项,包含接受的内容类型(`accept`}

      },

      "output": {

        "dereferencingMetadata": {           解析过程的元数据,可能包含错误信息(`error`)或内容类型(`contentType`)。

          "contentType": "application/did+json"

        },

        "contentStream": "{\"id\": \"did:example:222\",\"verificationMethod\": [{\"id\": \"did:example:222#key-1\",\"controller\": \"did:example:222\",\"publicKeyBase58\": \"F6NxfeuPJ5NhmDM6QT2TeSFxcnnkQBgtv6yfQziS5NPM\"}],\"service\": []}",
返回一个完整的 DID 文档内容,包含 `id`、一个 `verificationMethod`(公钥信息)和空的 `service` 列表
        "contentMetadata": {

        }

      }

    },

    {

      "function": "dereference",

      "input": {

        "didUrl": "did:example:222#key-1",

        "dereferenceOptions": {

          "accept": "application/did+json"

        }

      },

      "output": {

        "dereferencingMetadata": {

          "contentType": "application/did+json"

        },

        "contentStream": "{\"id\": \"did:example:222#key-1\",\"controller\": \"did:example:222\",\"publicKeyBase58\": \"F6NxfeuPJ5NhmDM6QT2TeSFxcnnkQBgtv6yfQziS5NPM\"}",

        "contentMetadata": {

        }

      }

    },

    {

      "function": "dereference",

      "input": {

        "didUrl": "did:example_333",

        "dereferenceOptions": {

          "accept": "application/did+json"

        }

      },

      "output": {

        "dereferencingMetadata": {

          "error": "invalidDidUrl"

        },

        "contentStream": "",

        "contentMetadata": {

        }

      }

    },

    {

      "function": "dereference",

      "input": {

        "didUrl": "did:example:444",

        "dereferenceOptions": {

          "accept": "application/did+ld+json"

        }

      },

      "output": {

        "dereferencingMetadata": {

          "error": "notFound"

        },

        "contentStream": "",

        "contentMetadata": {

        }

      }

    }

  ]

}

测试内容解析

文档中列举的“✅”符号表示特定测试已成功通过,即某个DID方法在特定测试点上符合DID Core规范要求。例如:

  • Metadata Structure 测试表明,对于给定的DID(如did:orb:bafkreiazah4qrybzyapmrmk2dhldz24...),其文档中的元数据结构正确采用了application/did+ld+json格式,且属性值均为字符串,符合规范。

  • DID Document Metadata 测试关注的是DID文档元数据中的canonicalId属性。结果显示,预期的规范化标识符(canonicalId)在解析过程中得到了正确的生成或验证,与规范中的预期结果一致。

  • did-core-properties 测试集中于DID文档中核心属性的结构和内容。例如,针对did:key:z6LSn9Ah7d33uokFv2pg66BMN5UY72Wt...,其所有属性值均为字符串,并且整个元数据结构符合规范要求。

  • MATTR Internal Libraries 示例展示了MATTR公司内部库对did:sovdid:web两种方法的支持情况。测试结果显示,这些库在处理特定DID时能够正确生成或验证相关的密钥、类型、链接等信息。

did-core-properties测试

此类测试主要关注DID文档中定义的核心属性是否符合DID Core规范。这包括:

  1. DID Subject(主体):验证DID文档中的id属性(即DID本身)是否正确设置,格式是否符合规范定义的ABNF(Augmented Backus-Naur Form)规则。

  2. Controller(控制器):检查DID文档中是否存在可选的controller属性,并确认其值是否为有效的DID或DID URL,代表了对DID文档具有控制权的实体。

  3. Verification Methods(验证方法):确保文档中列出的验证方法(如公钥、加密密钥等)结构正确,包括方法类型、公钥材料、关联的密钥用途标签等,并验证它们是否遵循规范的约束,如不包含保留字符等。

  4. Service Endpoints(服务端点):验证服务端点对象的完整性,包括类型、服务URL、关联的DID URL等属性是否正确设定,且类型为字符串。

  5. Metadata(元数据):检查DID文档的元数据(如创建时间、更新时间、版本标识符等)是否符合规范要求,格式正确且含义清晰。

did-identifier测试

这类测试专注于验证DID标识符本身的结构和语义。包括:

  1. Syntax(语法):确保DID字符串遵循规范定义的通用语法,如由did:前缀、方法名、方法特定的标识符段(可能包含路径、查询参数等)组成,各部分之间使用冒号分隔。

  2. Parameters(参数):检查DID中可能存在的版本标识符(versionId)、版本时间戳(versionTime)等参数是否符合规范定义的格式和使用规则。

  3. Relative DID URLs(相对DID URL):验证相对DID URL在解析和使用过程中的正确性,包括其相对于基DID的构建方式、解析后的绝对DID URL是否符合预期。

did-production测试

这类测试评估DID生成工具或库是否能正确地依据DID方法规范创建合法的DID文档。包括:

  1. Document Creation(文档创建):验证生成的DID文档是否包含所有必需的属性,并且属性值符合各自的格式要求。

  2. Method-Specific Rules(方法特定规则):确保在创建DID文档时,针对特定DID方法(如did:tzdid:orb等)的特殊要求得到满足,如特定的密钥格式、链上注册过程等。

  3. Consistency(一致性):检查生成的DID文档在多次独立生成过程中保持一致,除非有明确的更新意图。

did-resolution测试

此类测试关注DID解析器能否正确解析DID文档,包括:

  1. Resolution Process(解析过程):验证解析器能否通过DID找到对应的DID文档,解析过程符合规范定义的步骤。

  2. Content Retrieval(内容检索):检查解析器是否能从指定位置(如分布式账本、IPFS等)正确获取DID文档内容。

  3. Content Format(内容格式):验证获取的DID文档是否以规定的JSON-LD格式呈现,且内容结构符合DID Core规范。

did-url-dereferencing测试

这些测试围绕DID URL的解引用操作进行,包括:

  1. DID URL Syntax(DID URL语法):确认DID URL的构造符合规范定义,包括DID部分、路径、查询参数和片段等。

  2. Resource Retrieval(资源检索):测试解析器能否根据DID URL定位并返回相应的资源(如验证材料、服务端点指向的资源等)。

  3. Metadata Handling(元数据处理):验证在解引用过程中,解析器能否正确处理并返回与DID URL相关的元数据,如HTTP状态码、Content-Type等。

参考资料

  • W3C Decentralized Identifier Specification v1.0 DID主要规范文档
  • Home page of the Decentralized Identifier Working Group 负责开发和维护DID规范的工作组官网
  • Specs and documentation for all DID-related /.well-known resources 关于DID上下文中使用的标准化资源的详情
  • W3C Decentralized Characteristics Rubric v1.0 用于评估DID系统去中心化特性的量表
  • Decentralized Identifier Use Cases v1.0 展示DIDs在各种情境中应用的一系列用例
  • W3C DID Test Suite and Implementation Report DID测试套件以及已通过测试、表明符合DID规范的实现记录

其他

  1. 可以向仓库提交pull request将did实现加入到测试套件(可提升web3影响力)
  2. DID解析器 Universal Resolver (uniresolver.io)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

揭示 Vue 3 setup 函数的奥秘

setup 是 Vue 3 的新特性,也是组合式 API(Composition API)的核心。它提供了一种全新的方式设计组件的逻辑,便于复用同时也增加代码可读性。 1. 理解 setup 1、组合式 API 的入口 setup 是在组件实例创建之前执行的&#xff0c…

Windows单机安装配置mongodb+hadoop+spark+pyspark用于大数据分析

目录 版本选择安装配置Java环境配置Hadoop配置Spark配置 安装pyspark使用Jupyter Notebook进行Spark MongoDB测试参考 版本选择 根据Spark Connector:org.mongodb.spark:mongo-spark-connector_2.13:10.3.0 的前提要求 这里选择使用最新的MongoDB 7.0.12社区版 ht…

Qt-frameGeometry介绍使用(12)

描述 这个和上一篇讲的geometry很像,但是又有点不一样,而且还挺容易出问题的,所以这里要专门提一下,首先我们要明白Window frame窗口坐标是有点区别的,如图就像这样的,左上角是有两个需要注意的位置&#…

百元蓝牙耳机买哪一款的好?四款年度平价好用耳机推荐!

蓝牙耳机大家都再熟悉不过了,作为现代人最常用的智能配件之一,谁还没有用过蓝牙耳机呢,但是现在蓝牙耳机的牌子真的是遍地开花,让人眼花缭乱的,这让大众选择起来却更加麻烦了,每个牌子的蓝牙耳机都有各自的…

西门子触摸屏维修KTP400 6AV2123-2DB03-0AX0

西门子KTP400面板触摸屏维修:DP协议 PN协议两款。DP SIMATIC HMI,KTP400 Basic DP, 精简面板, 按键式/触摸式操作, 12" TFT 显示屏,65536 颜色, PROFIBUS 接口, 可用项目组态的…

TL431的稳压原理和用法,仿真验证

概述 TL431是三端可调节并联稳压器,可以通过两个外部电阻器将输出电压设置为介于VREF(约为2.5V)和36V之间的任意值。其输出阻抗典型值均为0.2欧姆,此类器件的有源输出电路具有非常明显的导通特性,因此非常适合用于替代…

基于vue框架的包装加工工业自动化管理系统05880(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:仓管员,维修员,产品信息,产品入库,产品出库,机器信息,机器维修 开题报告内容 基于Vue框架的包装加工工业自动化管理系统开题报告 一、引言 随着工业4.0时代的到来,包装加工行业正经历着前所未有的变革。传统的手工与半自动…

聊聊sessionStorag,以及什么情况下能够共享/复制sessionStroage

之前对sessionStorage的了解很表面,粗略的理解为在各标签页/窗口下独立,生命周期和标签页/窗口关联,标签页/窗口未关闭就存在(除人为清除或者调用相关api删除)。但是这种粗略的理解对于下面的场景似乎就有点不明确了。…

【SQL】直属部门

目录 题目 分析 代码 题目 表:Employee ------------------------ | Column Name | Type | ------------------------ | employee_id | int | | department_id | int | | primary_flag | varchar | ------------------------ 这张表的主键为 e…

【pyside6】添加应用图标

文章目录 什么是应用图标指定图标样式 什么是应用图标 这个图标就是应用图标: 默认图标是这样: 指定图标样式 app.setWindowIcon(QIcon("logo.png"))

深信服超融合平台Windows虚拟机磁盘在线扩容

深信服超融合版本: 该版本支持磁盘在线扩容,虚拟机无需重启,不影响业务。 本次扩容是为现有磁盘扩容,如果是新增磁盘也是一样的步骤,单独添加一块磁盘即可。 1、点击需要进行扩容的虚拟机名称 2、在控制台可以看到当…

Android经典实战之简化 Android 相机开发:CameraX 库的全面解析

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 CameraX 是 Android Jetpack 的一个组件库,旨在简化 Android 相机应用的开发。它提供了一系列易于使用的 API,支持从 An…

别怕!PMP考试难度全解析,助你一次过!

首先我得说,PMP考试,它难,也不是那么难。为啥这么说呢? 你看,PMP考试难,难在哪儿?就难在它那知识面太广了,就像个杂货铺,啥都得懂点儿。项目管理啊,得懂管理&…

【Hot100】LeetCode—543. 二叉树的直径

目录 1- 思路深搜——dfs 2- 实现⭐543. 二叉树的直径——题解思路 3- ACM 实现 原题连接:543. 二叉树的直径 1- 思路 深搜——dfs 递归三部曲 1- 递归参数和返回值 返回 public int depth(TreeNode root) 2- 终止条件 如果遇到 null,则返回 0 3- 递…

2024Go语言面试宝典Golang零基础实战项目面试八股力扣算法笔记等

2024最新Golang面试八股文,以及各种零基础全套实战项目,经典力扣算法题以及常见的面试题型,大厂面试题。go语言面试必备。包括GO基础类、GO并发编程、GO RUNTIME、微服务、容器技术、Redis、MySQL、Linux、缓存、网络和操作系统、消息队列、分…

USB3.2 摘录(六)

系列文章目录 USB3.2 摘录(一) USB3.2 摘录(二) USB3.2 摘录(三) USB3.2 摘录(四) USB3.2 摘录(五) USB3.2 摘录(六) 文章目录 系列文…

如何在VMwareWorkstation上安装的ESXi系统扩容存储

在做ESXi的相关实验的时候,需要扩容ESXi的存储,那么如何进行操作呢? 扩容VMwareWorkstation上虚拟机的存储 首先我们需要先扩容虚拟机上的存储(可不关闭虚拟机)按照图下所示,右键虚拟机,点击设…

PCL-基于RANSAC的平面拟合方法

基于RANSAC的平面拟合方法 一、简介二、实验代码三、实验结果 一、简介 随机采样一致性(Random sample consensus,RANSAC):RANSAC是一种鲁棒的模型拟合方法,它可以处理存在大量噪声和异常值的数据。在进行平面拟合时&…

Qt QTableWidgetItem.setFlags()

查看 Qt 官方地址 Qt Namespace | Qt Core 5.15.14 得到如下说明 默认值是 63,即如下表达式的值(位运算),表示可选择(1)、可编辑(2)、可拖拽(4)、可放入&…

Springboot查看版本和兼容的依賴

https://docs.spring.io/spring-boot/docs/2.7.18/reference/htmlsingle/#appendix-dependency-versions 如果需要查自己的版本,只需要修改2.7.18,因爲我的是2.7.18的版本。 然後如果你想查詢所兼容的其它依賴版本,可以打開頁面后直接search…