如何解决在 ASN 文件中导入模块时,我们如何获取这些模块或将其设置为导入?
我试图将其与 python 联系起来。在python中,如果我们使用一些与绘图库matplotlib
相关的命令,它会告诉我们导入matplotlib
,我们使用import statements
来完成。在 ASN 文件中,我们如何做同样的事情?任何与此相关的资源或指针都会非常有帮助。
解决方法
IMPORTS 子句用于指示您要引用另一个模块中定义的某些赋值(类型、值等)。 ITU-T X.680 包含所有详细信息。请注意,ASN.1 标准没有说明如何在文件中组织 ASN.1 模块,或者工具应该如何定位引用模块的定义(即要查找的文件)——这留给了各个工具决定。
不幸的是,关于模块、导入和导出的规则很复杂。以下是对 X.680 的引用的摘要。有关完整语法,请参阅 spec。
模块唯一性
模块名称必须是唯一的 (13.7),但 X.680 预计它们不是唯一的 (13.10)。 OID 应该唯一标识一个模块 (13.8)。
出口声明
EXPORTS 语句有 3 种可能性:
- EXPORTS SymbolsExported ";"
- 导出所有列出的符号。
- 您可以导出您定义的任何符号或导入到当前模块中。导出的名称在(本地)定义和导入的符号中必须是唯一的。
- 如果列表为空,则不会导出任何内容。
- 导出所有";"
- 导出所有可以显式导出的符号(即唯一名称集)
- 空
- 相当于上面的;存在是为了向后兼容
进口声明
IMPORTS 语句有两种可能性: 1. 导入符号Imported ";" - 基本上,您列出要从中导入的模块,以及要为每个模块导入的符号。 - 如果 OID 匹配 (13.10),此处使用的模块名称可能与模块的声明名称不同。当给出 OID 时,它是确定的(13.11)。当引用的模块具有 OID 时,引用必须使用它 (13.12)。 - 您导入的符号可能在引用的模块中定义或导入。如果引用的模块导入符号,则它必须是唯一命名的(不能同时定义或导入多次)。 - 如果引用的模块显式导出符号,则只能导入那些符号。 - 列出的符号是唯一可以作为导入模块的外部引用 (module.id) 引用的符号。 - 如果 SymbolsImported 为空,则此模块中不能使用外部引用 (module.id)。 - 可以在没有模块资格的情况下使用导入的符号 (13.19)。但是,当引用时,如果有任何歧义(符号也在当前模块中定义或多次导入),则必须限定导入的符号,否则必须不限定 (13.20)。 2.空(没有IMPORTS语句) - 允许外部引用(module.id)。 - 提供向后兼容性。
可以参考上面的描述。如果存在 IMPORTS 语句,则限定引用必须使用 IMPORTS 语句中给出的模块名称(它可以与被引用模块中的声明不同,但建议不要这样做)。如果没有 IMPORTS 语句,则限定引用必须与被引用模块中给出的名称匹配(在这种情况下,OID 显然无关紧要)。
在最新版本的 X.680 (2/21) 中,使用 OID 导入模块时,可以添加 WITH SUCCESSORS 或 WITH DESCENDANTS 子句。重点是启用使用 OID 来版本模块。基本上,这使得对导入模块的 OID 的某些更改不需要更新任何导入模块的 IMPORTS 语句中的 OID。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。