我试图将其与 python 联系起来。在Python中,如果我们使用一些与绘图库matplotlib
相关的命令,它会告诉我们导入matplotlib
,我们通过使用import语句
来完成它>。在 ASN 文件中,我们如何做同样的事情?任何与此相关的资源或指示都会非常有帮助。
最佳答案
IMPORTS 子句用于指示您想要引用另一个模块中定义的某些赋值(类型、值等)。 ITU-T X.680 包含所有详细信息。请注意,ASN.1 标准没有说明如何在文件中组织 ASN.1 模块,或者工具应如何定位引用的模块的定义(即要查找哪个文件)——这留给各个工具来解决决定。
不幸的是,有关模块、导入和导出的规则很复杂。以下是引用 X.680 的摘要。有关完整语法,请参阅 spec .
模块独特性
模块名称必须是唯一的 (13.7),但 X.680 预计它们不是唯一的 (13.10)。 OID 应该唯一地标识一个模块 (13.8)。
导出声明
EXPORTS 语句有 3 种可能性:
- 导出符号导出“;”
- 导出所有列出的符号。
- 您可以导出您定义的任何符号或导入到当前模块中。导出的名称在(本地)定义和导入的符号中必须是唯一的。
- 如果列表为空,则不会导出任何内容。
- 导出所有“;”
- 导出所有可以显式导出的符号(即一组唯一名称)
- 空
- 与上述相同;存在是为了向后兼容
进口声明
IMPORTS 语句有 2 种可能性:
- 导入符号导入“;”
- 基本上,您会列出要从中导入的模块,以及要为每个模块导入的符号。
- 如果 OID 匹配 (13.10),则此处使用的模块名称可能与模块的声明名称不同。当给出 OID 时,它就是确定的(13.11)。当引用的模块具有 OID 时,引用必须使用它 (13.12)。
- 您导入的符号可以在引用的模块中定义或导入。如果引用的模块导入该符号,则它必须具有唯一的名称(不能同时定义或导入多次)。
- 如果引用的模块显式导出符号,则只能导入这些符号。
- 列出的符号是唯一可以作为导入模块的外部引用 (module.id) 进行引用的符号。
- 如果 SymbolsImported 为空,则此模块中不能使用外部引用 (module.id)。
- 可以在没有模块限定的情况下使用导入的符号 (13.19)。但是,在引用时,如果存在任何歧义,则导入的符号必须是限定的(符号也在当前模块中定义或多次导入),否则必须是不限定的(13.20)。
- 空(无 IMPORTS 语句)
- 允许外部引用 (module.id)。
- 提供向后兼容性。
可以按照上面的描述进行引用。如果存在 IMPORTS 语句,则合格的引用必须使用 IMPORTS 语句中给定的模块名称(该名称可以与引用模块中的声明不同,但不建议这样做)。如果没有 IMPORTS 语句,则限定引用必须与引用模块中给出的名称匹配(在这种情况下,OID 显然不相关)。
在最新版本的X.680(2/21)中,使用OID导入模块时,可以添加WITH SUCCESSORS或WITH DESCENDANTS子句。重点是允许使用 OID 来版本模块。基本上,这使得对导入模块的 OID 进行某些更改不需要更新任何导入模块的 IMPORTS 语句中的 OID。
关于asn.1 - 当导入 ASN 文件中的模块时,我们如何获取这些模块或将其设置为导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67894357/