mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-04-13 11:53:48 +00:00
Compare commits
11 Commits
75b21d3633
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1fc02894b | ||
|
|
bf7b5eac72 | ||
|
|
d602b805bd | ||
|
|
9cf18904bb | ||
|
|
2f39fa0f53 | ||
|
|
d2005cfa48 | ||
|
|
4e38f853f3 | ||
|
|
3cfb185dde | ||
|
|
ef99c540bb | ||
|
|
3071bfd0f9 | ||
|
|
7bb938c145 |
12
README.md
12
README.md
@@ -32,7 +32,7 @@
|
|||||||
| 模块 | 现有能力
|
| 模块 | 现有能力
|
||||||
|:----------:|---
|
|:----------:|---
|
||||||
| **模型管理** | 多模型接入(OpenAI/DeepSeek/通义/智谱)、多模态理解、Coze/DIFY/FastGPT平台集成
|
| **模型管理** | 多模型接入(OpenAI/DeepSeek/通义/智谱)、多模态理解、Coze/DIFY/FastGPT平台集成
|
||||||
| **知识管理** | 本地RAG + 向量库(Milvus/Weaviate) + 文档解析
|
| **知识管理** | 本地RAG + 向量库(Milvus/Weaviate/Qdrant) + 文档解析
|
||||||
| **工具管理** | Mcp协议集成、Skills能力 + 可扩展工具生态
|
| **工具管理** | Mcp协议集成、Skills能力 + 可扩展工具生态
|
||||||
| **流程编排** | 可视化工作流设计器、节点拖拽编排、SSE流式执行,目前已经支持模型调用,邮件发送,人工审核等节点
|
| **流程编排** | 可视化工作流设计器、节点拖拽编排、SSE流式执行,目前已经支持模型调用,邮件发送,人工审核等节点
|
||||||
| **多智能体** | 基于Langchain4j的Agent框架、Supervisor模式编排,支持多种决策模型
|
| **多智能体** | 基于Langchain4j的Agent框架、Supervisor模式编排,支持多种决策模型
|
||||||
@@ -62,8 +62,8 @@
|
|||||||
## 🛠️ 技术架构
|
## 🛠️ 技术架构
|
||||||
|
|
||||||
### 核心框架
|
### 核心框架
|
||||||
- **后端架构**:Spring Boot 4.0 + Spring ai 2.0 + Langchain4j
|
- **后端架构**:Spring Boot 3.5.8 + Langchain4j
|
||||||
- **数据存储**:MySQL 8.0 + Redis + 向量数据库(Milvus/Weaviate)
|
- **数据存储**:MySQL 8.0 + Redis + 向量数据库(Milvus/Weaviate/Qdrant)
|
||||||
- **前端技术**:Vue 3 + Vben Admin + element-plus-x
|
- **前端技术**:Vue 3 + Vben Admin + element-plus-x
|
||||||
- **安全认证**:Sa-Token + JWT 双重保障
|
- **安全认证**:Sa-Token + JWT 双重保障
|
||||||
|
|
||||||
@@ -189,12 +189,6 @@ docker-compose -f docker-compose-all.yaml restart [服务名]
|
|||||||
|
|
||||||
**👉 [完整使用文档](https://doc.pandarobot.chat)**
|
**👉 [完整使用文档](https://doc.pandarobot.chat)**
|
||||||
|
|
||||||
遇到知识库或 RAG 回答异常问题?
|
|
||||||
|
|
||||||
**👉 [RAG 回答异常排查手册](docs/troubleshooting/rag-failures.md)**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🤝 参与贡献
|
## 🤝 参与贡献
|
||||||
|
|
||||||
我们热烈欢迎社区贡献!无论您是资深开发者还是初学者,都可以为项目贡献力量 💪
|
我们热烈欢迎社区贡献!无论您是资深开发者还是初学者,都可以为项目贡献力量 💪
|
||||||
|
|||||||
12
README_EN.md
12
README_EN.md
@@ -35,7 +35,7 @@
|
|||||||
| Module | Current Capabilities |
|
| Module | Current Capabilities |
|
||||||
|:---:|---|
|
|:---:|---|
|
||||||
| **Model Management** | Multi-model integration (OpenAI/DeepSeek/Tongyi/Zhipu), multi-modal understanding, Coze/DIFY/FastGPT platform integration |
|
| **Model Management** | Multi-model integration (OpenAI/DeepSeek/Tongyi/Zhipu), multi-modal understanding, Coze/DIFY/FastGPT platform integration |
|
||||||
| **Knowledge Base** | Local RAG + Vector DB (Milvus/Weaviate) + Document parsing |
|
| **Knowledge Base** | Local RAG + Vector DB (Milvus/Weaviate/Qdrant) + Document parsing |
|
||||||
| **Tool Management** | MCP protocol integration, Skills capability + Extensible tool ecosystem |
|
| **Tool Management** | MCP protocol integration, Skills capability + Extensible tool ecosystem |
|
||||||
| **Workflow Orchestration** | Visual workflow designer, drag-and-drop node orchestration, SSE streaming execution, currently supports model calls, email sending, manual review nodes |
|
| **Workflow Orchestration** | Visual workflow designer, drag-and-drop node orchestration, SSE streaming execution, currently supports model calls, email sending, manual review nodes |
|
||||||
| **Multi-Agent** | Agent framework based on Langchain4j, Supervisor mode orchestration, supports multiple decision models |
|
| **Multi-Agent** | Agent framework based on Langchain4j, Supervisor mode orchestration, supports multiple decision models |
|
||||||
@@ -65,8 +65,8 @@
|
|||||||
## 🛠️ Technical Architecture
|
## 🛠️ Technical Architecture
|
||||||
|
|
||||||
### Core Framework
|
### Core Framework
|
||||||
- **Backend**: Spring Boot 4.0 + Spring AI 2.0 + Langchain4j
|
- **Backend**: Spring Boot 3.5.8 + Langchain4j
|
||||||
- **Data Storage**: MySQL 8.0 + Redis + Vector Databases (Milvus/Weaviate)
|
- **Data Storage**: MySQL 8.0 + Redis + Vector Databases (Milvus/Weaviate/Qdrant)
|
||||||
- **Frontend**: Vue 3 + Vben Admin + element-plus-x
|
- **Frontend**: Vue 3 + Vben Admin + element-plus-x
|
||||||
- **Security**: Sa-Token + JWT dual-layer security
|
- **Security**: Sa-Token + JWT dual-layer security
|
||||||
|
|
||||||
@@ -192,12 +192,6 @@ Want to learn more about installation, deployment, configuration, and secondary
|
|||||||
|
|
||||||
**👉 [Complete Documentation](https://doc.pandarobot.chat)**
|
**👉 [Complete Documentation](https://doc.pandarobot.chat)**
|
||||||
|
|
||||||
Experiencing issues with knowledge base or RAG responses?
|
|
||||||
|
|
||||||
**👉 [RAG Troubleshooting Guide](docs/troubleshooting/rag-failures.md)**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🤝 Contributing
|
## 🤝 Contributing
|
||||||
|
|
||||||
We warmly welcome community contributions! Whether you are a seasoned developer or just getting started, you can contribute to the project 💪
|
We warmly welcome community contributions! Whether you are a seasoned developer or just getting started, you can contribute to the project 💪
|
||||||
|
|||||||
12
docs/docker/qdrant/docker-compose.yml
Normal file
12
docs/docker/qdrant/docker-compose.yml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
services:
|
||||||
|
qdrant:
|
||||||
|
image: qdrant/qdrant:latest
|
||||||
|
ports:
|
||||||
|
- 6333:6333
|
||||||
|
- 6334:6334
|
||||||
|
volumes:
|
||||||
|
- qdrant_data:/qdrant/storage
|
||||||
|
volumes:
|
||||||
|
qdrant_data:
|
||||||
|
...
|
||||||
@@ -1,352 +0,0 @@
|
|||||||
<a id="top"></a>
|
|
||||||
|
|
||||||
# RAG 常见故障排查(16 问题清单)
|
|
||||||
|
|
||||||
当知识库已经接入,系统也能正常回答,但结果仍然出现命中错误、引用旧内容、推理漂移、跨轮次失忆,或部署后表面可用但实际异常时,最常见的问题不是“模型不行”,而是**不同层的故障被混在一起处理**。
|
|
||||||
|
|
||||||
这份页面不重新发明一套新方法。
|
|
||||||
它直接使用一份固定的 **16 问题清单** 作为排查主轴,让你先把问题标到正确的 **No.X**,再决定下一步查哪里、改哪里,而不是一次性乱改检索、模型、切块、会话和部署配置。
|
|
||||||
|
|
||||||
这份清单的核心目的只有一个:
|
|
||||||
|
|
||||||
**先把问题放进正确的故障域,再做修复。**
|
|
||||||
|
|
||||||
快速导航:
|
|
||||||
[这页怎么用](#how-to-use) | [标签说明](#legend) | [常见症状入口](#symptoms) | [16 问题清单](#map16) | [按层排查](#by-layer) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<a id="how-to-use"></a>
|
|
||||||
|
|
||||||
## 一、这页怎么用
|
|
||||||
|
|
||||||
这不是一篇“从头到尾照着做”的传统教程。
|
|
||||||
它更像一张固定的 RAG 故障地图,作用是先帮助你**判断故障属于哪一种类型**。
|
|
||||||
|
|
||||||
建议按下面顺序使用:
|
|
||||||
|
|
||||||
### 1. 先看现象,不要先改配置
|
|
||||||
|
|
||||||
先回答两个问题:
|
|
||||||
|
|
||||||
1. 你看到的故障,最像哪一种症状
|
|
||||||
2. 这个故障更像发生在输入检索层、推理层、状态层,还是部署层
|
|
||||||
|
|
||||||
在还没判断层级之前,不要先一起改这些东西:
|
|
||||||
|
|
||||||
- 检索条数
|
|
||||||
- 切块大小
|
|
||||||
- 会话配置
|
|
||||||
- 模型参数
|
|
||||||
- 部署顺序
|
|
||||||
- 依赖服务
|
|
||||||
|
|
||||||
如果先全部一起动,问题通常只会更难定位。
|
|
||||||
|
|
||||||
### 2. 先给问题打上 No.X 标签
|
|
||||||
|
|
||||||
这份页面最重要的动作,不是“立刻修好”,而是先做一件小事:
|
|
||||||
|
|
||||||
**给当前问题贴上最接近的 No.X。**
|
|
||||||
|
|
||||||
例如:
|
|
||||||
|
|
||||||
- 检索结果看起来相似,但其实答非所问,先看 `No.1` 或 `No.5`
|
|
||||||
- 切块是对的,但结论还是错,先看 `No.2`
|
|
||||||
- 系统回答很自信,但没有根据,先看 `No.4`
|
|
||||||
- 刚部署完就炸,先看 `No.14` 到 `No.16`
|
|
||||||
|
|
||||||
### 3. 一次只排一个故障域
|
|
||||||
|
|
||||||
同一个表面现象,背后可能是不同层的问题。
|
|
||||||
例如“答案不对”既可能是:
|
|
||||||
|
|
||||||
- `No.1` 检索漂移
|
|
||||||
- `No.2` 理解塌陷
|
|
||||||
- `No.4` 自信乱答
|
|
||||||
- `No.8` 根本看不到错误路径
|
|
||||||
|
|
||||||
所以这张表的用法不是“多选全改”,而是:
|
|
||||||
|
|
||||||
**先挑最接近的一项,优先验证这一项是否成立。**
|
|
||||||
|
|
||||||
[返回顶部](#top) | [下一节:标签说明](#legend)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<a id="legend"></a>
|
|
||||||
|
|
||||||
## 二、标签说明
|
|
||||||
|
|
||||||
这份 16 问题清单本身已经带有层级 / 标签结构。
|
|
||||||
这些标签不是装饰,而是用来帮助你快速判断故障发生在哪一层。
|
|
||||||
|
|
||||||
### 1. 层级标签
|
|
||||||
|
|
||||||
- `[IN]`:输入与检索
|
|
||||||
输入、切块、召回、语义匹配、可见性问题
|
|
||||||
|
|
||||||
- `[RE]`:推理与规划
|
|
||||||
理解、推理、归纳、逻辑链、抽象处理问题
|
|
||||||
|
|
||||||
- `[ST]`:状态与上下文
|
|
||||||
会话、记忆、上下文连续性、多代理状态问题
|
|
||||||
|
|
||||||
- `[OP]`:基础设施与部署
|
|
||||||
启动顺序、依赖就绪、部署锁死、预部署状态问题
|
|
||||||
|
|
||||||
### 2. `{OBS}` 标签
|
|
||||||
|
|
||||||
带 `{OBS}` 的项,通常都和“**你是否看得见问题是怎么坏掉的**”有关。
|
|
||||||
它们往往不是单纯回答错误,而是:
|
|
||||||
|
|
||||||
- 错误路径不可见
|
|
||||||
- 漂移过程不可见
|
|
||||||
- 状态熔化过程不可见
|
|
||||||
- 多代理覆盖过程不可见
|
|
||||||
|
|
||||||
所以一旦你发现“我知道结果错,但我根本看不到它是怎么错的”,通常就已经很接近 `{OBS}` 类问题了。
|
|
||||||
|
|
||||||
### 3. 为什么要保留这些标签
|
|
||||||
|
|
||||||
因为同样叫“答错了”,实际含义完全不同。
|
|
||||||
|
|
||||||
例如:
|
|
||||||
|
|
||||||
- `[IN]` 的答错,常常是**拿错材料**
|
|
||||||
- `[RE]` 的答错,常常是**拿对材料但理解错**
|
|
||||||
- `[ST]` 的答错,常常是**前文断掉、状态漂移**
|
|
||||||
- `[OP]` 的答错,常常是**系统根本没在完整状态下运行**
|
|
||||||
|
|
||||||
如果不先分层,就会掉进典型的 RAG 地狱:
|
|
||||||
表面在改答案,实际上在盲修。
|
|
||||||
|
|
||||||
[返回顶部](#top) | [下一节:常见症状入口](#symptoms)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<a id="symptoms"></a>
|
|
||||||
|
|
||||||
## 三、常见症状入口
|
|
||||||
|
|
||||||
如果你现在还不知道该从哪一项开始,就先从症状入口反查。
|
|
||||||
|
|
||||||
### 1. 检索返回了错误内容,或看起来相关但其实不回答问题
|
|
||||||
|
|
||||||
这类问题最常见的是:
|
|
||||||
“有命中,但命中的不是该用的内容。”
|
|
||||||
|
|
||||||
优先看:
|
|
||||||
|
|
||||||
- [No.1](#no1) `幻觉与切块漂移`
|
|
||||||
- [No.5](#no5) `语义 ≠ 向量嵌入`
|
|
||||||
- [No.8](#no8) `调试是一个黑箱`
|
|
||||||
|
|
||||||
### 2. 切块本身是对的,但最终答案还是错的
|
|
||||||
|
|
||||||
这类问题不是简单没检索到,而是后面那层坏了。
|
|
||||||
|
|
||||||
优先看:
|
|
||||||
|
|
||||||
- [No.2](#no2) `解释塌陷`
|
|
||||||
- [No.4](#no4) `虚张声势 / 过度自信`
|
|
||||||
- [No.6](#no6) `逻辑塌陷与恢复`
|
|
||||||
|
|
||||||
### 3. 多步任务一开始正常,后面越来越偏
|
|
||||||
|
|
||||||
这类问题通常不是单点错误,而是中途漂移或熔化。
|
|
||||||
|
|
||||||
优先看:
|
|
||||||
|
|
||||||
- [No.3](#no3) `长推理链`
|
|
||||||
- [No.6](#no6) `逻辑塌陷与恢复`
|
|
||||||
- [No.9](#no9) `熵塌陷`
|
|
||||||
|
|
||||||
### 4. 多轮对话后开始失忆,跨轮次接不上
|
|
||||||
|
|
||||||
这类问题一般已经进入状态层。
|
|
||||||
|
|
||||||
优先看:
|
|
||||||
|
|
||||||
- [No.7](#no7) `跨会话记忆断裂`
|
|
||||||
- [No.9](#no9) `熵塌陷`
|
|
||||||
- [No.13](#no13) `多代理混乱`
|
|
||||||
|
|
||||||
### 5. 遇到抽象、逻辑、规则、符号关系就崩
|
|
||||||
|
|
||||||
这类问题通常不是检索空,而是推理结构扛不住。
|
|
||||||
|
|
||||||
优先看:
|
|
||||||
|
|
||||||
- [No.11](#no11) `符号塌陷`
|
|
||||||
- [No.12](#no12) `哲学递归`
|
|
||||||
|
|
||||||
### 6. 你根本不知道错在哪一层,只知道结果不对
|
|
||||||
|
|
||||||
这类问题先不要乱调参数。
|
|
||||||
先解决“不可见”的问题。
|
|
||||||
|
|
||||||
优先看:
|
|
||||||
|
|
||||||
- [No.8](#no8) `调试是一个黑箱`
|
|
||||||
|
|
||||||
### 7. 刚部署完最容易炸,首轮调用异常,重启后偶尔恢复
|
|
||||||
|
|
||||||
这类问题通常不在答案逻辑,而在部署状态。
|
|
||||||
|
|
||||||
优先看:
|
|
||||||
|
|
||||||
- [No.14](#no14) `引导启动顺序`
|
|
||||||
- [No.15](#no15) `部署死锁`
|
|
||||||
- [No.16](#no16) `预部署塌陷`
|
|
||||||
|
|
||||||
[返回顶部](#top) | [下一节:16 问题清单](#map16)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<a id="map16"></a>
|
|
||||||
|
|
||||||
## 四、16 问题清单(固定主表)
|
|
||||||
|
|
||||||
下面这 16 项按固定顺序使用。
|
|
||||||
不要先重组,不要先混类,先判断最接近哪一个 **No.X**。
|
|
||||||
|
|
||||||
| # | 问题域(含层级/标签) | 会坏在哪里 |
|
|
||||||
|---|---|---|
|
|
||||||
| <a id="no1"></a> 1 | `[IN] 幻觉与切块漂移 {OBS}` | 检索返回错误/无关内容 |
|
|
||||||
| <a id="no2"></a> 2 | `[RE] 解释塌陷` | 切块是对的,逻辑是错的 |
|
|
||||||
| <a id="no3"></a> 3 | `[RE] 长推理链 {OBS}` | 在多步任务中逐步漂移 |
|
|
||||||
| <a id="no4"></a> 4 | `[RE] 虚张声势 / 过度自信` | 自信但没有根据的回答 |
|
|
||||||
| <a id="no5"></a> 5 | `[IN] 语义 ≠ 向量嵌入 {OBS}` | 余弦匹配 ≠ 真实语义 |
|
|
||||||
| <a id="no6"></a> 6 | `[RE] 逻辑塌陷与恢复 {OBS}` | 走入死胡同,需要受控重置 |
|
|
||||||
| <a id="no7"></a> 7 | `[ST] 跨会话记忆断裂` | 线索丢失,没有连续性 |
|
|
||||||
| <a id="no8"></a> 8 | `[IN] 调试是一个黑箱 {OBS}` | 看不到故障路径 |
|
|
||||||
| <a id="no9"></a> 9 | `[ST] 熵塌陷` | 注意力熔化,输出失去连贯性 |
|
|
||||||
| <a id="no10"></a> 10 | `[RE] 创造力冻结` | 平直、字面化输出 |
|
|
||||||
| <a id="no11"></a> 11 | `[RE] 符号塌陷` | 抽象/逻辑性提示词失效 |
|
|
||||||
| <a id="no12"></a> 12 | `[RE] 哲学递归` | 自我引用循环、悖论陷阱 |
|
|
||||||
| <a id="no13"></a> 13 | `[ST] 多代理混乱 {OBS}` | 代理互相覆盖或使逻辑错位 |
|
|
||||||
| <a id="no14"></a> 14 | `[OP] 引导启动顺序` | 依赖未就绪时服务先启动 |
|
|
||||||
| <a id="no15"></a> 15 | `[OP] 部署死锁` | 基础设施中的循环等待 |
|
|
||||||
| <a id="no16"></a> 16 | `[OP] 预部署塌陷 {OBS}` | 首次调用时版本错配 / 缺少密钥 |
|
|
||||||
|
|
||||||
这张表是主表。
|
|
||||||
如果你时间很少,只做一件事也行:
|
|
||||||
|
|
||||||
**先从这 16 项里选出最接近的一项。**
|
|
||||||
|
|
||||||
[返回顶部](#top) | [下一节:按层排查](#by-layer)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<a id="by-layer"></a>
|
|
||||||
|
|
||||||
## 五、按层排查:不要改错层
|
|
||||||
|
|
||||||
这一节不重写 16 项,只是告诉你:
|
|
||||||
当你已经选到某个 No.X 时,第一眼应该优先查哪一层。
|
|
||||||
|
|
||||||
### A. `[IN]` 层:先确认你拿到的是不是对的材料
|
|
||||||
|
|
||||||
对应编号:
|
|
||||||
|
|
||||||
- [No.1](#no1)
|
|
||||||
- [No.5](#no5)
|
|
||||||
- [No.8](#no8)
|
|
||||||
|
|
||||||
这层最常见的误判是:
|
|
||||||
|
|
||||||
“我以为系统理解错了,其实它一开始就拿错了东西。”
|
|
||||||
|
|
||||||
如果你命中了弱相关片段、表面相似文本、错误切块,后面推理再强也没用。
|
|
||||||
所以 `[IN]` 层优先看的是:
|
|
||||||
|
|
||||||
1. 原始召回内容到底是什么
|
|
||||||
2. 命中的片段是否只是“相似”,而不是“正确”
|
|
||||||
3. 你是否能看到检索过程,还是整个过程像黑箱
|
|
||||||
|
|
||||||
这层如果没先排好,后面的推理诊断通常会失真。
|
|
||||||
|
|
||||||
### B. `[RE]` 层:材料可能是对的,但系统用错了
|
|
||||||
|
|
||||||
对应编号:
|
|
||||||
|
|
||||||
- [No.2](#no2)
|
|
||||||
- [No.3](#no3)
|
|
||||||
- [No.4](#no4)
|
|
||||||
- [No.6](#no6)
|
|
||||||
- [No.10](#no10)
|
|
||||||
- [No.11](#no11)
|
|
||||||
- [No.12](#no12)
|
|
||||||
|
|
||||||
这层最常见的误判是:
|
|
||||||
|
|
||||||
“我以为是检索坏了,其实是后面理解、归纳、逻辑链坏了。”
|
|
||||||
|
|
||||||
例如:
|
|
||||||
|
|
||||||
- 切块是对的,但结论错了 → 常见是 `No.2`
|
|
||||||
- 多步任务中途开始偏 → 常见是 `No.3`
|
|
||||||
- 回答很笃定,但完全站不住 → 常见是 `No.4`
|
|
||||||
- 遇到抽象规则就崩 → 常见是 `No.11`
|
|
||||||
- 陷入循环解释 → 常见是 `No.12`
|
|
||||||
|
|
||||||
如果 `[IN]` 层已经基本没问题,答案还是不对,就应该优先回到 `[RE]` 层判断是哪一种塌陷。
|
|
||||||
|
|
||||||
### C. `[ST]` 层:单轮正常,不代表状态层正常
|
|
||||||
|
|
||||||
对应编号:
|
|
||||||
|
|
||||||
- [No.7](#no7)
|
|
||||||
- [No.9](#no9)
|
|
||||||
- [No.13](#no13)
|
|
||||||
|
|
||||||
这层最常见的误判是:
|
|
||||||
|
|
||||||
“单轮看起来还行,所以我以为系统没问题。”
|
|
||||||
|
|
||||||
其实很多 RAG 地狱不是单轮错误,而是:
|
|
||||||
|
|
||||||
- 多轮之后前文断掉
|
|
||||||
- 上下文越来越乱
|
|
||||||
- 多角色、多代理之间互相覆盖
|
|
||||||
|
|
||||||
如果你发现:
|
|
||||||
|
|
||||||
- 第一轮没事,后面越来越歪
|
|
||||||
- 切换角色后前面的约束消失
|
|
||||||
- 多个步骤之间状态彼此污染
|
|
||||||
|
|
||||||
那就不要再只盯着检索条数了,应该直接回到 `[ST]` 层看 `No.7 / No.9 / No.13`。
|
|
||||||
|
|
||||||
### D. `[OP]` 层:别把部署问题误诊成回答问题
|
|
||||||
|
|
||||||
对应编号:
|
|
||||||
|
|
||||||
- [No.14](#no14)
|
|
||||||
- [No.15](#no15)
|
|
||||||
- [No.16](#no16)
|
|
||||||
|
|
||||||
这层最常见的误判是:
|
|
||||||
|
|
||||||
“答案不稳定,所以我先去调模型或检索。”
|
|
||||||
|
|
||||||
但如果系统根本没有在完整状态下启动,所有上层表现都会像鬼打墙。
|
|
||||||
尤其是这些情况:
|
|
||||||
|
|
||||||
- 依赖还没就绪,服务先起了 → `No.14`
|
|
||||||
- 多个组件互相等待,长期半可用 → `No.15`
|
|
||||||
- 首次调用就因为版本、密钥、环境没对齐而塌陷 → `No.16`
|
|
||||||
|
|
||||||
只要你看到“刚部署最容易出事”“首轮异常最严重”“重启后暂时恢复”,就要优先怀疑 `[OP]` 层,而不是先改提示词或参数。
|
|
||||||
|
|
||||||
[返回顶部](#top) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<a id="issue-report"></a>
|
|
||||||
|
|
||||||
|
|
||||||
## 六、快速返回
|
|
||||||
|
|
||||||
[返回顶部](#top) | [这页怎么用](#how-to-use) | [标签说明](#legend) | [常见症状入口](#symptoms) | [16 问题清单](#map16) | [按层排查](#by-layer)
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
## 接口信息
|
|
||||||
|
|
||||||
**接口路径**: `POST /resource/oss/upload`
|
|
||||||
**请求类型**: `multipart/form-data`
|
|
||||||
**权限要求**: `system:oss:upload`
|
|
||||||
**业务类型**: [INSERT]
|
|
||||||
|
|
||||||
### 接口描述
|
|
||||||
上传OSS对象存储接口,用于将文件上传到对象存储服务。
|
|
||||||
|
|
||||||
### 请求参数
|
|
||||||
| 参数名 | 类型 | 必填 | 说明 |
|
|
||||||
| ---- | ------------- | ---- | ------ |
|
|
||||||
| file | MultipartFile | 是 | 要上传的文件 |
|
|
||||||
|
|
||||||
### 请求头
|
|
||||||
- `Content-Type`: `multipart/form-data`
|
|
||||||
|
|
||||||
### 返回值
|
|
||||||
返回 `R<SysOssUploadVo>` 类型,包含以下字段:
|
|
||||||
| 字段名 | 类型 | 说明 |
|
|
||||||
| -------- | ------ | ------- |
|
|
||||||
| url | String | 文件访问URL |
|
|
||||||
| fileName | String | 原始文件名 |
|
|
||||||
| ossId | String | 文件ID |
|
|
||||||
|
|
||||||
### 响应示例
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"code": 200,
|
|
||||||
"msg": "操作成功",
|
|
||||||
"data": {
|
|
||||||
"url": "fileid://xxx",
|
|
||||||
"fileName": "example.jpg",
|
|
||||||
"ossId": "123"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### 异常情况
|
|
||||||
- 当上传文件为空时,返回错误信息:"上传文件不能为空"
|
|
||||||
4
pom.xml
4
pom.xml
@@ -54,8 +54,8 @@
|
|||||||
<!-- Jackson XML -->
|
<!-- Jackson XML -->
|
||||||
<jackson-dataformat-xml.version>2.18.2</jackson-dataformat-xml.version>
|
<jackson-dataformat-xml.version>2.18.2</jackson-dataformat-xml.version>
|
||||||
<!-- AI 相关依赖 -->
|
<!-- AI 相关依赖 -->
|
||||||
<langchain4j.version>1.11.0</langchain4j.version>
|
<langchain4j.version>1.13.0</langchain4j.version>
|
||||||
<langchain4j.community.version>1.11.0-beta19</langchain4j.community.version>
|
<langchain4j.community.version>1.13.0-beta23</langchain4j.community.version>
|
||||||
<langgraph4j.version>1.5.3</langgraph4j.version>
|
<langgraph4j.version>1.5.3</langgraph4j.version>
|
||||||
<weaviate.version>1.19.6</weaviate.version>
|
<weaviate.version>1.19.6</weaviate.version>
|
||||||
<dify.version>1.0.7</dify.version>
|
<dify.version>1.0.7</dify.version>
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ import org.springframework.boot.SpringApplication;
|
|||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
|
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
|
||||||
|
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 启动程序
|
* 启动程序
|
||||||
*
|
*
|
||||||
@@ -13,10 +16,66 @@ import org.springframework.boot.context.metrics.buffering.BufferingApplicationSt
|
|||||||
public class RuoYiAIApplication {
|
public class RuoYiAIApplication {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
killPortProcess(6039);
|
||||||
SpringApplication application = new SpringApplication(RuoYiAIApplication.class);
|
SpringApplication application = new SpringApplication(RuoYiAIApplication.class);
|
||||||
application.setApplicationStartup(new BufferingApplicationStartup(2048));
|
application.setApplicationStartup(new BufferingApplicationStartup(2048));
|
||||||
application.run(args);
|
application.run(args);
|
||||||
System.out.println("(♥◠‿◠)ノ゙ RuoYi-AI启动成功 ლ(´ڡ`ლ)゙");
|
System.out.println("(♥◠‿◠)ノ゙ RuoYi-AI启动成功 ლ(´ڡ`ლ)");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查并终止占用指定端口的进程
|
||||||
|
*
|
||||||
|
* @param port 端口号
|
||||||
|
*/
|
||||||
|
private static void killPortProcess(int port) {
|
||||||
|
try {
|
||||||
|
if (!isPortInUse(port)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
System.out.println("端口 " + port + " 已被占用,正在查找并终止进程...");
|
||||||
|
|
||||||
|
ProcessBuilder pb = new ProcessBuilder("netstat", "-ano");
|
||||||
|
Process process = pb.start();
|
||||||
|
java.io.BufferedReader reader = new java.io.BufferedReader(
|
||||||
|
new java.io.InputStreamReader(process.getInputStream()));
|
||||||
|
|
||||||
|
String line;
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
if (line.contains(":" + port + " ") && line.contains("LISTENING")) {
|
||||||
|
String[] parts = line.trim().split("\\s+");
|
||||||
|
String pid = parts[parts.length - 1];
|
||||||
|
System.out.println("找到占用端口 " + port + " 的进程 PID: " + pid + ",正在终止...");
|
||||||
|
|
||||||
|
ProcessBuilder killPb = new ProcessBuilder("taskkill", "/F", "/PID", pid);
|
||||||
|
Process killProcess = killPb.start();
|
||||||
|
int exitCode = killProcess.waitFor();
|
||||||
|
if (exitCode == 0) {
|
||||||
|
System.out.println("进程 " + pid + " 已成功终止");
|
||||||
|
} else {
|
||||||
|
System.out.println("终止进程 " + pid + " 失败,exitCode: " + exitCode);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 等待一小段时间确保端口释放
|
||||||
|
Thread.sleep(500);
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("检查/终止端口进程时发生异常: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查端口是否被占用
|
||||||
|
*/
|
||||||
|
private static boolean isPortInUse(int port) {
|
||||||
|
try (ServerSocket socket = new ServerSocket()) {
|
||||||
|
socket.bind(new InetSocketAddress(port));
|
||||||
|
return false;
|
||||||
|
} catch (Exception e) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
--- # 监控中心配置
|
--- # 监控中心配置
|
||||||
spring.boot.admin.client:
|
spring.boot.admin.client:
|
||||||
# 增加客户端开关
|
# 增加客户端开关
|
||||||
@@ -58,7 +59,7 @@ spring:
|
|||||||
driverClassName: com.mysql.cj.jdbc.Driver
|
driverClassName: com.mysql.cj.jdbc.Driver
|
||||||
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
|
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
|
||||||
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
|
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
|
||||||
url: jdbc:mysql://127.0.0.1:3306/ruoyi-ai-agent?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
url: jdbc:mysql://127.0.0.1:3306/ruoyi-ai?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||||
username: root
|
username: root
|
||||||
password: root
|
password: root
|
||||||
# agent:
|
# agent:
|
||||||
|
|||||||
@@ -260,6 +260,23 @@ websocket:
|
|||||||
# 设置访问源地址
|
# 设置访问源地址
|
||||||
allowedOrigins: '*'
|
allowedOrigins: '*'
|
||||||
|
|
||||||
|
--- # 演示模式配置
|
||||||
|
demo:
|
||||||
|
# 是否开启演示模式(开启后所有写操作将被拦截)
|
||||||
|
enabled: false
|
||||||
|
# 提示消息
|
||||||
|
message: "演示模式,不允许进行写操作"
|
||||||
|
# 排除的路径(这些路径不受演示模式限制)
|
||||||
|
excludes:
|
||||||
|
- /login
|
||||||
|
- /logout
|
||||||
|
- /register
|
||||||
|
- /captcha/**
|
||||||
|
- /auth/**
|
||||||
|
- /chat/send
|
||||||
|
- /system/session/**
|
||||||
|
- /system/message/**
|
||||||
|
|
||||||
--- # warm-flow工作流配置
|
--- # warm-flow工作流配置
|
||||||
warm-flow:
|
warm-flow:
|
||||||
# 是否开启工作流,默认true
|
# 是否开启工作流,默认true
|
||||||
|
|||||||
30
ruoyi-admin/src/main/resources/skills/docx/LICENSE.txt
Normal file
30
ruoyi-admin/src/main/resources/skills/docx/LICENSE.txt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
© 2025 Anthropic, PBC. All rights reserved.
|
||||||
|
|
||||||
|
LICENSE: Use of these materials (including all code, prompts, assets, files,
|
||||||
|
and other components of this Skill) is governed by your agreement with
|
||||||
|
Anthropic regarding use of Anthropic's services. If no separate agreement
|
||||||
|
exists, use is governed by Anthropic's Consumer Terms of Service or
|
||||||
|
Commercial Terms of Service, as applicable:
|
||||||
|
https://www.anthropic.com/legal/consumer-terms
|
||||||
|
https://www.anthropic.com/legal/commercial-terms
|
||||||
|
Your applicable agreement is referred to as the "Agreement." "Services" are
|
||||||
|
as defined in the Agreement.
|
||||||
|
|
||||||
|
ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the
|
||||||
|
contrary, users may not:
|
||||||
|
|
||||||
|
- Extract these materials from the Services or retain copies of these
|
||||||
|
materials outside the Services
|
||||||
|
- Reproduce or copy these materials, except for temporary copies created
|
||||||
|
automatically during authorized use of the Services
|
||||||
|
- Create derivative works based on these materials
|
||||||
|
- Distribute, sublicense, or transfer these materials to any third party
|
||||||
|
- Make, offer to sell, sell, or import any inventions embodied in these
|
||||||
|
materials
|
||||||
|
- Reverse engineer, decompile, or disassemble these materials
|
||||||
|
|
||||||
|
The receipt, viewing, or possession of these materials does not convey or
|
||||||
|
imply any license or right beyond those expressly granted above.
|
||||||
|
|
||||||
|
Anthropic retains all right, title, and interest in these materials,
|
||||||
|
including all copyrights, patents, and other intellectual property rights.
|
||||||
590
ruoyi-admin/src/main/resources/skills/docx/SKILL.md
Normal file
590
ruoyi-admin/src/main/resources/skills/docx/SKILL.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
"""Accept all tracked changes in a DOCX file using LibreOffice.
|
||||||
|
|
||||||
|
Requires LibreOffice (soffice) to be installed.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import logging
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from office.soffice import get_soffice_env
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
LIBREOFFICE_PROFILE = "/tmp/libreoffice_docx_profile"
|
||||||
|
MACRO_DIR = f"{LIBREOFFICE_PROFILE}/user/basic/Standard"
|
||||||
|
|
||||||
|
ACCEPT_CHANGES_MACRO = """<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
||||||
|
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Module1" script:language="StarBasic">
|
||||||
|
Sub AcceptAllTrackedChanges()
|
||||||
|
Dim document As Object
|
||||||
|
Dim dispatcher As Object
|
||||||
|
|
||||||
|
document = ThisComponent.CurrentController.Frame
|
||||||
|
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
|
||||||
|
|
||||||
|
dispatcher.executeDispatch(document, ".uno:AcceptAllTrackedChanges", "", 0, Array())
|
||||||
|
ThisComponent.store()
|
||||||
|
ThisComponent.close(True)
|
||||||
|
End Sub
|
||||||
|
</script:module>"""
|
||||||
|
|
||||||
|
|
||||||
|
def accept_changes(
|
||||||
|
input_file: str,
|
||||||
|
output_file: str,
|
||||||
|
) -> tuple[None, str]:
|
||||||
|
input_path = Path(input_file)
|
||||||
|
output_path = Path(output_file)
|
||||||
|
|
||||||
|
if not input_path.exists():
|
||||||
|
return None, f"Error: Input file not found: {input_file}"
|
||||||
|
|
||||||
|
if not input_path.suffix.lower() == ".docx":
|
||||||
|
return None, f"Error: Input file is not a DOCX file: {input_file}"
|
||||||
|
|
||||||
|
try:
|
||||||
|
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
shutil.copy2(input_path, output_path)
|
||||||
|
except Exception as e:
|
||||||
|
return None, f"Error: Failed to copy input file to output location: {e}"
|
||||||
|
|
||||||
|
if not _setup_libreoffice_macro():
|
||||||
|
return None, "Error: Failed to setup LibreOffice macro"
|
||||||
|
|
||||||
|
cmd = [
|
||||||
|
"soffice",
|
||||||
|
"--headless",
|
||||||
|
f"-env:UserInstallation=file://{LIBREOFFICE_PROFILE}",
|
||||||
|
"--norestore",
|
||||||
|
"vnd.sun.star.script:Standard.Module1.AcceptAllTrackedChanges?language=Basic&location=application",
|
||||||
|
str(output_path.absolute()),
|
||||||
|
]
|
||||||
|
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
cmd,
|
||||||
|
capture_output=True,
|
||||||
|
text=True,
|
||||||
|
timeout=30,
|
||||||
|
check=False,
|
||||||
|
env=get_soffice_env(),
|
||||||
|
)
|
||||||
|
except subprocess.TimeoutExpired:
|
||||||
|
return (
|
||||||
|
None,
|
||||||
|
f"Successfully accepted all tracked changes: {input_file} -> {output_file}",
|
||||||
|
)
|
||||||
|
|
||||||
|
if result.returncode != 0:
|
||||||
|
return None, f"Error: LibreOffice failed: {result.stderr}"
|
||||||
|
|
||||||
|
return (
|
||||||
|
None,
|
||||||
|
f"Successfully accepted all tracked changes: {input_file} -> {output_file}",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _setup_libreoffice_macro() -> bool:
|
||||||
|
macro_dir = Path(MACRO_DIR)
|
||||||
|
macro_file = macro_dir / "Module1.xba"
|
||||||
|
|
||||||
|
if macro_file.exists() and "AcceptAllTrackedChanges" in macro_file.read_text():
|
||||||
|
return True
|
||||||
|
|
||||||
|
if not macro_dir.exists():
|
||||||
|
subprocess.run(
|
||||||
|
[
|
||||||
|
"soffice",
|
||||||
|
"--headless",
|
||||||
|
f"-env:UserInstallation=file://{LIBREOFFICE_PROFILE}",
|
||||||
|
"--terminate_after_init",
|
||||||
|
],
|
||||||
|
capture_output=True,
|
||||||
|
timeout=10,
|
||||||
|
check=False,
|
||||||
|
env=get_soffice_env(),
|
||||||
|
)
|
||||||
|
macro_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
try:
|
||||||
|
macro_file.write_text(ACCEPT_CHANGES_MACRO)
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"Failed to setup LibreOffice macro: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Accept all tracked changes in a DOCX file"
|
||||||
|
)
|
||||||
|
parser.add_argument("input_file", help="Input DOCX file with tracked changes")
|
||||||
|
parser.add_argument(
|
||||||
|
"output_file", help="Output DOCX file (clean, no tracked changes)"
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
_, message = accept_changes(args.input_file, args.output_file)
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
if "Error" in message:
|
||||||
|
raise SystemExit(1)
|
||||||
318
ruoyi-admin/src/main/resources/skills/docx/scripts/comment.py
Normal file
318
ruoyi-admin/src/main/resources/skills/docx/scripts/comment.py
Normal file
@@ -0,0 +1,318 @@
|
|||||||
|
"""Add comments to DOCX documents.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
python comment.py unpacked/ 0 "Comment text"
|
||||||
|
python comment.py unpacked/ 1 "Reply text" --parent 0
|
||||||
|
|
||||||
|
Text should be pre-escaped XML (e.g., & for &, ’ for smart quotes).
|
||||||
|
|
||||||
|
After running, add markers to document.xml:
|
||||||
|
<w:commentRangeStart w:id="0"/>
|
||||||
|
... commented content ...
|
||||||
|
<w:commentRangeEnd w:id="0"/>
|
||||||
|
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="0"/></w:r>
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import random
|
||||||
|
import shutil
|
||||||
|
import sys
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import defusedxml.minidom
|
||||||
|
|
||||||
|
TEMPLATE_DIR = Path(__file__).parent / "templates"
|
||||||
|
NS = {
|
||||||
|
"w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main",
|
||||||
|
"w14": "http://schemas.microsoft.com/office/word/2010/wordml",
|
||||||
|
"w15": "http://schemas.microsoft.com/office/word/2012/wordml",
|
||||||
|
"w16cid": "http://schemas.microsoft.com/office/word/2016/wordml/cid",
|
||||||
|
"w16cex": "http://schemas.microsoft.com/office/word/2018/wordml/cex",
|
||||||
|
}
|
||||||
|
|
||||||
|
COMMENT_XML = """\
|
||||||
|
<w:comment w:id="{id}" w:author="{author}" w:date="{date}" w:initials="{initials}">
|
||||||
|
<w:p w14:paraId="{para_id}" w14:textId="77777777">
|
||||||
|
<w:r>
|
||||||
|
<w:rPr><w:rStyle w:val="CommentReference"/></w:rPr>
|
||||||
|
<w:annotationRef/>
|
||||||
|
</w:r>
|
||||||
|
<w:r>
|
||||||
|
<w:rPr>
|
||||||
|
<w:color w:val="000000"/>
|
||||||
|
<w:sz w:val="20"/>
|
||||||
|
<w:szCs w:val="20"/>
|
||||||
|
</w:rPr>
|
||||||
|
<w:t>{text}</w:t>
|
||||||
|
</w:r>
|
||||||
|
</w:p>
|
||||||
|
</w:comment>"""
|
||||||
|
|
||||||
|
COMMENT_MARKER_TEMPLATE = """
|
||||||
|
Add to document.xml (markers must be direct children of w:p, never inside w:r):
|
||||||
|
<w:commentRangeStart w:id="{cid}"/>
|
||||||
|
<w:r>...</w:r>
|
||||||
|
<w:commentRangeEnd w:id="{cid}"/>
|
||||||
|
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="{cid}"/></w:r>"""
|
||||||
|
|
||||||
|
REPLY_MARKER_TEMPLATE = """
|
||||||
|
Nest markers inside parent {pid}'s markers (markers must be direct children of w:p, never inside w:r):
|
||||||
|
<w:commentRangeStart w:id="{pid}"/><w:commentRangeStart w:id="{cid}"/>
|
||||||
|
<w:r>...</w:r>
|
||||||
|
<w:commentRangeEnd w:id="{cid}"/><w:commentRangeEnd w:id="{pid}"/>
|
||||||
|
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="{pid}"/></w:r>
|
||||||
|
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="{cid}"/></w:r>"""
|
||||||
|
|
||||||
|
|
||||||
|
def _generate_hex_id() -> str:
|
||||||
|
return f"{random.randint(0, 0x7FFFFFFE):08X}"
|
||||||
|
|
||||||
|
|
||||||
|
SMART_QUOTE_ENTITIES = {
|
||||||
|
"\u201c": "“",
|
||||||
|
"\u201d": "”",
|
||||||
|
"\u2018": "‘",
|
||||||
|
"\u2019": "’",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _encode_smart_quotes(text: str) -> str:
|
||||||
|
for char, entity in SMART_QUOTE_ENTITIES.items():
|
||||||
|
text = text.replace(char, entity)
|
||||||
|
return text
|
||||||
|
|
||||||
|
|
||||||
|
def _append_xml(xml_path: Path, root_tag: str, content: str) -> None:
|
||||||
|
dom = defusedxml.minidom.parseString(xml_path.read_text(encoding="utf-8"))
|
||||||
|
root = dom.getElementsByTagName(root_tag)[0]
|
||||||
|
ns_attrs = " ".join(f'xmlns:{k}="{v}"' for k, v in NS.items())
|
||||||
|
wrapper_dom = defusedxml.minidom.parseString(f"<root {ns_attrs}>{content}</root>")
|
||||||
|
for child in wrapper_dom.documentElement.childNodes:
|
||||||
|
if child.nodeType == child.ELEMENT_NODE:
|
||||||
|
root.appendChild(dom.importNode(child, True))
|
||||||
|
output = _encode_smart_quotes(dom.toxml(encoding="UTF-8").decode("utf-8"))
|
||||||
|
xml_path.write_text(output, encoding="utf-8")
|
||||||
|
|
||||||
|
|
||||||
|
def _find_para_id(comments_path: Path, comment_id: int) -> str | None:
|
||||||
|
dom = defusedxml.minidom.parseString(comments_path.read_text(encoding="utf-8"))
|
||||||
|
for c in dom.getElementsByTagName("w:comment"):
|
||||||
|
if c.getAttribute("w:id") == str(comment_id):
|
||||||
|
for p in c.getElementsByTagName("w:p"):
|
||||||
|
if pid := p.getAttribute("w14:paraId"):
|
||||||
|
return pid
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def _get_next_rid(rels_path: Path) -> int:
|
||||||
|
dom = defusedxml.minidom.parseString(rels_path.read_text(encoding="utf-8"))
|
||||||
|
max_rid = 0
|
||||||
|
for rel in dom.getElementsByTagName("Relationship"):
|
||||||
|
rid = rel.getAttribute("Id")
|
||||||
|
if rid and rid.startswith("rId"):
|
||||||
|
try:
|
||||||
|
max_rid = max(max_rid, int(rid[3:]))
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
return max_rid + 1
|
||||||
|
|
||||||
|
|
||||||
|
def _has_relationship(rels_path: Path, target: str) -> bool:
|
||||||
|
dom = defusedxml.minidom.parseString(rels_path.read_text(encoding="utf-8"))
|
||||||
|
for rel in dom.getElementsByTagName("Relationship"):
|
||||||
|
if rel.getAttribute("Target") == target:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def _has_content_type(ct_path: Path, part_name: str) -> bool:
|
||||||
|
dom = defusedxml.minidom.parseString(ct_path.read_text(encoding="utf-8"))
|
||||||
|
for override in dom.getElementsByTagName("Override"):
|
||||||
|
if override.getAttribute("PartName") == part_name:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def _ensure_comment_relationships(unpacked_dir: Path) -> None:
|
||||||
|
rels_path = unpacked_dir / "word" / "_rels" / "document.xml.rels"
|
||||||
|
if not rels_path.exists():
|
||||||
|
return
|
||||||
|
|
||||||
|
if _has_relationship(rels_path, "comments.xml"):
|
||||||
|
return
|
||||||
|
|
||||||
|
dom = defusedxml.minidom.parseString(rels_path.read_text(encoding="utf-8"))
|
||||||
|
root = dom.documentElement
|
||||||
|
next_rid = _get_next_rid(rels_path)
|
||||||
|
|
||||||
|
rels = [
|
||||||
|
(
|
||||||
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",
|
||||||
|
"comments.xml",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"http://schemas.microsoft.com/office/2011/relationships/commentsExtended",
|
||||||
|
"commentsExtended.xml",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"http://schemas.microsoft.com/office/2016/09/relationships/commentsIds",
|
||||||
|
"commentsIds.xml",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"http://schemas.microsoft.com/office/2018/08/relationships/commentsExtensible",
|
||||||
|
"commentsExtensible.xml",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
for rel_type, target in rels:
|
||||||
|
rel = dom.createElement("Relationship")
|
||||||
|
rel.setAttribute("Id", f"rId{next_rid}")
|
||||||
|
rel.setAttribute("Type", rel_type)
|
||||||
|
rel.setAttribute("Target", target)
|
||||||
|
root.appendChild(rel)
|
||||||
|
next_rid += 1
|
||||||
|
|
||||||
|
rels_path.write_bytes(dom.toxml(encoding="UTF-8"))
|
||||||
|
|
||||||
|
|
||||||
|
def _ensure_comment_content_types(unpacked_dir: Path) -> None:
|
||||||
|
ct_path = unpacked_dir / "[Content_Types].xml"
|
||||||
|
if not ct_path.exists():
|
||||||
|
return
|
||||||
|
|
||||||
|
if _has_content_type(ct_path, "/word/comments.xml"):
|
||||||
|
return
|
||||||
|
|
||||||
|
dom = defusedxml.minidom.parseString(ct_path.read_text(encoding="utf-8"))
|
||||||
|
root = dom.documentElement
|
||||||
|
|
||||||
|
overrides = [
|
||||||
|
(
|
||||||
|
"/word/comments.xml",
|
||||||
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"/word/commentsExtended.xml",
|
||||||
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"/word/commentsIds.xml",
|
||||||
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.commentsIds+xml",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"/word/commentsExtensible.xml",
|
||||||
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtensible+xml",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
for part_name, content_type in overrides:
|
||||||
|
override = dom.createElement("Override")
|
||||||
|
override.setAttribute("PartName", part_name)
|
||||||
|
override.setAttribute("ContentType", content_type)
|
||||||
|
root.appendChild(override)
|
||||||
|
|
||||||
|
ct_path.write_bytes(dom.toxml(encoding="UTF-8"))
|
||||||
|
|
||||||
|
|
||||||
|
def add_comment(
|
||||||
|
unpacked_dir: str,
|
||||||
|
comment_id: int,
|
||||||
|
text: str,
|
||||||
|
author: str = "Claude",
|
||||||
|
initials: str = "C",
|
||||||
|
parent_id: int | None = None,
|
||||||
|
) -> tuple[str, str]:
|
||||||
|
word = Path(unpacked_dir) / "word"
|
||||||
|
if not word.exists():
|
||||||
|
return "", f"Error: {word} not found"
|
||||||
|
|
||||||
|
para_id, durable_id = _generate_hex_id(), _generate_hex_id()
|
||||||
|
ts = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
|
||||||
|
|
||||||
|
comments = word / "comments.xml"
|
||||||
|
first_comment = not comments.exists()
|
||||||
|
if first_comment:
|
||||||
|
shutil.copy(TEMPLATE_DIR / "comments.xml", comments)
|
||||||
|
_ensure_comment_relationships(Path(unpacked_dir))
|
||||||
|
_ensure_comment_content_types(Path(unpacked_dir))
|
||||||
|
_append_xml(
|
||||||
|
comments,
|
||||||
|
"w:comments",
|
||||||
|
COMMENT_XML.format(
|
||||||
|
id=comment_id,
|
||||||
|
author=author,
|
||||||
|
date=ts,
|
||||||
|
initials=initials,
|
||||||
|
para_id=para_id,
|
||||||
|
text=text,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
ext = word / "commentsExtended.xml"
|
||||||
|
if not ext.exists():
|
||||||
|
shutil.copy(TEMPLATE_DIR / "commentsExtended.xml", ext)
|
||||||
|
if parent_id is not None:
|
||||||
|
parent_para = _find_para_id(comments, parent_id)
|
||||||
|
if not parent_para:
|
||||||
|
return "", f"Error: Parent comment {parent_id} not found"
|
||||||
|
_append_xml(
|
||||||
|
ext,
|
||||||
|
"w15:commentsEx",
|
||||||
|
f'<w15:commentEx w15:paraId="{para_id}" w15:paraIdParent="{parent_para}" w15:done="0"/>',
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
_append_xml(
|
||||||
|
ext,
|
||||||
|
"w15:commentsEx",
|
||||||
|
f'<w15:commentEx w15:paraId="{para_id}" w15:done="0"/>',
|
||||||
|
)
|
||||||
|
|
||||||
|
ids = word / "commentsIds.xml"
|
||||||
|
if not ids.exists():
|
||||||
|
shutil.copy(TEMPLATE_DIR / "commentsIds.xml", ids)
|
||||||
|
_append_xml(
|
||||||
|
ids,
|
||||||
|
"w16cid:commentsIds",
|
||||||
|
f'<w16cid:commentId w16cid:paraId="{para_id}" w16cid:durableId="{durable_id}"/>',
|
||||||
|
)
|
||||||
|
|
||||||
|
extensible = word / "commentsExtensible.xml"
|
||||||
|
if not extensible.exists():
|
||||||
|
shutil.copy(TEMPLATE_DIR / "commentsExtensible.xml", extensible)
|
||||||
|
_append_xml(
|
||||||
|
extensible,
|
||||||
|
"w16cex:commentsExtensible",
|
||||||
|
f'<w16cex:commentExtensible w16cex:durableId="{durable_id}" w16cex:dateUtc="{ts}"/>',
|
||||||
|
)
|
||||||
|
|
||||||
|
action = "reply" if parent_id is not None else "comment"
|
||||||
|
return para_id, f"Added {action} {comment_id} (para_id={para_id})"
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
p = argparse.ArgumentParser(description="Add comments to DOCX documents")
|
||||||
|
p.add_argument("unpacked_dir", help="Unpacked DOCX directory")
|
||||||
|
p.add_argument("comment_id", type=int, help="Comment ID (must be unique)")
|
||||||
|
p.add_argument("text", help="Comment text")
|
||||||
|
p.add_argument("--author", default="Claude", help="Author name")
|
||||||
|
p.add_argument("--initials", default="C", help="Author initials")
|
||||||
|
p.add_argument("--parent", type=int, help="Parent comment ID (for replies)")
|
||||||
|
args = p.parse_args()
|
||||||
|
|
||||||
|
para_id, msg = add_comment(
|
||||||
|
args.unpacked_dir,
|
||||||
|
args.comment_id,
|
||||||
|
args.text,
|
||||||
|
args.author,
|
||||||
|
args.initials,
|
||||||
|
args.parent,
|
||||||
|
)
|
||||||
|
print(msg)
|
||||||
|
if "Error" in msg:
|
||||||
|
sys.exit(1)
|
||||||
|
cid = args.comment_id
|
||||||
|
if args.parent is not None:
|
||||||
|
print(REPLY_MARKER_TEMPLATE.format(pid=args.parent, cid=cid))
|
||||||
|
else:
|
||||||
|
print(COMMENT_MARKER_TEMPLATE.format(cid=cid))
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
"""Merge adjacent runs with identical formatting in DOCX.
|
||||||
|
|
||||||
|
Merges adjacent <w:r> elements that have identical <w:rPr> properties.
|
||||||
|
Works on runs in paragraphs and inside tracked changes (<w:ins>, <w:del>).
|
||||||
|
|
||||||
|
Also:
|
||||||
|
- Removes rsid attributes from runs (revision metadata that doesn't affect rendering)
|
||||||
|
- Removes proofErr elements (spell/grammar markers that block merging)
|
||||||
|
"""
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import defusedxml.minidom
|
||||||
|
|
||||||
|
|
||||||
|
def merge_runs(input_dir: str) -> tuple[int, str]:
|
||||||
|
doc_xml = Path(input_dir) / "word" / "document.xml"
|
||||||
|
|
||||||
|
if not doc_xml.exists():
|
||||||
|
return 0, f"Error: {doc_xml} not found"
|
||||||
|
|
||||||
|
try:
|
||||||
|
dom = defusedxml.minidom.parseString(doc_xml.read_text(encoding="utf-8"))
|
||||||
|
root = dom.documentElement
|
||||||
|
|
||||||
|
_remove_elements(root, "proofErr")
|
||||||
|
_strip_run_rsid_attrs(root)
|
||||||
|
|
||||||
|
containers = {run.parentNode for run in _find_elements(root, "r")}
|
||||||
|
|
||||||
|
merge_count = 0
|
||||||
|
for container in containers:
|
||||||
|
merge_count += _merge_runs_in(container)
|
||||||
|
|
||||||
|
doc_xml.write_bytes(dom.toxml(encoding="UTF-8"))
|
||||||
|
return merge_count, f"Merged {merge_count} runs"
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
return 0, f"Error: {e}"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def _find_elements(root, tag: str) -> list:
|
||||||
|
results = []
|
||||||
|
|
||||||
|
def traverse(node):
|
||||||
|
if node.nodeType == node.ELEMENT_NODE:
|
||||||
|
name = node.localName or node.tagName
|
||||||
|
if name == tag or name.endswith(f":{tag}"):
|
||||||
|
results.append(node)
|
||||||
|
for child in node.childNodes:
|
||||||
|
traverse(child)
|
||||||
|
|
||||||
|
traverse(root)
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
def _get_child(parent, tag: str):
|
||||||
|
for child in parent.childNodes:
|
||||||
|
if child.nodeType == child.ELEMENT_NODE:
|
||||||
|
name = child.localName or child.tagName
|
||||||
|
if name == tag or name.endswith(f":{tag}"):
|
||||||
|
return child
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def _get_children(parent, tag: str) -> list:
|
||||||
|
results = []
|
||||||
|
for child in parent.childNodes:
|
||||||
|
if child.nodeType == child.ELEMENT_NODE:
|
||||||
|
name = child.localName or child.tagName
|
||||||
|
if name == tag or name.endswith(f":{tag}"):
|
||||||
|
results.append(child)
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
def _is_adjacent(elem1, elem2) -> bool:
|
||||||
|
node = elem1.nextSibling
|
||||||
|
while node:
|
||||||
|
if node == elem2:
|
||||||
|
return True
|
||||||
|
if node.nodeType == node.ELEMENT_NODE:
|
||||||
|
return False
|
||||||
|
if node.nodeType == node.TEXT_NODE and node.data.strip():
|
||||||
|
return False
|
||||||
|
node = node.nextSibling
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def _remove_elements(root, tag: str):
|
||||||
|
for elem in _find_elements(root, tag):
|
||||||
|
if elem.parentNode:
|
||||||
|
elem.parentNode.removeChild(elem)
|
||||||
|
|
||||||
|
|
||||||
|
def _strip_run_rsid_attrs(root):
|
||||||
|
for run in _find_elements(root, "r"):
|
||||||
|
for attr in list(run.attributes.values()):
|
||||||
|
if "rsid" in attr.name.lower():
|
||||||
|
run.removeAttribute(attr.name)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def _merge_runs_in(container) -> int:
|
||||||
|
merge_count = 0
|
||||||
|
run = _first_child_run(container)
|
||||||
|
|
||||||
|
while run:
|
||||||
|
while True:
|
||||||
|
next_elem = _next_element_sibling(run)
|
||||||
|
if next_elem and _is_run(next_elem) and _can_merge(run, next_elem):
|
||||||
|
_merge_run_content(run, next_elem)
|
||||||
|
container.removeChild(next_elem)
|
||||||
|
merge_count += 1
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
_consolidate_text(run)
|
||||||
|
run = _next_sibling_run(run)
|
||||||
|
|
||||||
|
return merge_count
|
||||||
|
|
||||||
|
|
||||||
|
def _first_child_run(container):
|
||||||
|
for child in container.childNodes:
|
||||||
|
if child.nodeType == child.ELEMENT_NODE and _is_run(child):
|
||||||
|
return child
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def _next_element_sibling(node):
|
||||||
|
sibling = node.nextSibling
|
||||||
|
while sibling:
|
||||||
|
if sibling.nodeType == sibling.ELEMENT_NODE:
|
||||||
|
return sibling
|
||||||
|
sibling = sibling.nextSibling
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def _next_sibling_run(node):
|
||||||
|
sibling = node.nextSibling
|
||||||
|
while sibling:
|
||||||
|
if sibling.nodeType == sibling.ELEMENT_NODE:
|
||||||
|
if _is_run(sibling):
|
||||||
|
return sibling
|
||||||
|
sibling = sibling.nextSibling
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def _is_run(node) -> bool:
|
||||||
|
name = node.localName or node.tagName
|
||||||
|
return name == "r" or name.endswith(":r")
|
||||||
|
|
||||||
|
|
||||||
|
def _can_merge(run1, run2) -> bool:
|
||||||
|
rpr1 = _get_child(run1, "rPr")
|
||||||
|
rpr2 = _get_child(run2, "rPr")
|
||||||
|
|
||||||
|
if (rpr1 is None) != (rpr2 is None):
|
||||||
|
return False
|
||||||
|
if rpr1 is None:
|
||||||
|
return True
|
||||||
|
return rpr1.toxml() == rpr2.toxml()
|
||||||
|
|
||||||
|
|
||||||
|
def _merge_run_content(target, source):
|
||||||
|
for child in list(source.childNodes):
|
||||||
|
if child.nodeType == child.ELEMENT_NODE:
|
||||||
|
name = child.localName or child.tagName
|
||||||
|
if name != "rPr" and not name.endswith(":rPr"):
|
||||||
|
target.appendChild(child)
|
||||||
|
|
||||||
|
|
||||||
|
def _consolidate_text(run):
|
||||||
|
t_elements = _get_children(run, "t")
|
||||||
|
|
||||||
|
for i in range(len(t_elements) - 1, 0, -1):
|
||||||
|
curr, prev = t_elements[i], t_elements[i - 1]
|
||||||
|
|
||||||
|
if _is_adjacent(prev, curr):
|
||||||
|
prev_text = prev.firstChild.data if prev.firstChild else ""
|
||||||
|
curr_text = curr.firstChild.data if curr.firstChild else ""
|
||||||
|
merged = prev_text + curr_text
|
||||||
|
|
||||||
|
if prev.firstChild:
|
||||||
|
prev.firstChild.data = merged
|
||||||
|
else:
|
||||||
|
prev.appendChild(run.ownerDocument.createTextNode(merged))
|
||||||
|
|
||||||
|
if merged.startswith(" ") or merged.endswith(" "):
|
||||||
|
prev.setAttribute("xml:space", "preserve")
|
||||||
|
elif prev.hasAttribute("xml:space"):
|
||||||
|
prev.removeAttribute("xml:space")
|
||||||
|
|
||||||
|
run.removeChild(curr)
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
"""Simplify tracked changes by merging adjacent w:ins or w:del elements.
|
||||||
|
|
||||||
|
Merges adjacent <w:ins> elements from the same author into a single element.
|
||||||
|
Same for <w:del> elements. This makes heavily-redlined documents easier to
|
||||||
|
work with by reducing the number of tracked change wrappers.
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
- Only merges w:ins with w:ins, w:del with w:del (same element type)
|
||||||
|
- Only merges if same author (ignores timestamp differences)
|
||||||
|
- Only merges if truly adjacent (only whitespace between them)
|
||||||
|
"""
|
||||||
|
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
import zipfile
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import defusedxml.minidom
|
||||||
|
|
||||||
|
WORD_NS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"
|
||||||
|
|
||||||
|
|
||||||
|
def simplify_redlines(input_dir: str) -> tuple[int, str]:
|
||||||
|
doc_xml = Path(input_dir) / "word" / "document.xml"
|
||||||
|
|
||||||
|
if not doc_xml.exists():
|
||||||
|
return 0, f"Error: {doc_xml} not found"
|
||||||
|
|
||||||
|
try:
|
||||||
|
dom = defusedxml.minidom.parseString(doc_xml.read_text(encoding="utf-8"))
|
||||||
|
root = dom.documentElement
|
||||||
|
|
||||||
|
merge_count = 0
|
||||||
|
|
||||||
|
containers = _find_elements(root, "p") + _find_elements(root, "tc")
|
||||||
|
|
||||||
|
for container in containers:
|
||||||
|
merge_count += _merge_tracked_changes_in(container, "ins")
|
||||||
|
merge_count += _merge_tracked_changes_in(container, "del")
|
||||||
|
|
||||||
|
doc_xml.write_bytes(dom.toxml(encoding="UTF-8"))
|
||||||
|
return merge_count, f"Simplified {merge_count} tracked changes"
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
return 0, f"Error: {e}"
|
||||||
|
|
||||||
|
|
||||||
|
def _merge_tracked_changes_in(container, tag: str) -> int:
|
||||||
|
merge_count = 0
|
||||||
|
|
||||||
|
tracked = [
|
||||||
|
child
|
||||||
|
for child in container.childNodes
|
||||||
|
if child.nodeType == child.ELEMENT_NODE and _is_element(child, tag)
|
||||||
|
]
|
||||||
|
|
||||||
|
if len(tracked) < 2:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
while i < len(tracked) - 1:
|
||||||
|
curr = tracked[i]
|
||||||
|
next_elem = tracked[i + 1]
|
||||||
|
|
||||||
|
if _can_merge_tracked(curr, next_elem):
|
||||||
|
_merge_tracked_content(curr, next_elem)
|
||||||
|
container.removeChild(next_elem)
|
||||||
|
tracked.pop(i + 1)
|
||||||
|
merge_count += 1
|
||||||
|
else:
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
return merge_count
|
||||||
|
|
||||||
|
|
||||||
|
def _is_element(node, tag: str) -> bool:
|
||||||
|
name = node.localName or node.tagName
|
||||||
|
return name == tag or name.endswith(f":{tag}")
|
||||||
|
|
||||||
|
|
||||||
|
def _get_author(elem) -> str:
|
||||||
|
author = elem.getAttribute("w:author")
|
||||||
|
if not author:
|
||||||
|
for attr in elem.attributes.values():
|
||||||
|
if attr.localName == "author" or attr.name.endswith(":author"):
|
||||||
|
return attr.value
|
||||||
|
return author
|
||||||
|
|
||||||
|
|
||||||
|
def _can_merge_tracked(elem1, elem2) -> bool:
|
||||||
|
if _get_author(elem1) != _get_author(elem2):
|
||||||
|
return False
|
||||||
|
|
||||||
|
node = elem1.nextSibling
|
||||||
|
while node and node != elem2:
|
||||||
|
if node.nodeType == node.ELEMENT_NODE:
|
||||||
|
return False
|
||||||
|
if node.nodeType == node.TEXT_NODE and node.data.strip():
|
||||||
|
return False
|
||||||
|
node = node.nextSibling
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def _merge_tracked_content(target, source):
|
||||||
|
while source.firstChild:
|
||||||
|
child = source.firstChild
|
||||||
|
source.removeChild(child)
|
||||||
|
target.appendChild(child)
|
||||||
|
|
||||||
|
|
||||||
|
def _find_elements(root, tag: str) -> list:
|
||||||
|
results = []
|
||||||
|
|
||||||
|
def traverse(node):
|
||||||
|
if node.nodeType == node.ELEMENT_NODE:
|
||||||
|
name = node.localName or node.tagName
|
||||||
|
if name == tag or name.endswith(f":{tag}"):
|
||||||
|
results.append(node)
|
||||||
|
for child in node.childNodes:
|
||||||
|
traverse(child)
|
||||||
|
|
||||||
|
traverse(root)
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
def get_tracked_change_authors(doc_xml_path: Path) -> dict[str, int]:
|
||||||
|
if not doc_xml_path.exists():
|
||||||
|
return {}
|
||||||
|
|
||||||
|
try:
|
||||||
|
tree = ET.parse(doc_xml_path)
|
||||||
|
root = tree.getroot()
|
||||||
|
except ET.ParseError:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
namespaces = {"w": WORD_NS}
|
||||||
|
author_attr = f"{{{WORD_NS}}}author"
|
||||||
|
|
||||||
|
authors: dict[str, int] = {}
|
||||||
|
for tag in ["ins", "del"]:
|
||||||
|
for elem in root.findall(f".//w:{tag}", namespaces):
|
||||||
|
author = elem.get(author_attr)
|
||||||
|
if author:
|
||||||
|
authors[author] = authors.get(author, 0) + 1
|
||||||
|
|
||||||
|
return authors
|
||||||
|
|
||||||
|
|
||||||
|
def _get_authors_from_docx(docx_path: Path) -> dict[str, int]:
|
||||||
|
try:
|
||||||
|
with zipfile.ZipFile(docx_path, "r") as zf:
|
||||||
|
if "word/document.xml" not in zf.namelist():
|
||||||
|
return {}
|
||||||
|
with zf.open("word/document.xml") as f:
|
||||||
|
tree = ET.parse(f)
|
||||||
|
root = tree.getroot()
|
||||||
|
|
||||||
|
namespaces = {"w": WORD_NS}
|
||||||
|
author_attr = f"{{{WORD_NS}}}author"
|
||||||
|
|
||||||
|
authors: dict[str, int] = {}
|
||||||
|
for tag in ["ins", "del"]:
|
||||||
|
for elem in root.findall(f".//w:{tag}", namespaces):
|
||||||
|
author = elem.get(author_attr)
|
||||||
|
if author:
|
||||||
|
authors[author] = authors.get(author, 0) + 1
|
||||||
|
return authors
|
||||||
|
except (zipfile.BadZipFile, ET.ParseError):
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
def infer_author(modified_dir: Path, original_docx: Path, default: str = "Claude") -> str:
|
||||||
|
modified_xml = modified_dir / "word" / "document.xml"
|
||||||
|
modified_authors = get_tracked_change_authors(modified_xml)
|
||||||
|
|
||||||
|
if not modified_authors:
|
||||||
|
return default
|
||||||
|
|
||||||
|
original_authors = _get_authors_from_docx(original_docx)
|
||||||
|
|
||||||
|
new_changes: dict[str, int] = {}
|
||||||
|
for author, count in modified_authors.items():
|
||||||
|
original_count = original_authors.get(author, 0)
|
||||||
|
diff = count - original_count
|
||||||
|
if diff > 0:
|
||||||
|
new_changes[author] = diff
|
||||||
|
|
||||||
|
if not new_changes:
|
||||||
|
return default
|
||||||
|
|
||||||
|
if len(new_changes) == 1:
|
||||||
|
return next(iter(new_changes))
|
||||||
|
|
||||||
|
raise ValueError(
|
||||||
|
f"Multiple authors added new changes: {new_changes}. "
|
||||||
|
"Cannot infer which author to validate."
|
||||||
|
)
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
"""Pack a directory into a DOCX, PPTX, or XLSX file.
|
||||||
|
|
||||||
|
Validates with auto-repair, condenses XML formatting, and creates the Office file.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
python pack.py <input_directory> <output_file> [--original <file>] [--validate true|false]
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
python pack.py unpacked/ output.docx --original input.docx
|
||||||
|
python pack.py unpacked/ output.pptx --validate false
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import sys
|
||||||
|
import shutil
|
||||||
|
import tempfile
|
||||||
|
import zipfile
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import defusedxml.minidom
|
||||||
|
|
||||||
|
from validators import DOCXSchemaValidator, PPTXSchemaValidator, RedliningValidator
|
||||||
|
|
||||||
|
def pack(
|
||||||
|
input_directory: str,
|
||||||
|
output_file: str,
|
||||||
|
original_file: str | None = None,
|
||||||
|
validate: bool = True,
|
||||||
|
infer_author_func=None,
|
||||||
|
) -> tuple[None, str]:
|
||||||
|
input_dir = Path(input_directory)
|
||||||
|
output_path = Path(output_file)
|
||||||
|
suffix = output_path.suffix.lower()
|
||||||
|
|
||||||
|
if not input_dir.is_dir():
|
||||||
|
return None, f"Error: {input_dir} is not a directory"
|
||||||
|
|
||||||
|
if suffix not in {".docx", ".pptx", ".xlsx"}:
|
||||||
|
return None, f"Error: {output_file} must be a .docx, .pptx, or .xlsx file"
|
||||||
|
|
||||||
|
if validate and original_file:
|
||||||
|
original_path = Path(original_file)
|
||||||
|
if original_path.exists():
|
||||||
|
success, output = _run_validation(
|
||||||
|
input_dir, original_path, suffix, infer_author_func
|
||||||
|
)
|
||||||
|
if output:
|
||||||
|
print(output)
|
||||||
|
if not success:
|
||||||
|
return None, f"Error: Validation failed for {input_dir}"
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory() as temp_dir:
|
||||||
|
temp_content_dir = Path(temp_dir) / "content"
|
||||||
|
shutil.copytree(input_dir, temp_content_dir)
|
||||||
|
|
||||||
|
for pattern in ["*.xml", "*.rels"]:
|
||||||
|
for xml_file in temp_content_dir.rglob(pattern):
|
||||||
|
_condense_xml(xml_file)
|
||||||
|
|
||||||
|
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
with zipfile.ZipFile(output_path, "w", zipfile.ZIP_DEFLATED) as zf:
|
||||||
|
for f in temp_content_dir.rglob("*"):
|
||||||
|
if f.is_file():
|
||||||
|
zf.write(f, f.relative_to(temp_content_dir))
|
||||||
|
|
||||||
|
return None, f"Successfully packed {input_dir} to {output_file}"
|
||||||
|
|
||||||
|
|
||||||
|
def _run_validation(
|
||||||
|
unpacked_dir: Path,
|
||||||
|
original_file: Path,
|
||||||
|
suffix: str,
|
||||||
|
infer_author_func=None,
|
||||||
|
) -> tuple[bool, str | None]:
|
||||||
|
output_lines = []
|
||||||
|
validators = []
|
||||||
|
|
||||||
|
if suffix == ".docx":
|
||||||
|
author = "Claude"
|
||||||
|
if infer_author_func:
|
||||||
|
try:
|
||||||
|
author = infer_author_func(unpacked_dir, original_file)
|
||||||
|
except ValueError as e:
|
||||||
|
print(f"Warning: {e} Using default author 'Claude'.", file=sys.stderr)
|
||||||
|
|
||||||
|
validators = [
|
||||||
|
DOCXSchemaValidator(unpacked_dir, original_file),
|
||||||
|
RedliningValidator(unpacked_dir, original_file, author=author),
|
||||||
|
]
|
||||||
|
elif suffix == ".pptx":
|
||||||
|
validators = [PPTXSchemaValidator(unpacked_dir, original_file)]
|
||||||
|
|
||||||
|
if not validators:
|
||||||
|
return True, None
|
||||||
|
|
||||||
|
total_repairs = sum(v.repair() for v in validators)
|
||||||
|
if total_repairs:
|
||||||
|
output_lines.append(f"Auto-repaired {total_repairs} issue(s)")
|
||||||
|
|
||||||
|
success = all(v.validate() for v in validators)
|
||||||
|
|
||||||
|
if success:
|
||||||
|
output_lines.append("All validations PASSED!")
|
||||||
|
|
||||||
|
return success, "\n".join(output_lines) if output_lines else None
|
||||||
|
|
||||||
|
|
||||||
|
def _condense_xml(xml_file: Path) -> None:
|
||||||
|
try:
|
||||||
|
with open(xml_file, encoding="utf-8") as f:
|
||||||
|
dom = defusedxml.minidom.parse(f)
|
||||||
|
|
||||||
|
for element in dom.getElementsByTagName("*"):
|
||||||
|
if element.tagName.endswith(":t"):
|
||||||
|
continue
|
||||||
|
|
||||||
|
for child in list(element.childNodes):
|
||||||
|
if (
|
||||||
|
child.nodeType == child.TEXT_NODE
|
||||||
|
and child.nodeValue
|
||||||
|
and child.nodeValue.strip() == ""
|
||||||
|
) or child.nodeType == child.COMMENT_NODE:
|
||||||
|
element.removeChild(child)
|
||||||
|
|
||||||
|
xml_file.write_bytes(dom.toxml(encoding="UTF-8"))
|
||||||
|
except Exception as e:
|
||||||
|
print(f"ERROR: Failed to parse {xml_file.name}: {e}", file=sys.stderr)
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Pack a directory into a DOCX, PPTX, or XLSX file"
|
||||||
|
)
|
||||||
|
parser.add_argument("input_directory", help="Unpacked Office document directory")
|
||||||
|
parser.add_argument("output_file", help="Output Office file (.docx/.pptx/.xlsx)")
|
||||||
|
parser.add_argument(
|
||||||
|
"--original",
|
||||||
|
help="Original file for validation comparison",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--validate",
|
||||||
|
type=lambda x: x.lower() == "true",
|
||||||
|
default=True,
|
||||||
|
metavar="true|false",
|
||||||
|
help="Run validation with auto-repair (default: true)",
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
_, message = pack(
|
||||||
|
args.input_directory,
|
||||||
|
args.output_file,
|
||||||
|
original_file=args.original,
|
||||||
|
validate=args.validate,
|
||||||
|
)
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
if "Error" in message:
|
||||||
|
sys.exit(1)
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,146 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/drawingml/2006/chartDrawing"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/drawingml/2006/chartDrawing"
|
||||||
|
elementFormDefault="qualified">
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/drawingml/2006/main"
|
||||||
|
schemaLocation="dml-main.xsd"/>
|
||||||
|
<xsd:complexType name="CT_ShapeNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvSpPr" type="a:CT_NonVisualDrawingShapeProps" minOccurs="1" maxOccurs="1"
|
||||||
|
/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Shape">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="nvSpPr" type="CT_ShapeNonVisual" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="style" type="a:CT_ShapeStyle" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:element name="txBody" type="a:CT_TextBody" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="macro" type="xsd:string" use="optional"/>
|
||||||
|
<xsd:attribute name="textlink" type="xsd:string" use="optional"/>
|
||||||
|
<xsd:attribute name="fLocksText" type="xsd:boolean" use="optional" default="true"/>
|
||||||
|
<xsd:attribute name="fPublished" type="xsd:boolean" use="optional" default="false"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_ConnectorNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvCxnSpPr" type="a:CT_NonVisualConnectorProperties" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Connector">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="nvCxnSpPr" type="CT_ConnectorNonVisual" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="style" type="a:CT_ShapeStyle" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="macro" type="xsd:string" use="optional"/>
|
||||||
|
<xsd:attribute name="fPublished" type="xsd:boolean" use="optional" default="false"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_PictureNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvPicPr" type="a:CT_NonVisualPictureProperties" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Picture">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="nvPicPr" type="CT_PictureNonVisual" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="blipFill" type="a:CT_BlipFillProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="style" type="a:CT_ShapeStyle" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="macro" type="xsd:string" use="optional" default=""/>
|
||||||
|
<xsd:attribute name="fPublished" type="xsd:boolean" use="optional" default="false"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_GraphicFrameNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvGraphicFramePr" type="a:CT_NonVisualGraphicFrameProperties"
|
||||||
|
minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_GraphicFrame">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="nvGraphicFramePr" type="CT_GraphicFrameNonVisual" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
<xsd:element name="xfrm" type="a:CT_Transform2D" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element ref="a:graphic" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="macro" type="xsd:string" use="optional"/>
|
||||||
|
<xsd:attribute name="fPublished" type="xsd:boolean" use="optional" default="false"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_GroupShapeNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvGrpSpPr" type="a:CT_NonVisualGroupDrawingShapeProps" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_GroupShape">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="nvGrpSpPr" type="CT_GroupShapeNonVisual" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="grpSpPr" type="a:CT_GroupShapeProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:element name="sp" type="CT_Shape"/>
|
||||||
|
<xsd:element name="grpSp" type="CT_GroupShape"/>
|
||||||
|
<xsd:element name="graphicFrame" type="CT_GraphicFrame"/>
|
||||||
|
<xsd:element name="cxnSp" type="CT_Connector"/>
|
||||||
|
<xsd:element name="pic" type="CT_Picture"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:group name="EG_ObjectChoices">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:choice minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element name="sp" type="CT_Shape"/>
|
||||||
|
<xsd:element name="grpSp" type="CT_GroupShape"/>
|
||||||
|
<xsd:element name="graphicFrame" type="CT_GraphicFrame"/>
|
||||||
|
<xsd:element name="cxnSp" type="CT_Connector"/>
|
||||||
|
<xsd:element name="pic" type="CT_Picture"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:group>
|
||||||
|
<xsd:simpleType name="ST_MarkerCoordinate">
|
||||||
|
<xsd:restriction base="xsd:double">
|
||||||
|
<xsd:minInclusive value="0.0"/>
|
||||||
|
<xsd:maxInclusive value="1.0"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:complexType name="CT_Marker">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="x" type="ST_MarkerCoordinate" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="y" type="ST_MarkerCoordinate" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_RelSizeAnchor">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="from" type="CT_Marker"/>
|
||||||
|
<xsd:element name="to" type="CT_Marker"/>
|
||||||
|
<xsd:group ref="EG_ObjectChoices"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_AbsSizeAnchor">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="from" type="CT_Marker"/>
|
||||||
|
<xsd:element name="ext" type="a:CT_PositiveSize2D"/>
|
||||||
|
<xsd:group ref="EG_ObjectChoices"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:group name="EG_Anchor">
|
||||||
|
<xsd:choice>
|
||||||
|
<xsd:element name="relSizeAnchor" type="CT_RelSizeAnchor"/>
|
||||||
|
<xsd:element name="absSizeAnchor" type="CT_AbsSizeAnchor"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:group>
|
||||||
|
<xsd:complexType name="CT_Drawing">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:group ref="EG_Anchor" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:schema>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas"
|
||||||
|
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
|
||||||
|
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
|
||||||
|
elementFormDefault="qualified"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas">
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/drawingml/2006/main"
|
||||||
|
schemaLocation="dml-main.xsd"/>
|
||||||
|
<xsd:element name="lockedCanvas" type="a:CT_GvmlGroupShape"/>
|
||||||
|
</xsd:schema>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/drawingml/2006/picture"
|
||||||
|
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" elementFormDefault="qualified"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/drawingml/2006/picture">
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/drawingml/2006/main"
|
||||||
|
schemaLocation="dml-main.xsd"/>
|
||||||
|
<xsd:complexType name="CT_PictureNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvPicPr" type="a:CT_NonVisualPictureProperties" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Picture">
|
||||||
|
<xsd:sequence minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element name="nvPicPr" type="CT_PictureNonVisual" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="blipFill" type="a:CT_BlipFillProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:element name="pic" type="CT_Picture"/>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,185 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"
|
||||||
|
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"
|
||||||
|
elementFormDefault="qualified">
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/drawingml/2006/main"
|
||||||
|
schemaLocation="dml-main.xsd"/>
|
||||||
|
<xsd:import schemaLocation="shared-relationshipReference.xsd"
|
||||||
|
namespace="http://schemas.openxmlformats.org/officeDocument/2006/relationships"/>
|
||||||
|
<xsd:element name="from" type="CT_Marker"/>
|
||||||
|
<xsd:element name="to" type="CT_Marker"/>
|
||||||
|
<xsd:complexType name="CT_AnchorClientData">
|
||||||
|
<xsd:attribute name="fLocksWithSheet" type="xsd:boolean" use="optional" default="true"/>
|
||||||
|
<xsd:attribute name="fPrintsWithSheet" type="xsd:boolean" use="optional" default="true"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_ShapeNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvSpPr" type="a:CT_NonVisualDrawingShapeProps" minOccurs="1" maxOccurs="1"
|
||||||
|
/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Shape">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="nvSpPr" type="CT_ShapeNonVisual" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="style" type="a:CT_ShapeStyle" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:element name="txBody" type="a:CT_TextBody" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="macro" type="xsd:string" use="optional"/>
|
||||||
|
<xsd:attribute name="textlink" type="xsd:string" use="optional"/>
|
||||||
|
<xsd:attribute name="fLocksText" type="xsd:boolean" use="optional" default="true"/>
|
||||||
|
<xsd:attribute name="fPublished" type="xsd:boolean" use="optional" default="false"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_ConnectorNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvCxnSpPr" type="a:CT_NonVisualConnectorProperties" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Connector">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="nvCxnSpPr" type="CT_ConnectorNonVisual" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="style" type="a:CT_ShapeStyle" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="macro" type="xsd:string" use="optional"/>
|
||||||
|
<xsd:attribute name="fPublished" type="xsd:boolean" use="optional" default="false"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_PictureNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvPicPr" type="a:CT_NonVisualPictureProperties" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Picture">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="nvPicPr" type="CT_PictureNonVisual" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="blipFill" type="a:CT_BlipFillProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="style" type="a:CT_ShapeStyle" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="macro" type="xsd:string" use="optional" default=""/>
|
||||||
|
<xsd:attribute name="fPublished" type="xsd:boolean" use="optional" default="false"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_GraphicalObjectFrameNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvGraphicFramePr" type="a:CT_NonVisualGraphicFrameProperties"
|
||||||
|
minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_GraphicalObjectFrame">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="nvGraphicFramePr" type="CT_GraphicalObjectFrameNonVisual" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
<xsd:element name="xfrm" type="a:CT_Transform2D" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element ref="a:graphic" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="macro" type="xsd:string" use="optional"/>
|
||||||
|
<xsd:attribute name="fPublished" type="xsd:boolean" use="optional" default="false"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_GroupShapeNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvGrpSpPr" type="a:CT_NonVisualGroupDrawingShapeProps" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_GroupShape">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="nvGrpSpPr" type="CT_GroupShapeNonVisual" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="grpSpPr" type="a:CT_GroupShapeProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:element name="sp" type="CT_Shape"/>
|
||||||
|
<xsd:element name="grpSp" type="CT_GroupShape"/>
|
||||||
|
<xsd:element name="graphicFrame" type="CT_GraphicalObjectFrame"/>
|
||||||
|
<xsd:element name="cxnSp" type="CT_Connector"/>
|
||||||
|
<xsd:element name="pic" type="CT_Picture"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:group name="EG_ObjectChoices">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:choice minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element name="sp" type="CT_Shape"/>
|
||||||
|
<xsd:element name="grpSp" type="CT_GroupShape"/>
|
||||||
|
<xsd:element name="graphicFrame" type="CT_GraphicalObjectFrame"/>
|
||||||
|
<xsd:element name="cxnSp" type="CT_Connector"/>
|
||||||
|
<xsd:element name="pic" type="CT_Picture"/>
|
||||||
|
<xsd:element name="contentPart" type="CT_Rel"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:group>
|
||||||
|
<xsd:complexType name="CT_Rel">
|
||||||
|
<xsd:attribute ref="r:id" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:simpleType name="ST_ColID">
|
||||||
|
<xsd:restriction base="xsd:int">
|
||||||
|
<xsd:minInclusive value="0"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_RowID">
|
||||||
|
<xsd:restriction base="xsd:int">
|
||||||
|
<xsd:minInclusive value="0"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:complexType name="CT_Marker">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="col" type="ST_ColID"/>
|
||||||
|
<xsd:element name="colOff" type="a:ST_Coordinate"/>
|
||||||
|
<xsd:element name="row" type="ST_RowID"/>
|
||||||
|
<xsd:element name="rowOff" type="a:ST_Coordinate"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:simpleType name="ST_EditAs">
|
||||||
|
<xsd:restriction base="xsd:token">
|
||||||
|
<xsd:enumeration value="twoCell"/>
|
||||||
|
<xsd:enumeration value="oneCell"/>
|
||||||
|
<xsd:enumeration value="absolute"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:complexType name="CT_TwoCellAnchor">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="from" type="CT_Marker"/>
|
||||||
|
<xsd:element name="to" type="CT_Marker"/>
|
||||||
|
<xsd:group ref="EG_ObjectChoices"/>
|
||||||
|
<xsd:element name="clientData" type="CT_AnchorClientData" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="editAs" type="ST_EditAs" use="optional" default="twoCell"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_OneCellAnchor">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="from" type="CT_Marker"/>
|
||||||
|
<xsd:element name="ext" type="a:CT_PositiveSize2D"/>
|
||||||
|
<xsd:group ref="EG_ObjectChoices"/>
|
||||||
|
<xsd:element name="clientData" type="CT_AnchorClientData" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_AbsoluteAnchor">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="pos" type="a:CT_Point2D"/>
|
||||||
|
<xsd:element name="ext" type="a:CT_PositiveSize2D"/>
|
||||||
|
<xsd:group ref="EG_ObjectChoices"/>
|
||||||
|
<xsd:element name="clientData" type="CT_AnchorClientData" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:group name="EG_Anchor">
|
||||||
|
<xsd:choice>
|
||||||
|
<xsd:element name="twoCellAnchor" type="CT_TwoCellAnchor"/>
|
||||||
|
<xsd:element name="oneCellAnchor" type="CT_OneCellAnchor"/>
|
||||||
|
<xsd:element name="absoluteAnchor" type="CT_AbsoluteAnchor"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:group>
|
||||||
|
<xsd:complexType name="CT_Drawing">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:group ref="EG_Anchor" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:element name="wsDr" type="CT_Drawing"/>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,287 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
|
||||||
|
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
|
||||||
|
xmlns:dpct="http://schemas.openxmlformats.org/drawingml/2006/picture"
|
||||||
|
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"
|
||||||
|
elementFormDefault="qualified">
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/drawingml/2006/main"
|
||||||
|
schemaLocation="dml-main.xsd"/>
|
||||||
|
<xsd:import schemaLocation="wml.xsd"
|
||||||
|
namespace="http://schemas.openxmlformats.org/wordprocessingml/2006/main"/>
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/drawingml/2006/picture"
|
||||||
|
schemaLocation="dml-picture.xsd"/>
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
|
||||||
|
schemaLocation="shared-relationshipReference.xsd"/>
|
||||||
|
<xsd:complexType name="CT_EffectExtent">
|
||||||
|
<xsd:attribute name="l" type="a:ST_Coordinate" use="required"/>
|
||||||
|
<xsd:attribute name="t" type="a:ST_Coordinate" use="required"/>
|
||||||
|
<xsd:attribute name="r" type="a:ST_Coordinate" use="required"/>
|
||||||
|
<xsd:attribute name="b" type="a:ST_Coordinate" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:simpleType name="ST_WrapDistance">
|
||||||
|
<xsd:restriction base="xsd:unsignedInt"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:complexType name="CT_Inline">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="extent" type="a:CT_PositiveSize2D"/>
|
||||||
|
<xsd:element name="effectExtent" type="CT_EffectExtent" minOccurs="0"/>
|
||||||
|
<xsd:element name="docPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvGraphicFramePr" type="a:CT_NonVisualGraphicFrameProperties"
|
||||||
|
minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:element ref="a:graphic" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="distT" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distB" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distL" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distR" type="ST_WrapDistance" use="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:simpleType name="ST_WrapText">
|
||||||
|
<xsd:restriction base="xsd:token">
|
||||||
|
<xsd:enumeration value="bothSides"/>
|
||||||
|
<xsd:enumeration value="left"/>
|
||||||
|
<xsd:enumeration value="right"/>
|
||||||
|
<xsd:enumeration value="largest"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:complexType name="CT_WrapPath">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="start" type="a:CT_Point2D" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="lineTo" type="a:CT_Point2D" minOccurs="2" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="edited" type="xsd:boolean" use="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_WrapNone"/>
|
||||||
|
<xsd:complexType name="CT_WrapSquare">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="effectExtent" type="CT_EffectExtent" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="wrapText" type="ST_WrapText" use="required"/>
|
||||||
|
<xsd:attribute name="distT" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distB" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distL" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distR" type="ST_WrapDistance" use="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_WrapTight">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="wrapPolygon" type="CT_WrapPath" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="wrapText" type="ST_WrapText" use="required"/>
|
||||||
|
<xsd:attribute name="distL" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distR" type="ST_WrapDistance" use="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_WrapThrough">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="wrapPolygon" type="CT_WrapPath" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="wrapText" type="ST_WrapText" use="required"/>
|
||||||
|
<xsd:attribute name="distL" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distR" type="ST_WrapDistance" use="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_WrapTopBottom">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="effectExtent" type="CT_EffectExtent" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="distT" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distB" type="ST_WrapDistance" use="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:group name="EG_WrapType">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:choice minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element name="wrapNone" type="CT_WrapNone" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="wrapSquare" type="CT_WrapSquare" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="wrapTight" type="CT_WrapTight" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="wrapThrough" type="CT_WrapThrough" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="wrapTopAndBottom" type="CT_WrapTopBottom" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:group>
|
||||||
|
<xsd:simpleType name="ST_PositionOffset">
|
||||||
|
<xsd:restriction base="xsd:int"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_AlignH">
|
||||||
|
<xsd:restriction base="xsd:token">
|
||||||
|
<xsd:enumeration value="left"/>
|
||||||
|
<xsd:enumeration value="right"/>
|
||||||
|
<xsd:enumeration value="center"/>
|
||||||
|
<xsd:enumeration value="inside"/>
|
||||||
|
<xsd:enumeration value="outside"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_RelFromH">
|
||||||
|
<xsd:restriction base="xsd:token">
|
||||||
|
<xsd:enumeration value="margin"/>
|
||||||
|
<xsd:enumeration value="page"/>
|
||||||
|
<xsd:enumeration value="column"/>
|
||||||
|
<xsd:enumeration value="character"/>
|
||||||
|
<xsd:enumeration value="leftMargin"/>
|
||||||
|
<xsd:enumeration value="rightMargin"/>
|
||||||
|
<xsd:enumeration value="insideMargin"/>
|
||||||
|
<xsd:enumeration value="outsideMargin"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:complexType name="CT_PosH">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:choice minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element name="align" type="ST_AlignH" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="posOffset" type="ST_PositionOffset" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="relativeFrom" type="ST_RelFromH" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:simpleType name="ST_AlignV">
|
||||||
|
<xsd:restriction base="xsd:token">
|
||||||
|
<xsd:enumeration value="top"/>
|
||||||
|
<xsd:enumeration value="bottom"/>
|
||||||
|
<xsd:enumeration value="center"/>
|
||||||
|
<xsd:enumeration value="inside"/>
|
||||||
|
<xsd:enumeration value="outside"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_RelFromV">
|
||||||
|
<xsd:restriction base="xsd:token">
|
||||||
|
<xsd:enumeration value="margin"/>
|
||||||
|
<xsd:enumeration value="page"/>
|
||||||
|
<xsd:enumeration value="paragraph"/>
|
||||||
|
<xsd:enumeration value="line"/>
|
||||||
|
<xsd:enumeration value="topMargin"/>
|
||||||
|
<xsd:enumeration value="bottomMargin"/>
|
||||||
|
<xsd:enumeration value="insideMargin"/>
|
||||||
|
<xsd:enumeration value="outsideMargin"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:complexType name="CT_PosV">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:choice minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element name="align" type="ST_AlignV" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="posOffset" type="ST_PositionOffset" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="relativeFrom" type="ST_RelFromV" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Anchor">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="simplePos" type="a:CT_Point2D"/>
|
||||||
|
<xsd:element name="positionH" type="CT_PosH"/>
|
||||||
|
<xsd:element name="positionV" type="CT_PosV"/>
|
||||||
|
<xsd:element name="extent" type="a:CT_PositiveSize2D"/>
|
||||||
|
<xsd:element name="effectExtent" type="CT_EffectExtent" minOccurs="0"/>
|
||||||
|
<xsd:group ref="EG_WrapType"/>
|
||||||
|
<xsd:element name="docPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvGraphicFramePr" type="a:CT_NonVisualGraphicFrameProperties"
|
||||||
|
minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:element ref="a:graphic" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="distT" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distB" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distL" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="distR" type="ST_WrapDistance" use="optional"/>
|
||||||
|
<xsd:attribute name="simplePos" type="xsd:boolean"/>
|
||||||
|
<xsd:attribute name="relativeHeight" type="xsd:unsignedInt" use="required"/>
|
||||||
|
<xsd:attribute name="behindDoc" type="xsd:boolean" use="required"/>
|
||||||
|
<xsd:attribute name="locked" type="xsd:boolean" use="required"/>
|
||||||
|
<xsd:attribute name="layoutInCell" type="xsd:boolean" use="required"/>
|
||||||
|
<xsd:attribute name="hidden" type="xsd:boolean" use="optional"/>
|
||||||
|
<xsd:attribute name="allowOverlap" type="xsd:boolean" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_TxbxContent">
|
||||||
|
<xsd:group ref="w:EG_BlockLevelElts" minOccurs="1" maxOccurs="unbounded"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_TextboxInfo">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="txbxContent" type="CT_TxbxContent" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="extLst" type="a:CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="id" type="xsd:unsignedShort" use="optional" default="0"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_LinkedTextboxInformation">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="extLst" type="a:CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="id" type="xsd:unsignedShort" use="required"/>
|
||||||
|
<xsd:attribute name="seq" type="xsd:unsignedShort" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_WordprocessingShape">
|
||||||
|
<xsd:sequence minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:choice minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element name="cNvSpPr" type="a:CT_NonVisualDrawingShapeProps" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvCnPr" type="a:CT_NonVisualConnectorProperties" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
</xsd:choice>
|
||||||
|
<xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="style" type="a:CT_ShapeStyle" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:element name="extLst" type="a:CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:choice minOccurs="0" maxOccurs="1">
|
||||||
|
<xsd:element name="txbx" type="CT_TextboxInfo" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="linkedTxbx" type="CT_LinkedTextboxInformation" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
</xsd:choice>
|
||||||
|
<xsd:element name="bodyPr" type="a:CT_TextBodyProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="normalEastAsianFlow" type="xsd:boolean" use="optional" default="false"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_GraphicFrame">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvFrPr" type="a:CT_NonVisualGraphicFrameProperties" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
<xsd:element name="xfrm" type="a:CT_Transform2D" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element ref="a:graphic" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="extLst" type="a:CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_WordprocessingContentPartNonVisual">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvContentPartPr" type="a:CT_NonVisualContentPartProperties" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_WordprocessingContentPart">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="nvContentPartPr" type="CT_WordprocessingContentPartNonVisual" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:element name="xfrm" type="a:CT_Transform2D" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:element name="extLst" type="a:CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="bwMode" type="a:ST_BlackWhiteMode" use="optional"/>
|
||||||
|
<xsd:attribute ref="r:id" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_WordprocessingGroup">
|
||||||
|
<xsd:sequence minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:element name="cNvGrpSpPr" type="a:CT_NonVisualGroupDrawingShapeProps" minOccurs="1"
|
||||||
|
maxOccurs="1"/>
|
||||||
|
<xsd:element name="grpSpPr" type="a:CT_GroupShapeProperties" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:element ref="wsp"/>
|
||||||
|
<xsd:element name="grpSp" type="CT_WordprocessingGroup"/>
|
||||||
|
<xsd:element name="graphicFrame" type="CT_GraphicFrame"/>
|
||||||
|
<xsd:element ref="dpct:pic"/>
|
||||||
|
<xsd:element name="contentPart" type="CT_WordprocessingContentPart"/>
|
||||||
|
</xsd:choice>
|
||||||
|
<xsd:element name="extLst" type="a:CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_WordprocessingCanvas">
|
||||||
|
<xsd:sequence minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element name="bg" type="a:CT_BackgroundFormatting" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:element name="whole" type="a:CT_WholeE2oFormatting" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:element ref="wsp"/>
|
||||||
|
<xsd:element ref="dpct:pic"/>
|
||||||
|
<xsd:element name="contentPart" type="CT_WordprocessingContentPart"/>
|
||||||
|
<xsd:element ref="wgp"/>
|
||||||
|
<xsd:element name="graphicFrame" type="CT_GraphicFrame"/>
|
||||||
|
</xsd:choice>
|
||||||
|
<xsd:element name="extLst" type="a:CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:element name="wpc" type="CT_WordprocessingCanvas"/>
|
||||||
|
<xsd:element name="wgp" type="CT_WordprocessingGroup"/>
|
||||||
|
<xsd:element name="wsp" type="CT_WordprocessingShape"/>
|
||||||
|
<xsd:element name="inline" type="CT_Inline"/>
|
||||||
|
<xsd:element name="anchor" type="CT_Anchor"/>
|
||||||
|
</xsd:schema>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/officeDocument/2006/characteristics"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/officeDocument/2006/characteristics"
|
||||||
|
elementFormDefault="qualified">
|
||||||
|
<xsd:complexType name="CT_AdditionalCharacteristics">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="characteristic" type="CT_Characteristic" minOccurs="0"
|
||||||
|
maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Characteristic">
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required"/>
|
||||||
|
<xsd:attribute name="relation" type="ST_Relation" use="required"/>
|
||||||
|
<xsd:attribute name="val" type="xsd:string" use="required"/>
|
||||||
|
<xsd:attribute name="vocabulary" type="xsd:anyURI" use="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:simpleType name="ST_Relation">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="ge"/>
|
||||||
|
<xsd:enumeration value="le"/>
|
||||||
|
<xsd:enumeration value="gt"/>
|
||||||
|
<xsd:enumeration value="lt"/>
|
||||||
|
<xsd:enumeration value="eq"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:element name="additionalCharacteristics" type="CT_AdditionalCharacteristics"/>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,144 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/officeDocument/2006/bibliography"
|
||||||
|
xmlns:s="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/officeDocument/2006/bibliography"
|
||||||
|
elementFormDefault="qualified">
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
schemaLocation="shared-commonSimpleTypes.xsd"/>
|
||||||
|
<xsd:simpleType name="ST_SourceType">
|
||||||
|
<xsd:restriction base="s:ST_String">
|
||||||
|
<xsd:enumeration value="ArticleInAPeriodical"/>
|
||||||
|
<xsd:enumeration value="Book"/>
|
||||||
|
<xsd:enumeration value="BookSection"/>
|
||||||
|
<xsd:enumeration value="JournalArticle"/>
|
||||||
|
<xsd:enumeration value="ConferenceProceedings"/>
|
||||||
|
<xsd:enumeration value="Report"/>
|
||||||
|
<xsd:enumeration value="SoundRecording"/>
|
||||||
|
<xsd:enumeration value="Performance"/>
|
||||||
|
<xsd:enumeration value="Art"/>
|
||||||
|
<xsd:enumeration value="DocumentFromInternetSite"/>
|
||||||
|
<xsd:enumeration value="InternetSite"/>
|
||||||
|
<xsd:enumeration value="Film"/>
|
||||||
|
<xsd:enumeration value="Interview"/>
|
||||||
|
<xsd:enumeration value="Patent"/>
|
||||||
|
<xsd:enumeration value="ElectronicSource"/>
|
||||||
|
<xsd:enumeration value="Case"/>
|
||||||
|
<xsd:enumeration value="Misc"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:complexType name="CT_NameListType">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Person" type="CT_PersonType" minOccurs="1" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_PersonType">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Last" type="s:ST_String" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
<xsd:element name="First" type="s:ST_String" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
<xsd:element name="Middle" type="s:ST_String" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_NameType">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="NameList" type="CT_NameListType" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_NameOrCorporateType">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:choice minOccurs="0" maxOccurs="1">
|
||||||
|
<xsd:element name="NameList" type="CT_NameListType" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Corporate" minOccurs="1" maxOccurs="1" type="s:ST_String"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_AuthorType">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:element name="Artist" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Author" type="CT_NameOrCorporateType"/>
|
||||||
|
<xsd:element name="BookAuthor" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Compiler" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Composer" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Conductor" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Counsel" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Director" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Editor" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Interviewee" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Interviewer" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Inventor" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Performer" type="CT_NameOrCorporateType"/>
|
||||||
|
<xsd:element name="ProducerName" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Translator" type="CT_NameType"/>
|
||||||
|
<xsd:element name="Writer" type="CT_NameType"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_SourceType">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:element name="AbbreviatedCaseNumber" type="s:ST_String"/>
|
||||||
|
<xsd:element name="AlbumTitle" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Author" type="CT_AuthorType"/>
|
||||||
|
<xsd:element name="BookTitle" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Broadcaster" type="s:ST_String"/>
|
||||||
|
<xsd:element name="BroadcastTitle" type="s:ST_String"/>
|
||||||
|
<xsd:element name="CaseNumber" type="s:ST_String"/>
|
||||||
|
<xsd:element name="ChapterNumber" type="s:ST_String"/>
|
||||||
|
<xsd:element name="City" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Comments" type="s:ST_String"/>
|
||||||
|
<xsd:element name="ConferenceName" type="s:ST_String"/>
|
||||||
|
<xsd:element name="CountryRegion" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Court" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Day" type="s:ST_String"/>
|
||||||
|
<xsd:element name="DayAccessed" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Department" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Distributor" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Edition" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Guid" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Institution" type="s:ST_String"/>
|
||||||
|
<xsd:element name="InternetSiteTitle" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Issue" type="s:ST_String"/>
|
||||||
|
<xsd:element name="JournalName" type="s:ST_String"/>
|
||||||
|
<xsd:element name="LCID" type="s:ST_Lang"/>
|
||||||
|
<xsd:element name="Medium" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Month" type="s:ST_String"/>
|
||||||
|
<xsd:element name="MonthAccessed" type="s:ST_String"/>
|
||||||
|
<xsd:element name="NumberVolumes" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Pages" type="s:ST_String"/>
|
||||||
|
<xsd:element name="PatentNumber" type="s:ST_String"/>
|
||||||
|
<xsd:element name="PeriodicalTitle" type="s:ST_String"/>
|
||||||
|
<xsd:element name="ProductionCompany" type="s:ST_String"/>
|
||||||
|
<xsd:element name="PublicationTitle" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Publisher" type="s:ST_String"/>
|
||||||
|
<xsd:element name="RecordingNumber" type="s:ST_String"/>
|
||||||
|
<xsd:element name="RefOrder" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Reporter" type="s:ST_String"/>
|
||||||
|
<xsd:element name="SourceType" type="ST_SourceType"/>
|
||||||
|
<xsd:element name="ShortTitle" type="s:ST_String"/>
|
||||||
|
<xsd:element name="StandardNumber" type="s:ST_String"/>
|
||||||
|
<xsd:element name="StateProvince" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Station" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Tag" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Theater" type="s:ST_String"/>
|
||||||
|
<xsd:element name="ThesisType" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Title" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Type" type="s:ST_String"/>
|
||||||
|
<xsd:element name="URL" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Version" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Volume" type="s:ST_String"/>
|
||||||
|
<xsd:element name="Year" type="s:ST_String"/>
|
||||||
|
<xsd:element name="YearAccessed" type="s:ST_String"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:element name="Sources" type="CT_Sources"/>
|
||||||
|
<xsd:complexType name="CT_Sources">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Source" type="CT_SourceType" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="SelectedStyle" type="s:ST_String"/>
|
||||||
|
<xsd:attribute name="StyleName" type="s:ST_String"/>
|
||||||
|
<xsd:attribute name="URI" type="s:ST_String"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,174 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
elementFormDefault="qualified">
|
||||||
|
<xsd:simpleType name="ST_Lang">
|
||||||
|
<xsd:restriction base="xsd:string"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_HexColorRGB">
|
||||||
|
<xsd:restriction base="xsd:hexBinary">
|
||||||
|
<xsd:length value="3" fixed="true"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_Panose">
|
||||||
|
<xsd:restriction base="xsd:hexBinary">
|
||||||
|
<xsd:length value="10"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_CalendarType">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="gregorian"/>
|
||||||
|
<xsd:enumeration value="gregorianUs"/>
|
||||||
|
<xsd:enumeration value="gregorianMeFrench"/>
|
||||||
|
<xsd:enumeration value="gregorianArabic"/>
|
||||||
|
<xsd:enumeration value="hijri"/>
|
||||||
|
<xsd:enumeration value="hebrew"/>
|
||||||
|
<xsd:enumeration value="taiwan"/>
|
||||||
|
<xsd:enumeration value="japan"/>
|
||||||
|
<xsd:enumeration value="thai"/>
|
||||||
|
<xsd:enumeration value="korea"/>
|
||||||
|
<xsd:enumeration value="saka"/>
|
||||||
|
<xsd:enumeration value="gregorianXlitEnglish"/>
|
||||||
|
<xsd:enumeration value="gregorianXlitFrench"/>
|
||||||
|
<xsd:enumeration value="none"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_AlgClass">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="hash"/>
|
||||||
|
<xsd:enumeration value="custom"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_CryptProv">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="rsaAES"/>
|
||||||
|
<xsd:enumeration value="rsaFull"/>
|
||||||
|
<xsd:enumeration value="custom"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_AlgType">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="typeAny"/>
|
||||||
|
<xsd:enumeration value="custom"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_ColorType">
|
||||||
|
<xsd:restriction base="xsd:string"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_Guid">
|
||||||
|
<xsd:restriction base="xsd:token">
|
||||||
|
<xsd:pattern value="\{[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}\}"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_OnOff">
|
||||||
|
<xsd:union memberTypes="xsd:boolean ST_OnOff1"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_OnOff1">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="on"/>
|
||||||
|
<xsd:enumeration value="off"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_String">
|
||||||
|
<xsd:restriction base="xsd:string"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_XmlName">
|
||||||
|
<xsd:restriction base="xsd:NCName">
|
||||||
|
<xsd:minLength value="1"/>
|
||||||
|
<xsd:maxLength value="255"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_TrueFalse">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="t"/>
|
||||||
|
<xsd:enumeration value="f"/>
|
||||||
|
<xsd:enumeration value="true"/>
|
||||||
|
<xsd:enumeration value="false"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_TrueFalseBlank">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="t"/>
|
||||||
|
<xsd:enumeration value="f"/>
|
||||||
|
<xsd:enumeration value="true"/>
|
||||||
|
<xsd:enumeration value="false"/>
|
||||||
|
<xsd:enumeration value=""/>
|
||||||
|
<xsd:enumeration value="True"/>
|
||||||
|
<xsd:enumeration value="False"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_UnsignedDecimalNumber">
|
||||||
|
<xsd:restriction base="xsd:decimal">
|
||||||
|
<xsd:minInclusive value="0"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_TwipsMeasure">
|
||||||
|
<xsd:union memberTypes="ST_UnsignedDecimalNumber ST_PositiveUniversalMeasure"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_VerticalAlignRun">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="baseline"/>
|
||||||
|
<xsd:enumeration value="superscript"/>
|
||||||
|
<xsd:enumeration value="subscript"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_Xstring">
|
||||||
|
<xsd:restriction base="xsd:string"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_XAlign">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="left"/>
|
||||||
|
<xsd:enumeration value="center"/>
|
||||||
|
<xsd:enumeration value="right"/>
|
||||||
|
<xsd:enumeration value="inside"/>
|
||||||
|
<xsd:enumeration value="outside"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_YAlign">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="inline"/>
|
||||||
|
<xsd:enumeration value="top"/>
|
||||||
|
<xsd:enumeration value="center"/>
|
||||||
|
<xsd:enumeration value="bottom"/>
|
||||||
|
<xsd:enumeration value="inside"/>
|
||||||
|
<xsd:enumeration value="outside"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_ConformanceClass">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="strict"/>
|
||||||
|
<xsd:enumeration value="transitional"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_UniversalMeasure">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:pattern value="-?[0-9]+(\.[0-9]+)?(mm|cm|in|pt|pc|pi)"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_PositiveUniversalMeasure">
|
||||||
|
<xsd:restriction base="ST_UniversalMeasure">
|
||||||
|
<xsd:pattern value="[0-9]+(\.[0-9]+)?(mm|cm|in|pt|pc|pi)"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_Percentage">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:pattern value="-?[0-9]+(\.[0-9]+)?%"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_FixedPercentage">
|
||||||
|
<xsd:restriction base="ST_Percentage">
|
||||||
|
<xsd:pattern value="-?((100)|([0-9][0-9]?))(\.[0-9][0-9]?)?%"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_PositivePercentage">
|
||||||
|
<xsd:restriction base="ST_Percentage">
|
||||||
|
<xsd:pattern value="[0-9]+(\.[0-9]+)?%"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_PositiveFixedPercentage">
|
||||||
|
<xsd:restriction base="ST_Percentage">
|
||||||
|
<xsd:pattern value="((100)|([0-9][0-9]?))(\.[0-9][0-9]?)?%"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/officeDocument/2006/customXml"
|
||||||
|
xmlns:s="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/officeDocument/2006/customXml"
|
||||||
|
elementFormDefault="qualified" attributeFormDefault="qualified" blockDefault="#all">
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
schemaLocation="shared-commonSimpleTypes.xsd"/>
|
||||||
|
<xsd:complexType name="CT_DatastoreSchemaRef">
|
||||||
|
<xsd:attribute name="uri" type="xsd:string" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_DatastoreSchemaRefs">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="schemaRef" type="CT_DatastoreSchemaRef" minOccurs="0" maxOccurs="unbounded"
|
||||||
|
/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_DatastoreItem">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="schemaRefs" type="CT_DatastoreSchemaRefs" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="itemID" type="s:ST_Guid" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:element name="datastoreItem" type="CT_DatastoreItem"/>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/schemaLibrary/2006/main"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/schemaLibrary/2006/main"
|
||||||
|
attributeFormDefault="qualified" elementFormDefault="qualified">
|
||||||
|
<xsd:complexType name="CT_Schema">
|
||||||
|
<xsd:attribute name="uri" type="xsd:string" default=""/>
|
||||||
|
<xsd:attribute name="manifestLocation" type="xsd:string"/>
|
||||||
|
<xsd:attribute name="schemaLocation" type="xsd:string"/>
|
||||||
|
<xsd:attribute name="schemaLanguage" type="xsd:token"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_SchemaLibrary">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="schema" type="CT_Schema" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:element name="schemaLibrary" type="CT_SchemaLibrary"/>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties"
|
||||||
|
xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"
|
||||||
|
xmlns:s="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties"
|
||||||
|
blockDefault="#all" elementFormDefault="qualified">
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"
|
||||||
|
schemaLocation="shared-documentPropertiesVariantTypes.xsd"/>
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
schemaLocation="shared-commonSimpleTypes.xsd"/>
|
||||||
|
<xsd:element name="Properties" type="CT_Properties"/>
|
||||||
|
<xsd:complexType name="CT_Properties">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="property" minOccurs="0" maxOccurs="unbounded" type="CT_Property"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Property">
|
||||||
|
<xsd:choice minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element ref="vt:vector"/>
|
||||||
|
<xsd:element ref="vt:array"/>
|
||||||
|
<xsd:element ref="vt:blob"/>
|
||||||
|
<xsd:element ref="vt:oblob"/>
|
||||||
|
<xsd:element ref="vt:empty"/>
|
||||||
|
<xsd:element ref="vt:null"/>
|
||||||
|
<xsd:element ref="vt:i1"/>
|
||||||
|
<xsd:element ref="vt:i2"/>
|
||||||
|
<xsd:element ref="vt:i4"/>
|
||||||
|
<xsd:element ref="vt:i8"/>
|
||||||
|
<xsd:element ref="vt:int"/>
|
||||||
|
<xsd:element ref="vt:ui1"/>
|
||||||
|
<xsd:element ref="vt:ui2"/>
|
||||||
|
<xsd:element ref="vt:ui4"/>
|
||||||
|
<xsd:element ref="vt:ui8"/>
|
||||||
|
<xsd:element ref="vt:uint"/>
|
||||||
|
<xsd:element ref="vt:r4"/>
|
||||||
|
<xsd:element ref="vt:r8"/>
|
||||||
|
<xsd:element ref="vt:decimal"/>
|
||||||
|
<xsd:element ref="vt:lpstr"/>
|
||||||
|
<xsd:element ref="vt:lpwstr"/>
|
||||||
|
<xsd:element ref="vt:bstr"/>
|
||||||
|
<xsd:element ref="vt:date"/>
|
||||||
|
<xsd:element ref="vt:filetime"/>
|
||||||
|
<xsd:element ref="vt:bool"/>
|
||||||
|
<xsd:element ref="vt:cy"/>
|
||||||
|
<xsd:element ref="vt:error"/>
|
||||||
|
<xsd:element ref="vt:stream"/>
|
||||||
|
<xsd:element ref="vt:ostream"/>
|
||||||
|
<xsd:element ref="vt:storage"/>
|
||||||
|
<xsd:element ref="vt:ostorage"/>
|
||||||
|
<xsd:element ref="vt:vstream"/>
|
||||||
|
<xsd:element ref="vt:clsid"/>
|
||||||
|
</xsd:choice>
|
||||||
|
<xsd:attribute name="fmtid" use="required" type="s:ST_Guid"/>
|
||||||
|
<xsd:attribute name="pid" use="required" type="xsd:int"/>
|
||||||
|
<xsd:attribute name="name" use="optional" type="xsd:string"/>
|
||||||
|
<xsd:attribute name="linkTarget" use="optional" type="xsd:string"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"
|
||||||
|
xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"
|
||||||
|
elementFormDefault="qualified" blockDefault="#all">
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"
|
||||||
|
schemaLocation="shared-documentPropertiesVariantTypes.xsd"/>
|
||||||
|
<xsd:element name="Properties" type="CT_Properties"/>
|
||||||
|
<xsd:complexType name="CT_Properties">
|
||||||
|
<xsd:all>
|
||||||
|
<xsd:element name="Template" minOccurs="0" maxOccurs="1" type="xsd:string"/>
|
||||||
|
<xsd:element name="Manager" minOccurs="0" maxOccurs="1" type="xsd:string"/>
|
||||||
|
<xsd:element name="Company" minOccurs="0" maxOccurs="1" type="xsd:string"/>
|
||||||
|
<xsd:element name="Pages" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
<xsd:element name="Words" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
<xsd:element name="Characters" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
<xsd:element name="PresentationFormat" minOccurs="0" maxOccurs="1" type="xsd:string"/>
|
||||||
|
<xsd:element name="Lines" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
<xsd:element name="Paragraphs" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
<xsd:element name="Slides" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
<xsd:element name="Notes" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
<xsd:element name="TotalTime" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
<xsd:element name="HiddenSlides" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
<xsd:element name="MMClips" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
<xsd:element name="ScaleCrop" minOccurs="0" maxOccurs="1" type="xsd:boolean"/>
|
||||||
|
<xsd:element name="HeadingPairs" minOccurs="0" maxOccurs="1" type="CT_VectorVariant"/>
|
||||||
|
<xsd:element name="TitlesOfParts" minOccurs="0" maxOccurs="1" type="CT_VectorLpstr"/>
|
||||||
|
<xsd:element name="LinksUpToDate" minOccurs="0" maxOccurs="1" type="xsd:boolean"/>
|
||||||
|
<xsd:element name="CharactersWithSpaces" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
<xsd:element name="SharedDoc" minOccurs="0" maxOccurs="1" type="xsd:boolean"/>
|
||||||
|
<xsd:element name="HyperlinkBase" minOccurs="0" maxOccurs="1" type="xsd:string"/>
|
||||||
|
<xsd:element name="HLinks" minOccurs="0" maxOccurs="1" type="CT_VectorVariant"/>
|
||||||
|
<xsd:element name="HyperlinksChanged" minOccurs="0" maxOccurs="1" type="xsd:boolean"/>
|
||||||
|
<xsd:element name="DigSig" minOccurs="0" maxOccurs="1" type="CT_DigSigBlob"/>
|
||||||
|
<xsd:element name="Application" minOccurs="0" maxOccurs="1" type="xsd:string"/>
|
||||||
|
<xsd:element name="AppVersion" minOccurs="0" maxOccurs="1" type="xsd:string"/>
|
||||||
|
<xsd:element name="DocSecurity" minOccurs="0" maxOccurs="1" type="xsd:int"/>
|
||||||
|
</xsd:all>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_VectorVariant">
|
||||||
|
<xsd:sequence minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element ref="vt:vector"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_VectorLpstr">
|
||||||
|
<xsd:sequence minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element ref="vt:vector"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_DigSigBlob">
|
||||||
|
<xsd:sequence minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element ref="vt:blob"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,195 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"
|
||||||
|
xmlns:s="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"
|
||||||
|
blockDefault="#all" elementFormDefault="qualified">
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
schemaLocation="shared-commonSimpleTypes.xsd"/>
|
||||||
|
<xsd:simpleType name="ST_VectorBaseType">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="variant"/>
|
||||||
|
<xsd:enumeration value="i1"/>
|
||||||
|
<xsd:enumeration value="i2"/>
|
||||||
|
<xsd:enumeration value="i4"/>
|
||||||
|
<xsd:enumeration value="i8"/>
|
||||||
|
<xsd:enumeration value="ui1"/>
|
||||||
|
<xsd:enumeration value="ui2"/>
|
||||||
|
<xsd:enumeration value="ui4"/>
|
||||||
|
<xsd:enumeration value="ui8"/>
|
||||||
|
<xsd:enumeration value="r4"/>
|
||||||
|
<xsd:enumeration value="r8"/>
|
||||||
|
<xsd:enumeration value="lpstr"/>
|
||||||
|
<xsd:enumeration value="lpwstr"/>
|
||||||
|
<xsd:enumeration value="bstr"/>
|
||||||
|
<xsd:enumeration value="date"/>
|
||||||
|
<xsd:enumeration value="filetime"/>
|
||||||
|
<xsd:enumeration value="bool"/>
|
||||||
|
<xsd:enumeration value="cy"/>
|
||||||
|
<xsd:enumeration value="error"/>
|
||||||
|
<xsd:enumeration value="clsid"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_ArrayBaseType">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="variant"/>
|
||||||
|
<xsd:enumeration value="i1"/>
|
||||||
|
<xsd:enumeration value="i2"/>
|
||||||
|
<xsd:enumeration value="i4"/>
|
||||||
|
<xsd:enumeration value="int"/>
|
||||||
|
<xsd:enumeration value="ui1"/>
|
||||||
|
<xsd:enumeration value="ui2"/>
|
||||||
|
<xsd:enumeration value="ui4"/>
|
||||||
|
<xsd:enumeration value="uint"/>
|
||||||
|
<xsd:enumeration value="r4"/>
|
||||||
|
<xsd:enumeration value="r8"/>
|
||||||
|
<xsd:enumeration value="decimal"/>
|
||||||
|
<xsd:enumeration value="bstr"/>
|
||||||
|
<xsd:enumeration value="date"/>
|
||||||
|
<xsd:enumeration value="bool"/>
|
||||||
|
<xsd:enumeration value="cy"/>
|
||||||
|
<xsd:enumeration value="error"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_Cy">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:pattern value="\s*[0-9]*\.[0-9]{4}\s*"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_Error">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:pattern value="\s*0x[0-9A-Za-z]{8}\s*"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:complexType name="CT_Empty"/>
|
||||||
|
<xsd:complexType name="CT_Null"/>
|
||||||
|
<xsd:complexType name="CT_Vector">
|
||||||
|
<xsd:choice minOccurs="1" maxOccurs="unbounded">
|
||||||
|
<xsd:element ref="variant"/>
|
||||||
|
<xsd:element ref="i1"/>
|
||||||
|
<xsd:element ref="i2"/>
|
||||||
|
<xsd:element ref="i4"/>
|
||||||
|
<xsd:element ref="i8"/>
|
||||||
|
<xsd:element ref="ui1"/>
|
||||||
|
<xsd:element ref="ui2"/>
|
||||||
|
<xsd:element ref="ui4"/>
|
||||||
|
<xsd:element ref="ui8"/>
|
||||||
|
<xsd:element ref="r4"/>
|
||||||
|
<xsd:element ref="r8"/>
|
||||||
|
<xsd:element ref="lpstr"/>
|
||||||
|
<xsd:element ref="lpwstr"/>
|
||||||
|
<xsd:element ref="bstr"/>
|
||||||
|
<xsd:element ref="date"/>
|
||||||
|
<xsd:element ref="filetime"/>
|
||||||
|
<xsd:element ref="bool"/>
|
||||||
|
<xsd:element ref="cy"/>
|
||||||
|
<xsd:element ref="error"/>
|
||||||
|
<xsd:element ref="clsid"/>
|
||||||
|
</xsd:choice>
|
||||||
|
<xsd:attribute name="baseType" type="ST_VectorBaseType" use="required"/>
|
||||||
|
<xsd:attribute name="size" type="xsd:unsignedInt" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Array">
|
||||||
|
<xsd:choice minOccurs="1" maxOccurs="unbounded">
|
||||||
|
<xsd:element ref="variant"/>
|
||||||
|
<xsd:element ref="i1"/>
|
||||||
|
<xsd:element ref="i2"/>
|
||||||
|
<xsd:element ref="i4"/>
|
||||||
|
<xsd:element ref="int"/>
|
||||||
|
<xsd:element ref="ui1"/>
|
||||||
|
<xsd:element ref="ui2"/>
|
||||||
|
<xsd:element ref="ui4"/>
|
||||||
|
<xsd:element ref="uint"/>
|
||||||
|
<xsd:element ref="r4"/>
|
||||||
|
<xsd:element ref="r8"/>
|
||||||
|
<xsd:element ref="decimal"/>
|
||||||
|
<xsd:element ref="bstr"/>
|
||||||
|
<xsd:element ref="date"/>
|
||||||
|
<xsd:element ref="bool"/>
|
||||||
|
<xsd:element ref="error"/>
|
||||||
|
<xsd:element ref="cy"/>
|
||||||
|
</xsd:choice>
|
||||||
|
<xsd:attribute name="lBounds" type="xsd:int" use="required"/>
|
||||||
|
<xsd:attribute name="uBounds" type="xsd:int" use="required"/>
|
||||||
|
<xsd:attribute name="baseType" type="ST_ArrayBaseType" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Variant">
|
||||||
|
<xsd:choice minOccurs="1" maxOccurs="1">
|
||||||
|
<xsd:element ref="variant"/>
|
||||||
|
<xsd:element ref="vector"/>
|
||||||
|
<xsd:element ref="array"/>
|
||||||
|
<xsd:element ref="blob"/>
|
||||||
|
<xsd:element ref="oblob"/>
|
||||||
|
<xsd:element ref="empty"/>
|
||||||
|
<xsd:element ref="null"/>
|
||||||
|
<xsd:element ref="i1"/>
|
||||||
|
<xsd:element ref="i2"/>
|
||||||
|
<xsd:element ref="i4"/>
|
||||||
|
<xsd:element ref="i8"/>
|
||||||
|
<xsd:element ref="int"/>
|
||||||
|
<xsd:element ref="ui1"/>
|
||||||
|
<xsd:element ref="ui2"/>
|
||||||
|
<xsd:element ref="ui4"/>
|
||||||
|
<xsd:element ref="ui8"/>
|
||||||
|
<xsd:element ref="uint"/>
|
||||||
|
<xsd:element ref="r4"/>
|
||||||
|
<xsd:element ref="r8"/>
|
||||||
|
<xsd:element ref="decimal"/>
|
||||||
|
<xsd:element ref="lpstr"/>
|
||||||
|
<xsd:element ref="lpwstr"/>
|
||||||
|
<xsd:element ref="bstr"/>
|
||||||
|
<xsd:element ref="date"/>
|
||||||
|
<xsd:element ref="filetime"/>
|
||||||
|
<xsd:element ref="bool"/>
|
||||||
|
<xsd:element ref="cy"/>
|
||||||
|
<xsd:element ref="error"/>
|
||||||
|
<xsd:element ref="stream"/>
|
||||||
|
<xsd:element ref="ostream"/>
|
||||||
|
<xsd:element ref="storage"/>
|
||||||
|
<xsd:element ref="ostorage"/>
|
||||||
|
<xsd:element ref="vstream"/>
|
||||||
|
<xsd:element ref="clsid"/>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:complexType name="CT_Vstream">
|
||||||
|
<xsd:simpleContent>
|
||||||
|
<xsd:extension base="xsd:base64Binary">
|
||||||
|
<xsd:attribute name="version" type="s:ST_Guid"/>
|
||||||
|
</xsd:extension>
|
||||||
|
</xsd:simpleContent>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:element name="variant" type="CT_Variant"/>
|
||||||
|
<xsd:element name="vector" type="CT_Vector"/>
|
||||||
|
<xsd:element name="array" type="CT_Array"/>
|
||||||
|
<xsd:element name="blob" type="xsd:base64Binary"/>
|
||||||
|
<xsd:element name="oblob" type="xsd:base64Binary"/>
|
||||||
|
<xsd:element name="empty" type="CT_Empty"/>
|
||||||
|
<xsd:element name="null" type="CT_Null"/>
|
||||||
|
<xsd:element name="i1" type="xsd:byte"/>
|
||||||
|
<xsd:element name="i2" type="xsd:short"/>
|
||||||
|
<xsd:element name="i4" type="xsd:int"/>
|
||||||
|
<xsd:element name="i8" type="xsd:long"/>
|
||||||
|
<xsd:element name="int" type="xsd:int"/>
|
||||||
|
<xsd:element name="ui1" type="xsd:unsignedByte"/>
|
||||||
|
<xsd:element name="ui2" type="xsd:unsignedShort"/>
|
||||||
|
<xsd:element name="ui4" type="xsd:unsignedInt"/>
|
||||||
|
<xsd:element name="ui8" type="xsd:unsignedLong"/>
|
||||||
|
<xsd:element name="uint" type="xsd:unsignedInt"/>
|
||||||
|
<xsd:element name="r4" type="xsd:float"/>
|
||||||
|
<xsd:element name="r8" type="xsd:double"/>
|
||||||
|
<xsd:element name="decimal" type="xsd:decimal"/>
|
||||||
|
<xsd:element name="lpstr" type="xsd:string"/>
|
||||||
|
<xsd:element name="lpwstr" type="xsd:string"/>
|
||||||
|
<xsd:element name="bstr" type="xsd:string"/>
|
||||||
|
<xsd:element name="date" type="xsd:dateTime"/>
|
||||||
|
<xsd:element name="filetime" type="xsd:dateTime"/>
|
||||||
|
<xsd:element name="bool" type="xsd:boolean"/>
|
||||||
|
<xsd:element name="cy" type="ST_Cy"/>
|
||||||
|
<xsd:element name="error" type="ST_Error"/>
|
||||||
|
<xsd:element name="stream" type="xsd:base64Binary"/>
|
||||||
|
<xsd:element name="ostream" type="xsd:base64Binary"/>
|
||||||
|
<xsd:element name="storage" type="xsd:base64Binary"/>
|
||||||
|
<xsd:element name="ostorage" type="xsd:base64Binary"/>
|
||||||
|
<xsd:element name="vstream" type="CT_Vstream"/>
|
||||||
|
<xsd:element name="clsid" type="s:ST_Guid"/>
|
||||||
|
</xsd:schema>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
|
||||||
|
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
|
||||||
|
elementFormDefault="qualified"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
|
||||||
|
blockDefault="#all">
|
||||||
|
<xsd:simpleType name="ST_RelationshipId">
|
||||||
|
<xsd:restriction base="xsd:string"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:attribute name="id" type="ST_RelationshipId"/>
|
||||||
|
<xsd:attribute name="embed" type="ST_RelationshipId"/>
|
||||||
|
<xsd:attribute name="link" type="ST_RelationshipId"/>
|
||||||
|
<xsd:attribute name="dm" type="ST_RelationshipId" default=""/>
|
||||||
|
<xsd:attribute name="lo" type="ST_RelationshipId" default=""/>
|
||||||
|
<xsd:attribute name="qs" type="ST_RelationshipId" default=""/>
|
||||||
|
<xsd:attribute name="cs" type="ST_RelationshipId" default=""/>
|
||||||
|
<xsd:attribute name="blip" type="ST_RelationshipId" default=""/>
|
||||||
|
<xsd:attribute name="pict" type="ST_RelationshipId"/>
|
||||||
|
<xsd:attribute name="href" type="ST_RelationshipId"/>
|
||||||
|
<xsd:attribute name="topLeft" type="ST_RelationshipId"/>
|
||||||
|
<xsd:attribute name="topRight" type="ST_RelationshipId"/>
|
||||||
|
<xsd:attribute name="bottomLeft" type="ST_RelationshipId"/>
|
||||||
|
<xsd:attribute name="bottomRight" type="ST_RelationshipId"/>
|
||||||
|
</xsd:schema>
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="urn:schemas-microsoft-com:office:powerpoint"
|
||||||
|
targetNamespace="urn:schemas-microsoft-com:office:powerpoint" elementFormDefault="qualified"
|
||||||
|
attributeFormDefault="unqualified">
|
||||||
|
<xsd:element name="iscomment" type="CT_Empty"/>
|
||||||
|
<xsd:element name="textdata" type="CT_Rel"/>
|
||||||
|
<xsd:complexType name="CT_Empty"/>
|
||||||
|
<xsd:complexType name="CT_Rel">
|
||||||
|
<xsd:attribute name="id" type="xsd:string"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="urn:schemas-microsoft-com:office:excel"
|
||||||
|
xmlns:s="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
targetNamespace="urn:schemas-microsoft-com:office:excel" elementFormDefault="qualified"
|
||||||
|
attributeFormDefault="unqualified">
|
||||||
|
<xsd:import namespace="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
||||||
|
schemaLocation="shared-commonSimpleTypes.xsd"/>
|
||||||
|
<xsd:element name="ClientData" type="CT_ClientData"/>
|
||||||
|
<xsd:complexType name="CT_ClientData">
|
||||||
|
<xsd:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:element name="MoveWithCells" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="SizeWithCells" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="Anchor" type="xsd:string"/>
|
||||||
|
<xsd:element name="Locked" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="DefaultSize" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="PrintObject" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="Disabled" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="AutoFill" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="AutoLine" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="AutoPict" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="FmlaMacro" type="xsd:string"/>
|
||||||
|
<xsd:element name="TextHAlign" type="xsd:string"/>
|
||||||
|
<xsd:element name="TextVAlign" type="xsd:string"/>
|
||||||
|
<xsd:element name="LockText" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="JustLastX" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="SecretEdit" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="Default" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="Help" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="Cancel" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="Dismiss" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="Accel" type="xsd:integer"/>
|
||||||
|
<xsd:element name="Accel2" type="xsd:integer"/>
|
||||||
|
<xsd:element name="Row" type="xsd:integer"/>
|
||||||
|
<xsd:element name="Column" type="xsd:integer"/>
|
||||||
|
<xsd:element name="Visible" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="RowHidden" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="ColHidden" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="VTEdit" type="xsd:integer"/>
|
||||||
|
<xsd:element name="MultiLine" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="VScroll" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="ValidIds" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="FmlaRange" type="xsd:string"/>
|
||||||
|
<xsd:element name="WidthMin" type="xsd:integer"/>
|
||||||
|
<xsd:element name="Sel" type="xsd:integer"/>
|
||||||
|
<xsd:element name="NoThreeD2" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="SelType" type="xsd:string"/>
|
||||||
|
<xsd:element name="MultiSel" type="xsd:string"/>
|
||||||
|
<xsd:element name="LCT" type="xsd:string"/>
|
||||||
|
<xsd:element name="ListItem" type="xsd:string"/>
|
||||||
|
<xsd:element name="DropStyle" type="xsd:string"/>
|
||||||
|
<xsd:element name="Colored" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="DropLines" type="xsd:integer"/>
|
||||||
|
<xsd:element name="Checked" type="xsd:integer"/>
|
||||||
|
<xsd:element name="FmlaLink" type="xsd:string"/>
|
||||||
|
<xsd:element name="FmlaPict" type="xsd:string"/>
|
||||||
|
<xsd:element name="NoThreeD" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="FirstButton" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="FmlaGroup" type="xsd:string"/>
|
||||||
|
<xsd:element name="Val" type="xsd:integer"/>
|
||||||
|
<xsd:element name="Min" type="xsd:integer"/>
|
||||||
|
<xsd:element name="Max" type="xsd:integer"/>
|
||||||
|
<xsd:element name="Inc" type="xsd:integer"/>
|
||||||
|
<xsd:element name="Page" type="xsd:integer"/>
|
||||||
|
<xsd:element name="Horiz" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="Dx" type="xsd:integer"/>
|
||||||
|
<xsd:element name="MapOCX" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="CF" type="ST_CF"/>
|
||||||
|
<xsd:element name="Camera" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="RecalcAlways" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="AutoScale" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="DDE" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="UIObj" type="s:ST_TrueFalseBlank"/>
|
||||||
|
<xsd:element name="ScriptText" type="xsd:string"/>
|
||||||
|
<xsd:element name="ScriptExtended" type="xsd:string"/>
|
||||||
|
<xsd:element name="ScriptLanguage" type="xsd:nonNegativeInteger"/>
|
||||||
|
<xsd:element name="ScriptLocation" type="xsd:nonNegativeInteger"/>
|
||||||
|
<xsd:element name="FmlaTxbx" type="xsd:string"/>
|
||||||
|
</xsd:choice>
|
||||||
|
<xsd:attribute name="ObjectType" type="ST_ObjectType" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:simpleType name="ST_CF">
|
||||||
|
<xsd:restriction base="xsd:string"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_ObjectType">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="Button"/>
|
||||||
|
<xsd:enumeration value="Checkbox"/>
|
||||||
|
<xsd:enumeration value="Dialog"/>
|
||||||
|
<xsd:enumeration value="Drop"/>
|
||||||
|
<xsd:enumeration value="Edit"/>
|
||||||
|
<xsd:enumeration value="GBox"/>
|
||||||
|
<xsd:enumeration value="Label"/>
|
||||||
|
<xsd:enumeration value="LineA"/>
|
||||||
|
<xsd:enumeration value="List"/>
|
||||||
|
<xsd:enumeration value="Movie"/>
|
||||||
|
<xsd:enumeration value="Note"/>
|
||||||
|
<xsd:enumeration value="Pict"/>
|
||||||
|
<xsd:enumeration value="Radio"/>
|
||||||
|
<xsd:enumeration value="RectA"/>
|
||||||
|
<xsd:enumeration value="Scroll"/>
|
||||||
|
<xsd:enumeration value="Spin"/>
|
||||||
|
<xsd:enumeration value="Shape"/>
|
||||||
|
<xsd:enumeration value="Group"/>
|
||||||
|
<xsd:enumeration value="Rect"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="urn:schemas-microsoft-com:office:word"
|
||||||
|
targetNamespace="urn:schemas-microsoft-com:office:word" elementFormDefault="qualified"
|
||||||
|
attributeFormDefault="unqualified">
|
||||||
|
<xsd:element name="bordertop" type="CT_Border"/>
|
||||||
|
<xsd:element name="borderleft" type="CT_Border"/>
|
||||||
|
<xsd:element name="borderright" type="CT_Border"/>
|
||||||
|
<xsd:element name="borderbottom" type="CT_Border"/>
|
||||||
|
<xsd:complexType name="CT_Border">
|
||||||
|
<xsd:attribute name="type" type="ST_BorderType" use="optional"/>
|
||||||
|
<xsd:attribute name="width" type="xsd:positiveInteger" use="optional"/>
|
||||||
|
<xsd:attribute name="shadow" type="ST_BorderShadow" use="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:element name="wrap" type="CT_Wrap"/>
|
||||||
|
<xsd:complexType name="CT_Wrap">
|
||||||
|
<xsd:attribute name="type" type="ST_WrapType" use="optional"/>
|
||||||
|
<xsd:attribute name="side" type="ST_WrapSide" use="optional"/>
|
||||||
|
<xsd:attribute name="anchorx" type="ST_HorizontalAnchor" use="optional"/>
|
||||||
|
<xsd:attribute name="anchory" type="ST_VerticalAnchor" use="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
<xsd:element name="anchorlock" type="CT_AnchorLock"/>
|
||||||
|
<xsd:complexType name="CT_AnchorLock"/>
|
||||||
|
<xsd:simpleType name="ST_BorderType">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="none"/>
|
||||||
|
<xsd:enumeration value="single"/>
|
||||||
|
<xsd:enumeration value="thick"/>
|
||||||
|
<xsd:enumeration value="double"/>
|
||||||
|
<xsd:enumeration value="hairline"/>
|
||||||
|
<xsd:enumeration value="dot"/>
|
||||||
|
<xsd:enumeration value="dash"/>
|
||||||
|
<xsd:enumeration value="dotDash"/>
|
||||||
|
<xsd:enumeration value="dashDotDot"/>
|
||||||
|
<xsd:enumeration value="triple"/>
|
||||||
|
<xsd:enumeration value="thinThickSmall"/>
|
||||||
|
<xsd:enumeration value="thickThinSmall"/>
|
||||||
|
<xsd:enumeration value="thickBetweenThinSmall"/>
|
||||||
|
<xsd:enumeration value="thinThick"/>
|
||||||
|
<xsd:enumeration value="thickThin"/>
|
||||||
|
<xsd:enumeration value="thickBetweenThin"/>
|
||||||
|
<xsd:enumeration value="thinThickLarge"/>
|
||||||
|
<xsd:enumeration value="thickThinLarge"/>
|
||||||
|
<xsd:enumeration value="thickBetweenThinLarge"/>
|
||||||
|
<xsd:enumeration value="wave"/>
|
||||||
|
<xsd:enumeration value="doubleWave"/>
|
||||||
|
<xsd:enumeration value="dashedSmall"/>
|
||||||
|
<xsd:enumeration value="dashDotStroked"/>
|
||||||
|
<xsd:enumeration value="threeDEmboss"/>
|
||||||
|
<xsd:enumeration value="threeDEngrave"/>
|
||||||
|
<xsd:enumeration value="HTMLOutset"/>
|
||||||
|
<xsd:enumeration value="HTMLInset"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_BorderShadow">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="t"/>
|
||||||
|
<xsd:enumeration value="true"/>
|
||||||
|
<xsd:enumeration value="f"/>
|
||||||
|
<xsd:enumeration value="false"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_WrapType">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="topAndBottom"/>
|
||||||
|
<xsd:enumeration value="square"/>
|
||||||
|
<xsd:enumeration value="none"/>
|
||||||
|
<xsd:enumeration value="tight"/>
|
||||||
|
<xsd:enumeration value="through"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_WrapSide">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="both"/>
|
||||||
|
<xsd:enumeration value="left"/>
|
||||||
|
<xsd:enumeration value="right"/>
|
||||||
|
<xsd:enumeration value="largest"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_HorizontalAnchor">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="margin"/>
|
||||||
|
<xsd:enumeration value="page"/>
|
||||||
|
<xsd:enumeration value="text"/>
|
||||||
|
<xsd:enumeration value="char"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:simpleType name="ST_VerticalAnchor">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="margin"/>
|
||||||
|
<xsd:enumeration value="page"/>
|
||||||
|
<xsd:enumeration value="text"/>
|
||||||
|
<xsd:enumeration value="line"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
</xsd:schema>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,116 @@
|
|||||||
|
<?xml version='1.0'?>
|
||||||
|
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en">
|
||||||
|
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>
|
||||||
|
See http://www.w3.org/XML/1998/namespace.html and
|
||||||
|
http://www.w3.org/TR/REC-xml for information about this namespace.
|
||||||
|
|
||||||
|
This schema document describes the XML namespace, in a form
|
||||||
|
suitable for import by other schema documents.
|
||||||
|
|
||||||
|
Note that local names in this namespace are intended to be defined
|
||||||
|
only by the World Wide Web Consortium or its subgroups. The
|
||||||
|
following names are currently defined in this namespace and should
|
||||||
|
not be used with conflicting semantics by any Working Group,
|
||||||
|
specification, or document instance:
|
||||||
|
|
||||||
|
base (as an attribute name): denotes an attribute whose value
|
||||||
|
provides a URI to be used as the base for interpreting any
|
||||||
|
relative URIs in the scope of the element on which it
|
||||||
|
appears; its value is inherited. This name is reserved
|
||||||
|
by virtue of its definition in the XML Base specification.
|
||||||
|
|
||||||
|
lang (as an attribute name): denotes an attribute whose value
|
||||||
|
is a language code for the natural language of the content of
|
||||||
|
any element; its value is inherited. This name is reserved
|
||||||
|
by virtue of its definition in the XML specification.
|
||||||
|
|
||||||
|
space (as an attribute name): denotes an attribute whose
|
||||||
|
value is a keyword indicating what whitespace processing
|
||||||
|
discipline is intended for the content of the element; its
|
||||||
|
value is inherited. This name is reserved by virtue of its
|
||||||
|
definition in the XML specification.
|
||||||
|
|
||||||
|
Father (in any context at all): denotes Jon Bosak, the chair of
|
||||||
|
the original XML Working Group. This name is reserved by
|
||||||
|
the following decision of the W3C XML Plenary and
|
||||||
|
XML Coordination groups:
|
||||||
|
|
||||||
|
In appreciation for his vision, leadership and dedication
|
||||||
|
the W3C XML Plenary on this 10th day of February, 2000
|
||||||
|
reserves for Jon Bosak in perpetuity the XML name
|
||||||
|
xml:Father
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>This schema defines attributes and an attribute group
|
||||||
|
suitable for use by
|
||||||
|
schemas wishing to allow xml:base, xml:lang or xml:space attributes
|
||||||
|
on elements they define.
|
||||||
|
|
||||||
|
To enable this, such a schema must import this schema
|
||||||
|
for the XML namespace, e.g. as follows:
|
||||||
|
<schema . . .>
|
||||||
|
. . .
|
||||||
|
<import namespace="http://www.w3.org/XML/1998/namespace"
|
||||||
|
schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
|
||||||
|
|
||||||
|
Subsequently, qualified reference to any of the attributes
|
||||||
|
or the group defined below will have the desired effect, e.g.
|
||||||
|
|
||||||
|
<type . . .>
|
||||||
|
. . .
|
||||||
|
<attributeGroup ref="xml:specialAttrs"/>
|
||||||
|
|
||||||
|
will define a type which will schema-validate an instance
|
||||||
|
element with any of those attributes</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>In keeping with the XML Schema WG's standard versioning
|
||||||
|
policy, this schema document will persist at
|
||||||
|
http://www.w3.org/2001/03/xml.xsd.
|
||||||
|
At the date of issue it can also be found at
|
||||||
|
http://www.w3.org/2001/xml.xsd.
|
||||||
|
The schema document at that URI may however change in the future,
|
||||||
|
in order to remain compatible with the latest version of XML Schema
|
||||||
|
itself. In other words, if the XML Schema namespace changes, the version
|
||||||
|
of this document at
|
||||||
|
http://www.w3.org/2001/xml.xsd will change
|
||||||
|
accordingly; the version at
|
||||||
|
http://www.w3.org/2001/03/xml.xsd will not change.
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
|
||||||
|
<xs:attribute name="lang" type="xs:language">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>In due course, we should install the relevant ISO 2- and 3-letter
|
||||||
|
codes as the enumerated possible values . . .</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
|
||||||
|
<xs:attribute name="space" default="preserve">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:NCName">
|
||||||
|
<xs:enumeration value="default"/>
|
||||||
|
<xs:enumeration value="preserve"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:attribute>
|
||||||
|
|
||||||
|
<xs:attribute name="base" type="xs:anyURI">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>See http://www.w3.org/TR/xmlbase/ for
|
||||||
|
information about this attribute.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
|
||||||
|
<xs:attributeGroup name="specialAttrs">
|
||||||
|
<xs:attribute ref="xml:base"/>
|
||||||
|
<xs:attribute ref="xml:lang"/>
|
||||||
|
<xs:attribute ref="xml:space"/>
|
||||||
|
</xs:attributeGroup>
|
||||||
|
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<xs:schema xmlns="http://schemas.openxmlformats.org/package/2006/content-types"
|
||||||
|
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/package/2006/content-types"
|
||||||
|
elementFormDefault="qualified" attributeFormDefault="unqualified" blockDefault="#all">
|
||||||
|
|
||||||
|
<xs:element name="Types" type="CT_Types"/>
|
||||||
|
<xs:element name="Default" type="CT_Default"/>
|
||||||
|
<xs:element name="Override" type="CT_Override"/>
|
||||||
|
|
||||||
|
<xs:complexType name="CT_Types">
|
||||||
|
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:element ref="Default"/>
|
||||||
|
<xs:element ref="Override"/>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="CT_Default">
|
||||||
|
<xs:attribute name="Extension" type="ST_Extension" use="required"/>
|
||||||
|
<xs:attribute name="ContentType" type="ST_ContentType" use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="CT_Override">
|
||||||
|
<xs:attribute name="ContentType" type="ST_ContentType" use="required"/>
|
||||||
|
<xs:attribute name="PartName" type="xs:anyURI" use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:simpleType name="ST_ContentType">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern
|
||||||
|
value="(((([\p{IsBasicLatin}-[\p{Cc}\(\)<>@,;:\\"/\[\]\?=\{\}\s\t]])+))/((([\p{IsBasicLatin}-[\p{Cc}\(\)<>@,;:\\"/\[\]\?=\{\}\s\t]])+))((\s+)*;(\s+)*(((([\p{IsBasicLatin}-[\p{Cc}\(\)<>@,;:\\"/\[\]\?=\{\}\s\t]])+))=((([\p{IsBasicLatin}-[\p{Cc}\(\)<>@,;:\\"/\[\]\?=\{\}\s\t]])+)|("(([\p{IsLatin-1Supplement}\p{IsBasicLatin}-[\p{Cc}"\n\r]]|(\s+))|(\\[\p{IsBasicLatin}]))*"))))*)"
|
||||||
|
/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="ST_Extension">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern
|
||||||
|
value="([!$&'\(\)\*\+,:=]|(%[0-9a-fA-F][0-9a-fA-F])|[:@]|[a-zA-Z0-9\-_~])+"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<xs:schema targetNamespace="http://schemas.openxmlformats.org/package/2006/metadata/core-properties"
|
||||||
|
xmlns="http://schemas.openxmlformats.org/package/2006/metadata/core-properties"
|
||||||
|
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:dcterms="http://purl.org/dc/terms/" elementFormDefault="qualified" blockDefault="#all">
|
||||||
|
|
||||||
|
<xs:import namespace="http://purl.org/dc/elements/1.1/"
|
||||||
|
schemaLocation="http://dublincore.org/schemas/xmls/qdc/2003/04/02/dc.xsd"/>
|
||||||
|
<xs:import namespace="http://purl.org/dc/terms/"
|
||||||
|
schemaLocation="http://dublincore.org/schemas/xmls/qdc/2003/04/02/dcterms.xsd"/>
|
||||||
|
<xs:import id="xml" namespace="http://www.w3.org/XML/1998/namespace"/>
|
||||||
|
|
||||||
|
<xs:element name="coreProperties" type="CT_CoreProperties"/>
|
||||||
|
|
||||||
|
<xs:complexType name="CT_CoreProperties">
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="category" minOccurs="0" maxOccurs="1" type="xs:string"/>
|
||||||
|
<xs:element name="contentStatus" minOccurs="0" maxOccurs="1" type="xs:string"/>
|
||||||
|
<xs:element ref="dcterms:created" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xs:element ref="dc:creator" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xs:element ref="dc:description" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xs:element ref="dc:identifier" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xs:element name="keywords" minOccurs="0" maxOccurs="1" type="CT_Keywords"/>
|
||||||
|
<xs:element ref="dc:language" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xs:element name="lastModifiedBy" minOccurs="0" maxOccurs="1" type="xs:string"/>
|
||||||
|
<xs:element name="lastPrinted" minOccurs="0" maxOccurs="1" type="xs:dateTime"/>
|
||||||
|
<xs:element ref="dcterms:modified" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xs:element name="revision" minOccurs="0" maxOccurs="1" type="xs:string"/>
|
||||||
|
<xs:element ref="dc:subject" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xs:element ref="dc:title" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xs:element name="version" minOccurs="0" maxOccurs="1" type="xs:string"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="CT_Keywords" mixed="true">
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="value" minOccurs="0" maxOccurs="unbounded" type="CT_Keyword"/>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute ref="xml:lang" use="optional"/>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="CT_Keyword">
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="xs:string">
|
||||||
|
<xs:attribute ref="xml:lang" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<xsd:schema xmlns="http://schemas.openxmlformats.org/package/2006/digital-signature"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/package/2006/digital-signature"
|
||||||
|
elementFormDefault="qualified" attributeFormDefault="unqualified" blockDefault="#all">
|
||||||
|
|
||||||
|
<xsd:element name="SignatureTime" type="CT_SignatureTime"/>
|
||||||
|
<xsd:element name="RelationshipReference" type="CT_RelationshipReference"/>
|
||||||
|
<xsd:element name="RelationshipsGroupReference" type="CT_RelationshipsGroupReference"/>
|
||||||
|
|
||||||
|
<xsd:complexType name="CT_SignatureTime">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Format" type="ST_Format"/>
|
||||||
|
<xsd:element name="Value" type="ST_Value"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:complexType name="CT_RelationshipReference">
|
||||||
|
<xsd:simpleContent>
|
||||||
|
<xsd:extension base="xsd:string">
|
||||||
|
<xsd:attribute name="SourceId" type="xsd:string" use="required"/>
|
||||||
|
</xsd:extension>
|
||||||
|
</xsd:simpleContent>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:complexType name="CT_RelationshipsGroupReference">
|
||||||
|
<xsd:simpleContent>
|
||||||
|
<xsd:extension base="xsd:string">
|
||||||
|
<xsd:attribute name="SourceType" type="xsd:anyURI" use="required"/>
|
||||||
|
</xsd:extension>
|
||||||
|
</xsd:simpleContent>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:simpleType name="ST_Format">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:pattern
|
||||||
|
value="(YYYY)|(YYYY-MM)|(YYYY-MM-DD)|(YYYY-MM-DDThh:mmTZD)|(YYYY-MM-DDThh:mm:ssTZD)|(YYYY-MM-DDThh:mm:ss.sTZD)"
|
||||||
|
/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
|
||||||
|
<xsd:simpleType name="ST_Value">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:pattern
|
||||||
|
value="(([0-9][0-9][0-9][0-9]))|(([0-9][0-9][0-9][0-9])-((0[1-9])|(1(0|1|2))))|(([0-9][0-9][0-9][0-9])-((0[1-9])|(1(0|1|2)))-((0[1-9])|(1[0-9])|(2[0-9])|(3(0|1))))|(([0-9][0-9][0-9][0-9])-((0[1-9])|(1(0|1|2)))-((0[1-9])|(1[0-9])|(2[0-9])|(3(0|1)))T((0[0-9])|(1[0-9])|(2(0|1|2|3))):((0[0-9])|(1[0-9])|(2[0-9])|(3[0-9])|(4[0-9])|(5[0-9]))(((\+|-)((0[0-9])|(1[0-9])|(2(0|1|2|3))):((0[0-9])|(1[0-9])|(2[0-9])|(3[0-9])|(4[0-9])|(5[0-9])))|Z))|(([0-9][0-9][0-9][0-9])-((0[1-9])|(1(0|1|2)))-((0[1-9])|(1[0-9])|(2[0-9])|(3(0|1)))T((0[0-9])|(1[0-9])|(2(0|1|2|3))):((0[0-9])|(1[0-9])|(2[0-9])|(3[0-9])|(4[0-9])|(5[0-9])):((0[0-9])|(1[0-9])|(2[0-9])|(3[0-9])|(4[0-9])|(5[0-9]))(((\+|-)((0[0-9])|(1[0-9])|(2(0|1|2|3))):((0[0-9])|(1[0-9])|(2[0-9])|(3[0-9])|(4[0-9])|(5[0-9])))|Z))|(([0-9][0-9][0-9][0-9])-((0[1-9])|(1(0|1|2)))-((0[1-9])|(1[0-9])|(2[0-9])|(3(0|1)))T((0[0-9])|(1[0-9])|(2(0|1|2|3))):((0[0-9])|(1[0-9])|(2[0-9])|(3[0-9])|(4[0-9])|(5[0-9])):(((0[0-9])|(1[0-9])|(2[0-9])|(3[0-9])|(4[0-9])|(5[0-9]))\.[0-9])(((\+|-)((0[0-9])|(1[0-9])|(2(0|1|2|3))):((0[0-9])|(1[0-9])|(2[0-9])|(3[0-9])|(4[0-9])|(5[0-9])))|Z))"
|
||||||
|
/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<xsd:schema xmlns="http://schemas.openxmlformats.org/package/2006/relationships"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/package/2006/relationships"
|
||||||
|
elementFormDefault="qualified" attributeFormDefault="unqualified" blockDefault="#all">
|
||||||
|
|
||||||
|
<xsd:element name="Relationships" type="CT_Relationships"/>
|
||||||
|
<xsd:element name="Relationship" type="CT_Relationship"/>
|
||||||
|
|
||||||
|
<xsd:complexType name="CT_Relationships">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element ref="Relationship" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:complexType name="CT_Relationship">
|
||||||
|
<xsd:simpleContent>
|
||||||
|
<xsd:extension base="xsd:string">
|
||||||
|
<xsd:attribute name="TargetMode" type="ST_TargetMode" use="optional"/>
|
||||||
|
<xsd:attribute name="Target" type="xsd:anyURI" use="required"/>
|
||||||
|
<xsd:attribute name="Type" type="xsd:anyURI" use="required"/>
|
||||||
|
<xsd:attribute name="Id" type="xsd:ID" use="required"/>
|
||||||
|
</xsd:extension>
|
||||||
|
</xsd:simpleContent>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:simpleType name="ST_TargetMode">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="External"/>
|
||||||
|
<xsd:enumeration value="Internal"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
</xsd:schema>
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsd:schema xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
attributeFormDefault="unqualified" elementFormDefault="qualified"
|
||||||
|
targetNamespace="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This XSD is a modified version of the one found at:
|
||||||
|
https://github.com/plutext/docx4j/blob/master/xsd/mce/markup-compatibility-2006-MINIMAL.xsd
|
||||||
|
|
||||||
|
This XSD has 2 objectives:
|
||||||
|
|
||||||
|
1. round tripping @mc:Ignorable
|
||||||
|
|
||||||
|
<w:document
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
|
||||||
|
mc:Ignorable="w14 w15 wp14">
|
||||||
|
|
||||||
|
2. enabling AlternateContent to be manipulated in certain elements
|
||||||
|
(in the unusual case where the content model is xsd:any, it doesn't have to be explicitly added)
|
||||||
|
|
||||||
|
See further ECMA-376, 4th Edition, Office Open XML File Formats
|
||||||
|
Part 3 : Markup Compatibility and Extensibility
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Objective 1 -->
|
||||||
|
<xsd:attribute name="Ignorable" type="xsd:string" />
|
||||||
|
|
||||||
|
<!-- Objective 2 -->
|
||||||
|
<xsd:attribute name="MustUnderstand" type="xsd:string" />
|
||||||
|
<xsd:attribute name="ProcessContent" type="xsd:string" />
|
||||||
|
|
||||||
|
<!-- An AlternateContent element shall contain one or more Choice child elements, optionally followed by a
|
||||||
|
Fallback child element. If present, there shall be only one Fallback element, and it shall follow all Choice
|
||||||
|
elements. -->
|
||||||
|
<xsd:element name="AlternateContent">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Choice" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:any minOccurs="0" maxOccurs="unbounded"
|
||||||
|
processContents="strict">
|
||||||
|
</xsd:any>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="Requires" type="xsd:string" use="required" />
|
||||||
|
<xsd:attribute ref="mc:Ignorable" use="optional" />
|
||||||
|
<xsd:attribute ref="mc:MustUnderstand" use="optional" />
|
||||||
|
<xsd:attribute ref="mc:ProcessContent" use="optional" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="Fallback" minOccurs="0" maxOccurs="1">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:any minOccurs="0" maxOccurs="unbounded"
|
||||||
|
processContents="strict">
|
||||||
|
</xsd:any>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute ref="mc:Ignorable" use="optional" />
|
||||||
|
<xsd:attribute ref="mc:MustUnderstand" use="optional" />
|
||||||
|
<xsd:attribute ref="mc:ProcessContent" use="optional" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
<!-- AlternateContent elements might include the attributes Ignorable,
|
||||||
|
MustUnderstand and ProcessContent described in this Part of ECMA-376. These
|
||||||
|
attributes’ qualified names shall be prefixed when associated with an AlternateContent
|
||||||
|
element. -->
|
||||||
|
<xsd:attribute ref="mc:Ignorable" use="optional" />
|
||||||
|
<xsd:attribute ref="mc:MustUnderstand" use="optional" />
|
||||||
|
<xsd:attribute ref="mc:ProcessContent" use="optional" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user