OPC统一架构的XML Schema是什么

发布时间 - 2025-12-31 00:00:00    点击率:
OPC UA的XML Schema是,命名空间为http://opcfoundation.org/UA/2011/03/UANodeSet.xsd,专用于地址空间节点导入导出,非通用XSD;必须严格声明命名空间,uax前缀引用基础类型,NodeId需全局唯一,NodeSet描述节点实例而非类型定义。

OPC UA 的 XML Schema 是 ,其命名空间为 http://opcfoundation.org/UA/2011/03/UANodeSet.xsd。这是 OPC Foundation 官方定义的、用于序列化地址空间结构的标准 XML 格式,不是通用 XSD 模式文件,而是专用于导入/导出节点定义(对象、变量、方法、引用等)的交换格式。

它不用于校验任意 XML,也不能直接用作 Python 或 C 的类型定义;它的作用是让不同 UA 工具(如 UaModeler、Prosys OPC UA Simulation Server、FreeOpcUa 的 import_xml())能互相理解地址空间拓扑。


XML Schema 命名空间与根元素必须严格匹配

如果你写一个 XML 文件想被 UA 工具识别为有效 NodeSet, 标签必须声明正确的命名空间,否则导入会失败或静默忽略节点:



  
  • xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" → 大部分工具报“not a valid NodeSet”或直接跳过解析
  • uax: 前缀用于引用基础数据类型(如 uax:Int32, uax:String),必须声明且路径不能错
  • 版本号嵌在 URL 里(如 2011/03),不是随便改的;新版 UA 规范仍沿用此命名空间(兼容性设计)

NodeSet XML 不是配置文件,而是节点“快照”

它描述的是节点实例(instance),不是模板或类型定义(TypeDefinition)。例如:

  • 你导出一个 UAVariable 节点,它包含 42 → 导入后该变量初始值就是 42
  • 但如果你只想要“定义一个整型变量类型”,得用 UADataType + UAVariableType,而非常见的 UAVariable
  • 所有 NodeId 必须全局唯一且符合 UA 编码规则(如 i=85, s=MyDevice.Temperature, g=123e4567-e89b-12d3-a456-426614174000);重复或非法格式会导致导入中断

Python FreeOpcUa 中 import_xml() 的典型坑

server.import_xml("mynodes.xml") 加载时,常见失败原因不是语法错,而是语义错:

  • ParentNodeId 指向一个不存在的节点(比如写成 i=84,但 UA 标准对象文件没加载,也没手动创建)→ 报 BadNotFound 错误
  • ReferenceType 写错,例如该用 HasComponent 却写了 HasProperty → 节点创建成功但关系丢失,浏览时看不到子节点
  • 没提前调用 server.load_type_definitions() 就导入含自定义类型(UADataType)的 XML → 类型无法解析,变量创建失败
  • XML 中用了 uax:DateTime 但值格式不是 ISO 8601(如 2025-12-25T20:30:00Z)→ 解析失败,静默跳过该变量

别指望用浏览器打开 .xsd 查看结构

那个 URL http://opcfoundation.org/UA/2011/03/UANodeSet.xsd 是一个逻辑命名空间标识符,并非可公开访问的 HTTP 地址。你无法 curl 或浏览器打开它获取 XSD 文件——它只是告诉解析器:“按 OPC UA 第 5 部分(Information Model)第 7 节约定来解释这个 XML”。真正的结构定义藏在 OPC UA 规范 Part 5: Information Model 的附录中。

实际开发中,最靠谱的参考方式是:用 UaModeler 导出一个简单节点树,再对比其生成的 XML,而不是从零手写 Schema —— 手写极易漏掉必需字段(如 NodeClassModellingRule)或引用方向(IsForward="true" vs false)。


# python  # node  # 编码  # 浏览器  # 工具  # curl  # 配置文件  # typedef  # 2025 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么判断请求类型_Laravel Request isMethod用法  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  JavaScript如何实现音频处理_Web Audio API如何工作?  高防服务器租用如何选择配置与防御等级?  再谈Python中的字符串与字符编码(推荐)  如何在服务器上三步完成建站并提升流量?  新三国志曹操传主线渭水交兵攻略  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  如何快速启动建站代理加盟业务?  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Laravel如何配置和使用缓存?(Redis代码示例)  如何在阿里云部署织梦网站?  详解Android——蓝牙技术 带你实现终端间数据传输  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  微信小程序 配置文件详细介绍  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  如何在宝塔面板中修改默认建站目录?  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何确认建站备案号应放置的具体位置?  北京的网站制作公司有哪些,哪个视频网站最好?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Laravel怎么在Blade中安全地输出原始HTML内容  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  网站图片在线制作软件,怎么在图片上做链接?  智能起名网站制作软件有哪些,制作logo的软件?  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  如何快速重置建站主机并恢复默认配置?  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  Laravel如何使用Sanctum进行API认证?(SPA实战)  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  如何用免费手机建站系统零基础打造专业网站?  如何在香港服务器上快速搭建免备案网站?  如何快速查询域名建站关键信息?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  PHP正则匹配日期和时间(时间戳转换)的实例代码  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Internet Explorer官网直接进入 IE浏览器在线体验版网址  详解CentOS6.5 安装 MySQL5.1.71的方法  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  jQuery中的100个技巧汇总  Laravel模型事件有哪些_Laravel Model Event生命周期详解