agentic_huge_data_base / wiki
页面 Mayan EDMS · 4.3 文档组织·DeepWiki 中文全文译文

4.3 · 文档组织(Document Organization)

企业电子文档治理 · 聚焦本章的模块关系、源码依据与实现要点。

项目Mayan EDMS 章节4.3 状态全文译文 模块文档对象与元数据、系统架构、测试、发布与运维、接口与服务契约
源码线索
  • mayan/apps/cabinets/tests/test_wizard_steps.py
  • mayan/apps/cabinets/wizard_steps.py
  • mayan/apps/document_comments/apps.py
  • mayan/apps/document_indexing/apps.py
  • mayan/apps/document_indexing/events.py
  • mayan/apps/document_indexing/icons.py
  • mayan/apps/document_indexing/links.py
  • mayan/apps/document_indexing/serializers.py
  • mayan/apps/document_indexing/tests/literals.py
  • mayan/apps/document_indexing/tests/mixins.py
模块标签
  • 文档对象与元数据
  • 系统架构
  • 测试、发布与运维
  • 接口与服务契约
  • 界面与交互

章节正文

文档组织

文档组织

相关源文件

本章引用的主要源码文件:

  • mayan/apps/cabinets/tests/test_wizard_steps.py
  • mayan/apps/cabinets/wizard_steps.py
  • mayan/apps/document_comments/apps.py
  • mayan/apps/document_indexing/apps.py
  • mayan/apps/document_indexing/events.py
  • mayan/apps/document_indexing/icons.py
  • mayan/apps/document_indexing/links.py
  • mayan/apps/document_indexing/serializers.py
  • mayan/apps/document_indexing/tests/literals.py
  • mayan/apps/document_indexing/tests/mixins.py
  • mayan/apps/document_indexing/tests/test_models.py
  • mayan/apps/document_indexing/urls.py
  • mayan/apps/linking/links.py
  • mayan/apps/metadata/api.py
  • mayan/apps/metadata/api_views.py
  • mayan/apps/metadata/apps.py
  • mayan/apps/metadata/forms.py
  • mayan/apps/metadata/links.py
  • mayan/apps/metadata/models.py
  • mayan/apps/metadata/serializers.py
  • mayan/apps/metadata/tests/literals.py
  • mayan/apps/metadata/tests/mixins.py
  • mayan/apps/metadata/tests/test_forms.py
  • mayan/apps/metadata/tests/test_models.py
  • mayan/apps/metadata/tests/test_wizard_steps.py
  • mayan/apps/metadata/urls.py
  • mayan/apps/metadata/wizard_steps.py
  • mayan/apps/quotas/tests/test_hooks.py
  • mayan/apps/sources/wizards.py
  • mayan/apps/tags/api_views.py
  • mayan/apps/tags/apps.py
  • mayan/apps/tags/events.py
  • mayan/apps/tags/links.py
  • mayan/apps/tags/models.py
  • mayan/apps/tags/serializers.py
  • mayan/apps/tags/tests/literals.py
  • mayan/apps/tags/tests/mixins.py
  • mayan/apps/tags/tests/test_document_tag_api.py
  • mayan/apps/tags/tests/test_indexing.py
  • mayan/apps/tags/tests/test_models.py
  • mayan/apps/tags/tests/test_tag_api.py
  • mayan/apps/tags/tests/test_tag_document_api.py
  • mayan/apps/tags/tests/test_views.py
  • mayan/apps/tags/tests/test_wizard_steps.py
  • mayan/apps/tags/urls.py
  • mayan/apps/tags/views.py
  • mayan/apps/tags/wizard_steps.py

本页面介绍了 Mayan EDMS 中用于分类、归类和结构化文档的组织系统。该系统提供了三种主要的组织机制:用于结构化数据的元数据管理、用于简单标签的标签系统,以及用于动态组织的层级索引。有关文档工作流管理的信息,请参阅工作流管理

概述

Mayan EDMS 中的文档组织基于三个互补的系统构建,它们满足不同的组织需求:

  • 元数据管理:附加到文档的结构化数据,具有校验和解析能力
  • 标签系统:用于快速分类的简单颜色编码标签
  • 文档索引:使用基于模板的表达式进行动态层级组织

这些系统通过向导步骤与文档上传流程集成,并可通过 REST API 以编程方式访问。

元数据管理系统

元数据系统通过 metadata 应用提供附加到文档的结构化数据。它支持带校验、默认值、查找约束和解析的带类型元数据。

核心模型与关系
Mayan EDMS · 核心模型与关系 · 图 1
Mayan EDMS · 核心模型与关系 · 图 1

来源: 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

系统支持在 defaultlookup 字段中进行模板渲染,允许基于文档属性的动态值。

来源: 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 EDMS · 上传向导集成 · 图 2
Mayan EDMS · 上传向导集成 · 图 2

来源: mayan/apps/metadata/wizard_steps.py:11-65, mayan/apps/metadata/api.py:39-99

标签系统

标签系统通过 tags 应用提供简单的颜色编码标签。标签为基本分类提供了一种比元数据更轻量的替代方案。

标签模型架构
Mayan EDMS · 标签模型架构 · 图 3
Mayan EDMS · 标签模型架构 · 图 3

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 EDMS · 索引模板架构 · 图 4
Mayan EDMS · 索引模板架构 · 图 4

来源: 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 EDMS · 索引重建过程 · 图 5
Mayan EDMS · 索引重建过程 · 图 5

来源: mayan/apps/document_indexing/tests/test_models.py:259-296

上传向导集成

所有组织系统都通过向导步骤与文档上传流程集成:

Mayan EDMS · 上传向导集成 · 图 6
Mayan EDMS · 上传向导集成 · 图 6

来源: 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