Map construction data to standard ontologies. Create semantic mappings between different data schemas"
基于DDC方法论(第2.2章),该技能将建筑数据映射到IFC、COBie、Uniclass和OmniClass等标准本体,实现系统间的语义互操作性。
参考书籍: Доминирование открытых данных / 开放数据主导
python
from dataclasses import dataclass, field
from enum import Enum
from typing import List, Dict, Optional, Set, Tuple
from datetime import datetime
import json
import re
class OntologyType(Enum):
标准建筑本体
IFC = ifc # 工业基础类
COBIE = cobie # 建筑运维信息交换
UNICLASS = uniclass # 英国分类体系
OMNICLASS = omniclass # 北美分类体系
MASTERFORMAT = masterformat # CSI MasterFormat
UNIFORMAT = uniformat # CSI UniFormat
CUSTOM = custom # 自定义本体
class MappingConfidence(Enum):
映射置信度
EXACT = exact # 100%匹配
HIGH = high # 90%以上匹配
MEDIUM = medium # 70-90%匹配
LOW = low # 50-70%匹配
UNCERTAIN = uncertain # 低于50%匹配
class RelationType(Enum):
概念间关系类型
EQUIVALENT = equivalent # 相同概念
BROADER = broader # 源概念更具体
NARROWER = narrower # 源概念更通用
RELATED = related # 相关但不相等
PARTOF = partof # 组成部分关系
HASPART = haspart # 包含组成部分
@dataclass
class OntologyConcept:
本体中的概念
id: str
name: str
ontology: OntologyType
definition: Optional[str] = None
parent_id: Optional[str] = None
synonyms: List[str] = field(default_factory=list)
properties: Dict[str, str] = field(default_factory=dict)
@dataclass
class SemanticMapping:
两个概念之间的映射
source_concept: str
source_ontology: OntologyType
target_concept: str
target_ontology: OntologyType
relation: RelationType
confidence: MappingConfidence
notes: Optional[str] = None
created_by: str = auto
createdat: datetime = field(defaultfactory=datetime.now)
@dataclass
class MappingResult:
本体映射操作结果
source_field: str
source_value: str
mappings: List[SemanticMapping]
best_match: Optional[SemanticMapping] = None
unmapped: bool = False
@dataclass
class OntologyMappingReport:
完整映射报告
total_fields: int
mapped_fields: int
unmapped_fields: int
mappings: List[MappingResult]
coverage: float
confidence_distribution: Dict[str, int]
recommendations: List[str]
class OntologyMapper:
将建筑数据映射到标准本体。
基于DDC方法论第2.2章。
def init(self):
self.ontologies = self.loadontologies()
self.mappingrules = self.loadmappingrules()
self.synonymmap = self.buildsynonymmap()
def loadontologies(self) -> Dict[OntologyType, Dict[str, OntologyConcept]]:
加载标准建筑本体
ontologies = {}
# IFC模式(简化版)
ontologies[OntologyType.IFC] = {
IfcWall: OntologyConcept(IfcWall, 墙体, OntologyType.IFC,
用于围合或分隔空间的垂直构造),
IfcSlab: OntologyConcept(IfcSlab, 楼板, OntologyType.IFC,
水平平面建筑构件),
IfcBeam: OntologyConcept(IfcBeam, 梁, OntologyType.IFC,
水平结构构件),
IfcColumn: OntologyConcept(IfcColumn, 柱, OntologyType.IFC,
垂直结构构件),
IfcDoor: OntologyConcept(IfcDoor, 门, OntologyType.IFC,
用于出入的建筑构件),
IfcWindow: OntologyConcept(IfcWindow, 窗, OntologyType.IFC,
用于采光和通风的建筑构件),
IfcRoof: OntologyConcept(IfcRoof, 屋顶, OntologyType.IFC,
覆盖建筑的建筑构件),
IfcStair: OntologyConcept(IfcStair, 楼梯, OntologyType.IFC,
垂直交通构件),
IfcSpace: OntologyConcept(IfcSpace, 空间, OntologyType.IFC,
定义的空气体积),
IfcBuildingStorey: OntologyConcept(IfcBuildingStorey, 建筑楼层,
OntologyType.IFC, 空间的水平聚合),
}
# COBie(简化版)
ontologies[OntologyType.COBIE] = {
Floor: OntologyConcept(Floor, 楼层, OntologyType.COBIE,
建筑中的楼层或标高),
Space: OntologyConcept(Space, 空间, OntologyType.COBIE,
空间区域),
Type: OntologyConcept(Type, 类型, OntologyType.COBIE,
产品类型或规格),
Component: OntologyConcept(Component, 构件, OntologyType.COBIE,
单个产品实例),
Zone: OntologyConcept(Zone, 区域, OntologyType.COBIE,
空间的区域分组),
System: OntologyConcept(System, 系统, OntologyType.COBIE,
建筑系统或网络),
}
# Uniclass(简化版)
ontologies[OntologyType.UNICLASS] = {
Ss25: OntologyConcept(Ss25, 墙体系统, OntologyType.UNICLASS),
Ss30: OntologyConcept(Ss30, 屋顶系统, OntologyType.UNICLASS),
Ss32: OntologyConcept(Ss32, 楼板系统, OntologyType.UNICLASS),
Ss35: OntologyConcept(Ss35, 楼梯系统, OntologyType.UNICLASS),
Pr20: OntologyConcept(Pr20, 结构产品, OntologyType.UNICLASS),
Pr30: OntologyConcept(Pr30, 墙体产品, OntologyType.UNICLASS),
Pr35: OntologyConcept(Pr35, 门产品, OntologyType.UNICLASS),
Pr40: OntologyConcept(Pr40, 窗产品, OntologyType.UNICLASS),
}
# MasterFormat(简化版)
ontologies[OntologyType.MASTERFORMAT] = {
03: OntologyConcept(03, 混凝土, OntologyType.MASTERFORMAT),
04: OntologyConcept(04, 砌体, OntologyType.MASTERFORMAT),
05: OntologyConcept(05, 金属, OntologyType.MASTERFORMAT),
06: OntologyConcept(06, 木材和塑料, OntologyType.MASTERFORMAT),
07: OntologyConcept(07, 保温和防潮, OntologyType.MASTERFORMAT),
08: OntologyConcept(08, 门和窗, OntologyType.MASTERFORMAT),
09: OntologyConcept(09, 饰面, OntologyType.MASTERFORMAT),
22: OntologyConcept(22, 给排水, OntologyType.MASTERFORMAT),
23: OntologyConcept(23, 暖通空调, OntologyType.MASTERFORMAT),
26: OntologyConcept(26, 电气, OntologyType.MASTERFORMAT),
}
return ontologies
def loadmapping_rules(self) -> List[SemanticMapping]:
加载本体间的预定义映射规则
rules = [
# IFC到COBie
SemanticMapping(IfcBuildingStorey, OntologyType.IFC, Floor,
OntologyType.COBIE, RelationType.EQUIVALENT, MappingConfidence.EXACT),
SemanticMapping(IfcSpace, OntologyType.IFC, Space,
OntologyType.COBIE,
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 ontology-mapper-1776344943 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 ontology-mapper-1776344943 技能
skillhub install ontology-mapper-1776344943
文件大小: 7.29 KB | 发布时间: 2026-4-17 16:23