文档#

JupyterLab 可以通过多种方式进行扩展:

  • 扩展(顶层): 应用程序扩展扩展了JupyterLab本身的功能,我们在开发扩展中介绍了它们。

  • 文档小部件扩展(较低级别): 文档小部件扩展增强了添加到应用程序中的文档小部件的功能,我们将在本节中介绍它们。

在本节中,术语“文档”指的是任何由存储在磁盘上的文件支持的视觉内容(即使用Contents API)。

文档架构概述#

在JupyterLab中,一个“文档”由实现IModel接口的模型实例表示。 模型接口有意设计得相当小,专注于表示文档中的数据并发出数据变化的信号。每个模型还有一个关联的context实例。 模型的上下文是文档内部数据(存储在模型中)与文件元数据及可能对文件执行的操作(如保存和恢复)之间的桥梁。由于许多对象将同时需要上下文和模型,因此上下文包含对模型的引用作为其.model属性。

单个文件路径可以有多个不同的模型(因此有不同的上下文)来表示该文件。例如,一个笔记本可以用笔记本模型和文本模型打开。同一文件路径的不同模型之间不直接相互通信。

模型包含一个ISharedDocument实例,该实例充当模型内容的数据存储。从JupyterLab 4开始,默认的数据存储实现是基于YjsYDocument,Yjs是一个用于构建协作应用程序的高性能CRDT。接口和实现都由包@jupyter/ydoc提供。

Document widgets 表示 文档模型的视图。可以有多个文档小部件与 单个文档模型相关联,并且它们自然会保持同步,因为它们 是基于相同底层数据模型的视图。

Document Registry 是注册文档类型和工厂的地方。插件可以请求一个文档注册表实例,并注册它们的内容类型和提供者。

Document Manager 使用 Document Registry 为文档创建模型和小部件。Document Manager 处理应用程序中文档的生命周期。

文档注册表#

文档小部件扩展 在 JupyterLab 应用程序中可以注册:

  • 文件类型

  • 特定文件类型的模型工厂

  • 特定模型工厂的小部件工厂

  • 小部件扩展工厂

注意

我们建议您查看文档示例以帮助理解实际案例。

Widget Factories#

为给定文件创建一个小部件。

如果多个小部件工厂与相同的文件类型相关联, 用户将能够使用文件浏览器上下文菜单中的“打开方式”列表选择其中一个。

在版本4.4中添加:小部件工厂现在可以接受一个contentProviderId参数,允许小部件修改内容的提供方式。例如,使用自定义提供程序可以分块获取文档内容,而不是一次性获取所有内容。

示例

  • 创建NotebookPanel小部件的笔记本小部件工厂。

模型工厂#

为给定文件创建一个模型。

模型通常根据用于获取模型的内容选项(例如文本、base64、笔记本)进行区分。

Widget Extension Factories#

为小部件类型添加额外功能。为每个小部件实例创建一个扩展实例,使扩展能够为每个小部件添加功能或观察小部件及其上下文。

示例

  • 为NotebookPanel小部件创建的ipywidgets扩展。

  • 为每个NotebookPanel小部件的工具栏添加一个按钮。

文件类型#

添加一个新的文件类型,通过JupyterLab中的mimetype和文件扩展名来识别。

文档模型#

由模型工厂创建并传递给小部件工厂和小部件扩展工厂。模型是我们与文档数据交互的方式。对于一个简单的文本文件,我们通常只使用to/fromString()方法。像Notebook这样更复杂的文档包含更多的交互点,如Notebook元数据。

文档上下文#

由文档管理器创建并传递给小部件工厂和小部件扩展。上下文包含模型作为其属性之一,以便我们可以传递单个对象。

它们用于为给定模型提供来自@jupyterlab/services的会话和内容API的抽象接口。它们可以在小部件之间共享。

将上下文和模型分开的原因是为了便于创建模型工厂,并将上下文的繁重工作留给文档管理器。上下文不打算被子类化或重新实现。相反,上下文旨在成为文档模型与更广泛应用程序之间的粘合剂。

共享模型#

@jupyter/ydoc 包包含一个 ISharedNotebook 和一个 ISharedFile,它们是如果你想操作笔记本或文本文件时需要使用的抽象接口。

这些模型包装了一个Yjs文档(Y.Doc),它代表了客户端之间的共享文档,并持有多个共享对象。它们使您能够共享不同的数据类型,如文本、数组、映射或集合,以创建不同类型的协作应用程序。

此外,共享模型具有一个Awareness属性。该属性与Y.Doc相关联,这意味着每个文档都有一个Awareness对象,并用于共享光标位置和存在信息。Awareness是Yjs的一个实现细节,不属于ISharedDocument接口的一部分。

请查看@jupyter/ydoc 文档以了解更多关于此包的信息。

文档管理器#

文档管理器处理:

  • 文档模型

  • 文档上下文

文件浏览器使用文档管理器来打开文档并管理它们。