louistrue/ids-flow
GitHub: louistrue/ids-flow
一款基于浏览器的拖放式可视化编辑器,用于创建、验证和导出符合 buildingSMART 标准的 IDS(信息交付规范)XML 文件。
Stars: 26 | Forks: 1
# IDS 编辑
一个可视化的编辑器,用于创建信息交付规范 (IDS) 文件,并带有自动验证功能。
## 功能
- **可视化图形编辑器**:通过拖放界面创建 IDS 规范
- **实时验证**:通过浏览器中的 [`@ifc-lite/ids`](https://www.npmjs.com/package/@ifc-lite/ids) 自动进行 IDS 验证 —— 无需后端
- **多种节点类型**:支持所有 IDS facet 类型(Entity、Property、Attribute、Classification、Material、PartOf、Restriction)
- **模板系统**:预置的规范模板
- **导出/导入**:保存和加载画布配置
- **IDS XML 导出**:生成合规的 IDS XML 文件
## 设置
1. **克隆仓库**
git clone
cd idsedit
2. **安装依赖**
npm install
3. **运行开发服务器**
npm run dev
在浏览器中打开 [http://localhost:3000](http://localhost:3000)。
## IDS 验证
验证完全在浏览器中使用 [`@ifc-lite/ids`](https://www.npmjs.com/package/@ifc-lite/ids) 运行:
- **自动验证**:在您停止编辑 2 秒后进行验证
- **手动验证**:点击画布覆盖层或 Inspector Panel 上的“重新验证”
- **状态指示器**:
- 🟢 有效的 IDS —— 没有问题
- 🟠 警告 —— 非阻塞性问题
- 🔴 无效 —— 解析错误或阻塞性的客户端问题
## 用法
1. **创建规范**:从面板中添加一个规范节点
2. **添加适用性**:将 entity、classification 或其他 facet 节点连接到规范的适用性句柄
3. **添加要求**:将 property、attribute 或其他 facet 节点连接到规范的要求句柄
4. **配置节点**:选择节点以在 Inspector Panel 中编辑其属性
5. **验证**:系统会自动验证您的 IDS 结构
6. **导出**:使用导出按钮将您的 IDS 下载为 XML
## 节点类型
- **Specification**:IDS 规范的主容器
- **Entity**:IFC entity 类型(例如 IfcWall、IfcDoor)
- **Property**:属性集和属性
- **Attribute**:IFC attributes(Name、Description 等)
- **Classification**:分类系统(Uniclass、ETIM 等)
- **Material**:材质规范
- **PartOf**:空间关系
- **Restriction**:值约束(enumeration、pattern、bounds、length)
## 开发
### 项目结构
```
├── app/ # Next.js app directory
├── components/ # React components
│ ├── enumeration-editors/ # Specialized editors
│ ├── nodes/ # Node type components
│ └── ui/ # UI components
├── lib/ # Utilities and types
├── ids-docs/ # IDS documentation
└── public/ # Static assets
```
### 关键文件
- `components/specification-editor.tsx` - 主编辑器组件
- `components/inspector-panel.tsx` - 属性编辑器和验证显示
- `components/canvas-validation-overlay.tsx` - 画布级别的验证状态
- `lib/ids-xml-converter.ts` - 图形到 IDS XML 的转换
- `lib/use-ids-validation.ts` - 验证 hook(由 `@ifc-lite/ids` 提供支持)
- `lib/ids-validation-service.ts` - `@ifc-lite/ids` 中 `parseIDS` 的封装
### 添加新节点类型
1. 在 `components/nodes/` 中创建节点组件
2. 将节点类型添加到 `lib/graph-types.ts`
3. 更新 `specification-editor.tsx` 中的 `getDefaultNodeData()`
4. 在 `inspector-panel.tsx` 中添加字段编辑器
5. 更新 `ids-xml-converter.ts` 中的 XML 转换器
## 部署
该应用程序旨在部署在 Vercel 上:
1. **部署**:推送到您的主分支以触发部署
无需后端或环境变量 —— 验证在浏览器中运行。
## 贡献
1. Fork 该仓库
2. 创建一个功能分支
3. 进行您的更改
4. 彻底测试
5. 提交一个 pull request
## 许可证
AGPL-3 许可证
标签:BIM, XML, 可视化编辑器, 拖拽式, 自动化攻击