为您的扩展创建自定义教程
本文将指导您:
- 设计一个新的教程
- 将教程与扩展捆绑在一起
设计教程
教程是自包含的文件,可以通过扩展分发,也可以从本地文件系统加载。虽然文件格式很简单,但遵循下面描述的结构是很重要的。
文件格式
教程是ZIP存档,使用.tutorial
文件扩展名,至少包含一个文件和一个文件夹,其中有三个文件:
my_tutorial。教程├── groups.properties └── tutorial1 ├── process.rmp ├── tutorial.properties └── steps.xml
的group.properties
文件定义教程章节的名称,并包含简短的描述。必须编码为iso - 8859 - 1
-特别是,unicode编码很可能不起作用。根据上面的例子,文件的内容看起来像这样:
template.name=我的第一个教程章节template.description=这是我的第一个教程章节。
教程压缩包包含每个教程的文件夹;在上面的示例中,只有一个文件夹具有该名称tutorial1
。
的tutorial.properties
文件定义了教程的名称,并包含一个简短的描述——同样编码为iso - 8859 - 1
。对于上面的例子,文件的内容可以像这样:
template.name=我的第一个教程template.description=这是我的第一个教程。
教程文件夹必须只包含一个RapidMiner进程(* .rmp
)。
此外,它必须包含steps.xml
文件,该文件描述本教程的步骤。下一节将解释该文件的格式。
除了这些文件之外,您还可以捆绑任意的存储库条目。例如,您可以通过从本地存储库复制相应的文件来将某个数据集包含到模板中。更重要的是,您可以使用图像作为教程过程的背景,方法是在将图像文件的扩展名更改为后添加图像文件.blob
。下面是一个例子。
steps.xml的格式
的steps.xml
文件决定了当教程正在进行时,在RapidMiner Studio左侧打开的教程面板中显示的内容。其内容必须遵循以下规则:
的内容
steps.xml
文件必须包装到steps标记中< ?xml version="1.0" encoding="UTF-8" standalone="yes"?> <步骤>…> < /步骤
实际教程被分解成任意数量的步骤,每个步骤都被包装成一个step标签,可以有属性名:
<步骤名称="步骤名称">…步骤>
您可以在每个步骤中使用任意内容。它就这样显示出来。不要使用任何特殊的HTML或样式,因为教程将被编译成其他格式。还要避免HTML或XML中的特殊字符,如大于符号。
对于类似于HTML中有序列表的任务,有一种特殊的内容类型:
<任务> < >任务……任务< / > < >任务…> < /任务> < /任务
除了任务之外,另一个重要的元素是信息部分,它可以用来提供更多的背景信息或描述其他重要的事实或概念。您可以在info部分中使用任意内容,包括下面描述的所有标记。但是,不能在信息部分中定义任务或步骤。格式为:
<信息>…< /信息>
在每个教程的末尾都有一个问题部分,鼓励学习者尝试不同的东西,或者检查他们在本教程中学到了什么。这些问题与任务块的工作原理大致相同:
<问题> < >问题……问题< / > < >问题…> < /问题> < /问题
对于既不是task,也不是info或question的普通文本块,使用text标签:
< >文本…< /文本>
在内容、任务或信息部分,您可以使用link标签添加超链接:
<链接url = " http://www.domain.com/path/ " >名称> < /链接
你可以用强调标签来强调内容:
< emph >…< / emph >
您可以使用图标标记向文本添加UI图标。在这里,您可以使用图标的完整资源路径
> <图标路径/ /程序> < /图标
或者使用工作室提供的图标,使用格式图标大小/图标名称,例如:
<图标> / 16 / media_play.png > < /图标
在所有类型的内容中,应使用以下标签来标记相应的类型:
< op >操作符名称< / op >
< param >参数名称< / param >
参数值<价值> < /的值>
<文件夹>存储库或文件夹名称文件夹>
文件或存储库条目名称 ui元素的名称
任何层次结构(操作符,文件夹,…)都可以通过使用'/'来指定。
要打开下一个教程,请在教程末尾添加以下内容:
START NEXT TUTORIAL
下一节将介绍一个示例steps.xml
文件。
开发教程
你可以在本地加载你的教程过程,而不用把它们和你的扩展捆绑在一起。只有当您想要分发您的教程时,才需要使用捆绑。
您所需要做的就是将教程存档移到.RapidMiner \教程
目录中。请注意,存储在该目录中的教程取代了捆绑教程:如果您将教程与扩展捆绑在一起,并安装了教程的本地副本,则只会加载本地副本。
简单的教程
让我们从一个简单的教程组开始,只有一个教程包含一个步骤。
要创建进程文件,请在RapidMiner Studio中打开一个新进程,并拖动一个生成数据操作员到流程画布上:
导出流程文件菜单(选择导出过程……),并另存为tutorial1.rmp
。注意,如果您希望教程以空的流程开始,也可以将流程保留为空并以相同的方式导出。
接下来我们需要steps.xml
描述如何处理这个过程的文件:
< ?xml version="1.0" encoding="UTF-8" standalone="yes"?> 祝你玩得开心! Connect 的"out"端口生成数据 ,结果端口在右侧。 16/media_play.png Run 进程。 如果在没有连接的情况下运行进程会发生什么?
作为教程文件夹的最后一个文件,我们需要创建tutorial.properties
文件:
tutorial.name=第一个教程tutorial.description=一个最小的教程
我们把这三个文件放在一个文件夹里,我们称之为1
。
我们最后需要的文件是group.properties
描述整个教程组的文件(在我们的简单案例中只包含一个教程):
group.name=第一个教程章节group.description=一个最小的教程章节。
最后,我们需要创建教程存档。为此,创建一个包含group.properties
文件和文件夹1
使用您选择的归档器。然后将文件扩展名更改为* . zip
来* .tutorial
,例如,重命名是
来sample.tutorial
。最终的文件结构如下所示:
sample.tutorial├── groups.properties └── 1 ├── tutorial1.rmp ├── tutorial.properties └── steps.xml
确保教程文件之间不包含额外的文件夹sample.tutorial
和group.properties
文件和文件夹1
。
要加载新创建的教程章节,请将教程文件复制到.RapidMiner /教程
并重新启动RapidMiner Studio。在学习菜单中,你现在应该看到新创建的模板:
选择新章节的第一个(也是唯一的)教程应该会打开我们在第一步中创建的过程,并在左侧显示步骤。
包括存储库条目
现在让我们添加一个自定义数据集,以便在本教程中使用。要做到这一点,我们首先需要将这些数据放在存储库的RapidMiner Studio。
例如,我们可以按照如下方式将一些自定义数据放入存储库生成数据操作员到工艺面板上。现在添加商店操作符和连接。
配置商店操作符将数据集存储在您的存储库中,例如,作为//本地存储库/自定义数据
,并运行该进程。
现在,选择-单击存储库中新创建的条目并选择在文件浏览器中打开。有三个名为“Custom data”的文件:自定义data.ioo
,自定义data.md
和自定义data.properties
。复制.ioo
(实际数据)和。海事
(元数据)文件,并将它们添加到教程存档,使其具有以下新结构:
sample.tutorial├── groups.properties └── 1 ├── tutorial1.rmp ├── tutorial.properties ├── steps.xml ├── Custom data.ioo └── Custom data.md
重启工作室,看看样品存储库:
你可以看到自定义数据
现在是教程文件夹的一部分吗1
。我们现在可以添加第二步steps.xml
使用新数据:
< ?xml version="1.0" encoding="UTF-8" standalone="yes"?> 祝你玩得开心! Connect 的"out"端口生成数据 ,结果端口在右侧。 16/media_play.png Run 进程。 如果在没有连接的情况下运行进程会发生什么? 将 从//Samples/Tutorials/ Samples/ 1/Custom data 处的Repository中的数据拖到进程中。 连接 的“out”端口检索 与右边的第二个结果端口。 16/media_play.png Run 进程。 What is the difference between the two resulting data sets?
结果(重新启动RapidMiner Studio后)如下所示:
你也可以用自定义数据
在流程文件中tutorial1.rmp
通过一个检索操作符,但必须使用绝对路径/ /样本/教程/样本/ 1 /自定义数据
。
添加背景图像
您可以使用背景图像来提示如何填充流程画布,例如:
构建这种图像的最简单方法是截取完成的教程过程的屏幕截图,并将其与您选择的图形程序相适应。
我们将文件扩展名更改为.blob
,例如,重命名background.png
文件background.blob
然后加上.blob
文件放入文件夹1
:
sample.tutorial├── groups.properties └── 1 ├── tutorial1.rmp ├── tutorial.properties ├── steps.xml ├── Custom data.ioo ├── Custom data.md └── background.blob
此外,我们告诉我们的过程tutorial1.rmp
通过添加线条来包含背景图像
在内部进程中,也就是说,最后一行应该是这样的:
您可以通过调整x和y值来调整背景图像的位置。尝试不同值的最简单方法是使用XML面板在RapidMiner Studio,然后调整tutorial1.rmp
文件的最优值。
教程过程现在看起来是这样的:
例如,现在可以添加第二个教程
sample.tutorial├── groups.properties └── 1 │ ├── tutorial1.rmp │ ├── tutorial.properties │ ├── steps.xml │ ├── Custom data.ioo │ ├── Custom data.md │ └── background.blob └── 2 ├── tutorial2.rmp ├── tutorial.properties ├── steps.xml …
别忘了加
START NEXT TUTORIAL
在第一个教程的最后一步结束时。
捆绑教程
将教程与扩展捆绑在一起是一个直截了当的过程。您所要做的就是将教程档案添加为资源,并将它们注册到扩展的初始化代码中。乐鱼体育安装
如果您还没有编写扩展的经验,请参考我们的指南创建您自己的扩展。第1-3节涵盖了构建可用于分发模板的扩展所需的所有知识。
添加教程作为资源乐鱼体育安装
按照惯例,Maven和Gradle等构建工具会在乐鱼体育安装src / mai乐鱼体育安装n /资源
目录中。我们建议对RapidMiner扩展也使用这种结构。
让我们假设你选择了org.myorg.myextension
作为组id。那么你的资源应该在乐鱼体育安装src / mai乐鱼体育安装n /资源/ org/myorg/myextension
。注意,RapidMiner将添加教程
目录自动切换到该路径。因此,您可以将上面创建的教程捆绑为…/ org/myorg/myextension/tutorial/sample.tutorial
:
my_extension├──README。Md├──build。gradle├──…├──src│└──主要│├──java││└──…│└──资源│├──org││└──myorg乐鱼体育安装││└──myextension││└──教程││└──样本。教程│├──…
但是,除非您将该位置注册为资源源,否则RapidMiner不会在该目录中搜索资源乐鱼体育安装。这可以在扩展的初始化代码中轻松完成。您所需要做的就是将以下行添加到initPlugin ()
方法:
/** *此方法将在扩展初始化后直接调用。这是启动期间的第一个*钩子。当调用* this时,没有初始化操作符或渲染器。*/ public static void initPlugin(){//注册扩展资源Tools。乐鱼体育安装add乐鱼体育安装ResourceSource(new ResourceSource(PluginInitMyExtension.class.getClassLoader(), "org/myorg/myextension/"));}
现在你可以通过所谓的教程注册表注册扩展。要注册上面设计的教程,你可以在插件初始化代码中添加另一行:
public static void initPlugin(){//注册扩展资源Tools。乐鱼体育安装add乐鱼体育安装ResourceSource(new ResourceSource(PluginInitMyExtension.class.getClassLoader(), "org/myorg/myextension/"));//注册示例教程TutorialRegistry.INSTANCE.register("sample");}
测试教程
在测试捆绑教程时不需要进一步的特殊步骤。您所需要做的就是构建一个新版本的扩展,例如,通过命令gradle clean install扩展
。
但请记住,教程存储在您的.RapidMiner
目录覆盖捆绑的同名教程。因此,确保在启动RapidMiner Studio之前删除教程的所有工作副本。