在ASN文件中导入模块时,我们如何获取这些模块或将其设置为导入



我正试图将其与python联系起来。在python中,如果我们使用一些与绘图库matplotlib相关的命令,它会告诉我们导入matplotlib,我们使用import statements来完成。在ASN文件中,我们如何做到这一点?任何与此相关的资源或指针都将非常有用。

IMPORTS子句用于指示您想要引用在另一个模块中定义的一些赋值(类型、值等(。ITU-T X.680提供了所有细节。请注意,ASN.1标准没有说明如何在文件中组织ASN.1模块,也没有说明工具应该如何定位引用模块的定义(即查找哪个文件(,这由各个工具来决定。

不幸的是,有关模块、IMPORT和EXPORT的规则很复杂。以下是对X.680的概述。有关完整语法,请参阅规范

模块唯一性

模块名称要求是唯一的(13.7(,但X.680预计它们不是唯一的(13.10(。OID应该唯一标识模块(13.8(。

EXPORTS声明

EXPORTS声明有三种可能性:

  1. 导出符号导出">
    • 导出所有列出的符号
    • 您可以将定义的任何符号导出或导入到当前模块中。导出的名称在(本地(定义和导入的符号中必须是唯一的
    • 如果列表为空,则不导出任何内容
  2. 导出所有">
    • 导出所有可以显式导出的符号(即唯一名称集(
  3. 空的
    • 相当于上述内容;存在是为了向后兼容

IMPORTS语句

IMPORTS语句有两种可能性:

  1. 导入符号已导入">
    • 基本上,您列出了要从中导入的模块,以及每个模块要导入的符号
    • 如果OID匹配(13.10(,则此处使用的模块名称可能与声明的模块名称不同。当给出OID时,它是决定性的(13.11(。当引用的模块具有OID时时,引用必须使用它(13.12(
    • 您导入的符号可以在引用的模块中定义或导入。如果引用的模块导入符号,则必须对其进行唯一命名(不能同时定义或导入多次(
    • 如果被引用的模块显式导出符号,则只能导入这些符号
    • 列出的符号是唯一可以作为要导入的模块的外部引用(module.id(引用的符号
    • 如果SymbolsImported为空,则在此模块中不能使用任何外部引用(module.id(
    • 导入的符号可以在没有模块限定的情况下使用(13.19(。但是,在引用时,如果存在任何歧义,则导入的符号必须是限定的(符号也在当前模块中定义或多次导入(,否则必须是不限定的(13.20(
  2. 空(没有IMPORTS语句(
    • 允许外部引用(module.id(
    • 提供向后兼容性

可以如上所述进行引用。如果存在IMPORT语句,则限定引用必须使用IMPORT语句中给定的模块名称(这可能与引用模块中的声明不同,但建议不要使用(。如果没有IMPORTS语句,那么限定引用必须与引用模块中给定的名称匹配(在这种情况下,OID显然是不相关的(。

在最新版本的X.680(2/21(中,当使用OID导入模块时,可以添加WITH SUCCESS或WITH DESCENDANTS子句。重点是允许使用OID对模块进行版本化。基本上,这使得对导入模块的OID的某些更改不需要更新任何导入模块的IMPORTS语句中的OID。

最新更新