文档组织
文档组织
相关源文件
本章引用的主要源码文件:
mayan/apps/cabinets/tests/test_wizard_steps.pymayan/apps/cabinets/wizard_steps.pymayan/apps/document_comments/apps.pymayan/apps/document_indexing/apps.pymayan/apps/document_indexing/events.pymayan/apps/document_indexing/icons.pymayan/apps/document_indexing/links.pymayan/apps/document_indexing/serializers.pymayan/apps/document_indexing/tests/literals.pymayan/apps/document_indexing/tests/mixins.pymayan/apps/document_indexing/tests/test_models.pymayan/apps/document_indexing/urls.pymayan/apps/linking/links.pymayan/apps/metadata/api.pymayan/apps/metadata/api_views.pymayan/apps/metadata/apps.pymayan/apps/metadata/forms.pymayan/apps/metadata/links.pymayan/apps/metadata/models.pymayan/apps/metadata/serializers.pymayan/apps/metadata/tests/literals.pymayan/apps/metadata/tests/mixins.pymayan/apps/metadata/tests/test_forms.pymayan/apps/metadata/tests/test_models.pymayan/apps/metadata/tests/test_wizard_steps.pymayan/apps/metadata/urls.pymayan/apps/metadata/wizard_steps.pymayan/apps/quotas/tests/test_hooks.pymayan/apps/sources/wizards.pymayan/apps/tags/api_views.pymayan/apps/tags/apps.pymayan/apps/tags/events.pymayan/apps/tags/links.pymayan/apps/tags/models.pymayan/apps/tags/serializers.pymayan/apps/tags/tests/literals.pymayan/apps/tags/tests/mixins.pymayan/apps/tags/tests/test_document_tag_api.pymayan/apps/tags/tests/test_indexing.pymayan/apps/tags/tests/test_models.pymayan/apps/tags/tests/test_tag_api.pymayan/apps/tags/tests/test_tag_document_api.pymayan/apps/tags/tests/test_views.pymayan/apps/tags/tests/test_wizard_steps.pymayan/apps/tags/urls.pymayan/apps/tags/views.pymayan/apps/tags/wizard_steps.py
本页面介绍了 Mayan EDMS 中用于分类、归类和结构化文档的组织系统。该系统提供了三种主要的组织机制:用于结构化数据的元数据管理、用于简单标签的标签系统,以及用于动态组织的层级索引。有关文档工作流管理的信息,请参阅工作流管理。
概述
Mayan EDMS 中的文档组织基于三个互补的系统构建,它们满足不同的组织需求:
- 元数据管理:附加到文档的结构化数据,具有校验和解析能力
- 标签系统:用于快速分类的简单颜色编码标签
- 文档索引:使用基于模板的表达式进行动态层级组织
这些系统通过向导步骤与文档上传流程集成,并可通过 REST API 以编程方式访问。
元数据管理系统
元数据系统通过 metadata 应用提供附加到文档的结构化数据。它支持带校验、默认值、查找约束和解析的带类型元数据。
核心模型与关系
来源: mayan/apps/metadata/models.py:27-329
元数据类型配置
MetadataType 实例定义了元数据字段的结构和行为:
| 字段 | 用途 | 示例 |
|---|---|---|
name | 用于编程访问的唯一标识符 | invoice_number |
label | 人类可读的显示名称 | Invoice Number |
default | 默认值模板 | INV-{{ document.pk }} |
lookup | 逗号分隔的有效选项 | urgent,normal,low |
validation | 用于校验的 Python 类路径 | mayan.apps.metadata.metadata_validators.DateValidator |
parser | 用于值解析的 Python 类路径 | mayan.apps.metadata.metadata_parsers.DateParser |
系统支持在 default 和 lookup 字段中进行模板渲染,允许基于文档属性的动态值。
来源: mayan/apps/metadata/models.py:27-186
文档类型集成
DocumentTypeMetadataType 模型控制哪些元数据类型可用于每种文档类型,以及它们是否为必填项:
# 示例:使元数据对文档类型成为必填项
document_type.metadata.create(
metadata_type=metadata_type,
required=True
)
来源: mayan/apps/metadata/models.py:279-329
上传向导集成
元数据系统通过 DocumentCreateWizardStepMetadata 与文档上传集成:
来源: mayan/apps/metadata/wizard_steps.py:11-65, mayan/apps/metadata/api.py:39-99
标签系统
标签系统通过 tags 应用提供简单的颜色编码标签。标签为基本分类提供了一种比元数据更轻量的替代方案。
标签模型架构
Tag 模型通过 documents 字段与 Document 建立直接的多对多关系。
来源: mayan/apps/tags/models.py:18-114
标签操作
标签支持带事件跟踪的附加和移除操作:
# 将标签附加到文档
tag.attach_to(document=document) # 触发 event_tag_attached 事件
# 从文档移除标签
tag.remove_from(document=document) # 触发 event_tag_removed 事件
来源: mayan/apps/tags/models.py:44-92
访问控制集成
标签系统与 Mayan 的 ACL 系统集成:
def get_documents(self, user, permission=None):
"""返回带有此标签的文档的过滤查询集"""
queryset = Document.valid.filter(pk__in=self.documents.all())
if permission:
queryset = AccessControlList.objects.restrict_queryset(
permission=permission_document_view,
queryset=queryset,
user=user
)
return queryset
来源: mayan/apps/tags/models.py:67-79
文档索引系统
文档索引系统通过基于模板的表达式提供动态层级组织。它会根据文档属性自动将文档组织成树状结构。
索引模板架构
来源: mayan/apps/document_indexing/models/
模板表达式系统
索引模板使用 Django 模板语法来组织文档:
| 表达式示例 | 结果 | 用例 |
|---|---|---|
{{ document.document_type.label }} | 按文档类型分组 | 基于类型的组织 |
{{ document.datetime_created|date:"Y" }} | 按年份分组 | 基于日期的归档 |
{{ document.metadata_value_of.department }} | 按元数据分组 | 部门组织 |
{{ document.tags.first.label }} | 按第一个标签分组 | 基于标签的结构 |
来源: mayan/apps/document_indexing/tests/test_models.py:111-296
索引重建过程
来源: mayan/apps/document_indexing/tests/test_models.py:259-296
上传向导集成
所有组织系统都通过向导步骤与文档上传流程集成:
来源: mayan/apps/sources/wizards.py:22-134, mayan/apps/metadata/wizard_steps.py:11-65, mayan/apps/tags/wizard_steps.py:13-55, mayan/apps/cabinets/wizard_steps.py:13-56
REST 接口访问
所有组织系统都提供完整的 REST API 访问:
元数据 API 端点
| 端点 | 用途 |
|---|---|
GET /api/documents/{id}/metadata/ | 列出文档元数据 |
POST /api/documents/{id}/metadata/ | 向文档添加元数据 |
PUT /api/documents/{id}/metadata/{metadata_id}/ | 更新元数据值 |
DELETE /api/documents/{id}/metadata/{metadata_id}/ | 移除元数据 |
标签 API 端点
| 端点 | 用途 |
|---|---|
GET /api/documents/{id}/tags/ | 列出文档标签 |
POST /api/documents/{id}/tags/attach/ | 将标签附加到文档 |
POST /api/documents/{id}/tags/remove/ | 从文档移除标签 |
GET /api/tags/{id}/documents/ | 列出带有标签的文档 |
索引 API 端点
| 端点 | 用途 |
|---|---|
GET /api/documents/{id}/indexes/ | 列出文档索引位置 |
GET /api/index_instances/ | 列出所有索引实例 |
GET /api/index_instances/{id}/nodes/ | 浏览索引层级 |
来源: mayan/apps/metadata/urls.py:100-129, mayan/apps/tags/urls.py:68-91, mayan/apps/document_indexing/urls.py:121-212