8.6 KiB
8.6 KiB
## 客观技术限制
- **DPML语法约束**:必须遵循EBNF定义的resource语法结构
- **XML格式要求**:标签必须正确闭合,属性值必须用双引号包围
- **protocol属性强制**:resource标签必须包含protocol属性指定协议名
- **文件编码**:必须使用UTF-8编码
- **代码实现约束**:必须与ResourceManager、ResourceProtocol基类兼容
- **注册表集成**:必须与resource.registry.json统一注册表集成
- **查询参数限制**:查询参数必须符合URL标准格式
## 强制性编写规则
- **纯XML结构**:resource文件必须从``标签开始,不得包含任何XML结构外的内容
- **根标签强制**:文件必须使用``作为根标签
- **三组件完整**:必须包含location、params、registry三个子标签
- **组件顺序固定**:子标签必须按location → params → registry顺序排列
- **protocol属性必需**:根标签必须包含protocol属性且值唯一
- **文件纯净性**:除了``标签结构外,不得包含任何其他内容
- **EBNF规范性**:location标签内容必须使用EBNF语法定义路径格式
## 编写指导原则
- **协议名称清晰**:protocol属性值应简洁明了,符合kebab-case命名规范
- **路径格式标准化**:使用EBNF语法精确定义资源路径结构
- **参数文档完整**:详细说明所有支持的查询参数及其类型和用途
- **注册表合理性**:注册表映射应体现抽象性和实用性的平衡
- **兼容性考虑**:确保与PromptX资源管理系统的无缝集成
- **示例丰富性**:提供足够的使用示例帮助理解协议用法
## 编写执行流程
### Phase 1: 协议概念设计
1. **确定协议用途**:明确这个资源协议要解决什么资源访问问题
2. **分析资源特征**:识别目标资源的组织方式、访问模式和参数需求
3. **设计协议名称**:选择简洁清晰的协议标识符
4. **评估系统集成**:确认与PromptX现有协议的兼容性和差异性
### Phase 2: 路径格式设计(location组件)
1. **路径结构分析**:
- 确定资源的层次结构和定位方式
- 分析是否需要支持参数化路径
- 设计路径的语义表达
2. **EBNF语法定义**:
```ebnf
location ::= protocol_name '://' path_structure
path_structure ::= segment {'/' segment}
segment ::= literal | parameter
parameter ::= '{' parameter_name '}'
```
3. **路径规范示例**:
- 简单路径:`protocol://resource_id`
- 参数化路径:`protocol://{category}/{id}`
- 复杂路径:`protocol://{domain}/{namespace}/{resource}`
### Phase 3: 查询参数设计(params组件)
1. **参数分类规划**:
- **格式控制参数**:如format、encoding等
- **行为控制参数**:如cache、timeout等
- **过滤参数**:如line、type等
- **特定功能参数**:协议专有的参数
2. **参数文档格式**:
```markdown
| 参数名 | 类型 | 描述 | 默认值 | 示例 |
|-------|------|------|--------|------|
| format | string | 输出格式 | text | json, xml |
| cache | boolean | 是否缓存 | true | true, false |
```
3. **参数验证考虑**:
- 参数类型验证
- 参数值范围限制
- 参数组合逻辑
### Phase 4: 注册表设计(registry组件)
1. **注册表策略选择**:
- **有注册表协议**:需要ID到路径的映射(如thought, execution)
- **无注册表协议**:直接使用路径(如file, http)
2. **映射关系设计**(适用于有注册表协议):
```markdown
| 资源ID | 实际路径 | 描述 |
|--------|----------|------|
| resource-id | @package://path/to/file.md | 资源描述 |
```
3. **路径引用规范**:
- 支持@package://前缀引用包资源
- 支持@project://前缀引用项目资源
- 支持@file://前缀引用文件系统资源
- 支持嵌套协议引用
### Phase 5: DPML结构实现
**关键要求:文件必须从`<resource>`标签直接开始**
**有注册表协议示例:**
```xml
<resource protocol="custom-protocol">
<location>
```ebnf
location ::= custom-protocol://{resource_id}
resource_id ::= [a-zA-Z][a-zA-Z0-9_-]*
```
</location>
<params>
| 参数名 | 类型 | 描述 | 默认值 |
|-------|------|------|--------|
| format | string | 输出格式(text\|json\|xml) | text |
| cache | boolean | 是否缓存结果 | true |
| encoding | string | 文件编码 | utf8 |
</params>
<registry>
| 资源ID | 文件路径 |
|--------|----------|
| example-resource | @package://path/to/example.md |
| another-resource | @project://config/another.md |
</registry>
</resource>
```
**无注册表协议示例:**
```xml
<resource protocol="direct-access">
<location>
```ebnf
location ::= direct-access://{path}
path ::= absolute_path | relative_path
absolute_path ::= '/' path_segment {'/' path_segment}
relative_path ::= path_segment {'/' path_segment}
path_segment ::= [^/]+
```
</location>
<params>
| 参数名 | 类型 | 描述 | 默认值 |
|-------|------|------|--------|
| encoding | string | 文件编码 | utf8 |
| line | string | 行范围(如"1-10") | - |
</params>
<registry>
<!-- 此协议不使用注册表,直接通过路径访问资源 -->
</registry>
</resource>
```
### Phase 6: 系统集成验证
1. **注册表集成**:确保协议定义与resource.registry.json格式兼容
2. **代码实现检查**:验证是否需要创建对应的Protocol类文件
3. **ResourceManager集成**:确认协议能被ResourceManager正确加载
4. **加载语义支持**:验证@、@!、@?前缀的正确处理
5. **查询参数解析**:确保参数能被正确解析和应用
### Phase 7: 质量检查和测试
1. **语法验证**:确保DPML resource语法正确性
2. **EBNF验证**:验证location部分的EBNF语法正确性
3. **参数完整性**:确认所有参数都有清晰的类型和描述
4. **注册表一致性**:验证注册表映射的逻辑正确性
5. **纯净性检查**:确认文件从`<resource>`标签开始,无多余内容
## 质量评价标准
### 格式合规性
- ✅ 文件从`<resource protocol="协议名">`标签直接开始
- ✅ 使用正确的DPML resource标签结构
- ✅ 三个子标签按location → params → registry顺序排列
- ✅ XML语法正确,标签正确闭合
- ✅ protocol属性值符合命名规范
### 路径格式规范性
- ✅ location部分使用正确的EBNF语法
- ✅ 路径格式清晰明确,无歧义
- ✅ 参数化路径使用`{parameter}`格式
- ✅ 路径结构与协议用途匹配
- ✅ 支持协议的典型使用场景
### 参数文档完整性
- ✅ 所有参数都有清晰的类型定义
- ✅ 参数描述详细且准确
- ✅ 提供了合理的默认值
- ✅ 参数示例有助于理解
- ✅ 参数组合逻辑合理
### 注册表设计合理性
- ✅ 注册表策略与协议特性匹配
- ✅ 映射关系清晰且实用
- ✅ 路径引用符合PromptX规范
- ✅ 抽象性和具体性平衡适当
- ✅ 支持嵌套协议引用
### 系统集成性
- ✅ 与ResourceManager兼容
- ✅ 与resource.registry.json格式一致
- ✅ 支持标准加载语义(@、@!、@?)
- ✅ 查询参数能被正确解析
- ✅ 与现有协议生态协调
### 实用价值
- ✅ 解决了实际的资源访问需求
- ✅ 路径格式简洁易用
- ✅ 参数设计灵活且必要
- ✅ 注册表提供了实际价值
- ✅ 整体设计具有可扩展性
### 文件纯净性
- ✅ 文件结构完全符合DPML resource规范
- ✅ 无任何XML结构外的多余内容
- ✅ 体现resource协议定义的标准格式
- ✅ 三组件内容充实且相互配合