XML 的命名空间及其在OPCUA中的应用

news2024/9/20 5:51:43

        为了防止不同XML 使用的名称冲突,XML 规范中规定的命名空间,平时编写单一命名空间的XML 文档,没有过多地注意XML 命名空间的细节。当开发OPCUA 信息模型时,被命名空间搞得云里雾里。为此,做了一个笔记。

URI(Uniform Resource Identifiers)统一资源标志符

    统一资源标志符(英语:Uniform Resource Identifier,缩写:URI)在电脑术语中是用于标志某一互联网资源名称的字符串。

我们知道,通常将网址称为URL,比如

string url = "https://www.csdn.com“

那么URL 与URI 有什么区别呢?它们是如此定义的。

  • URI(Uniform Resource Identifier,统一资源标识符)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对网络中(一般指万维网)的资源通过特定的协议进行交互操作。
  • URL(Uniform Resource Locator,统一资源定位符),最常见的形式是 URI,经常指定为非正式的网址。

URI 本质上是一种标识符的命名方式,从这种命名中可以直观地了解相关信息。它的语法为

 例子:

https://opcua.rocks/UA/animal/

     值得注意的是这是一个URI ,并不意味着可以在https://opcua.rocks/UA/animal/网站上可以找到该资源。

    同时,URL 可以是URI 的子集,这些 URI 通过其网络位置标识资源。它们还指定了检索资源的机制。例如,网址:

http://example.org/wiki/Main_Page

      指资源 /wiki/Main_Page。资源采用 HTML 格式,可通过超文本传输协议 (http:) 从名为 example.org 的网络主机获取。

无论无何,你可以将URI 看作一个携带某些信息的标识符就好了。在XML 文本中,有各种NameSpaceURI ,它们并不是网址。

XML 命名空间(xmlns)

 xmlns就是xml nameSpace的缩写,即xml的命名空间。在XML 文件中有许多xmlns 的属性,用来标识命名空间的信息,例如

<?xml version="1.0" encoding="utf-8"?>

<ModelDesign
        xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ua="http://opcfoundation.org/UA/"
        xmlns:ANIMAL="https://opcua.rocks/UA/animal/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        TargetNamespace="https://opcua.rocks/UA/animal/"
        TargetXmlNamespace="https://opcua.rocks/UA/animal/"
        TargetVersion="0.9.0"
        TargetPublicationDate="2019-04-01T00:00:00Z"
        xmlns="http://opcfoundation.org/UA/ModelDesign.xsd"/>

为什么需要命名空间

多个文档描述资源时,可能出现名称的冲突,例如下面两个xml 文档

第一个

<table>
  <tr>
    <td>Apples</td>
    <td>Bananas</td>
  </tr>
</table>

第二个

<table>
  <name>African Coffee Table</name>
  <width>80</width>
  <length>120</length>
</table>

这两个文档中同样使用<table> 标签,但是一个标识表格,一个标识咖啡桌。

为了区别两者,我们就需要两个命名空间

表格:URI:http://www.abc.com/TR/html4/

桌子:URI:http://www.xyz.com/furniture

<root xmlns:h="http://www.abc.com/TR/html4/"  
xmlns:f="http://www.xyz.com/furniture">  
<h:table>  
  <h:tr>  
    <h:td>Aries</h:td>  
    <h:td>Bingo</h:td>  
  </h:tr>  
</h:table>  
<f:table>  
  <f:name>Computer table</f:name>  
  <f:width>80</f:width>  
  <f:length>120</f:length>  
</f:table>  
</root>   

xmlns 的格式

xmlns:<name>=<"uri">

其中name 是命名空间的名称前缀,uri 是该命名空间的URI,例如:

xmlns:ua="http://opcfoundation.org/UA/"

在文档中如果引用该命名空间内的标签,加上ua的前缀。

例子:

<?xml version = "1.0" encoding = "UTF-8"?>
<cont:contact xmlns:cont = "www.tutorialspoint.com/profile">
   <cont:name>Tanmay Patil</cont:name>
   <cont:company>TutorialsPoint</cont:company>
   <cont:phone>(011) 123-4567</cont:phone>
</cont:contact>

这里命名空间的前缀是cout,命名空间的URI 是www.tutorialspoint.com/profile。这题为在属性和名称之前冠以cout,表示它属于www.tutorialspoint.com/profile命名空间。

缺省的命名空间

缺省的命名空间可以不使用前缀。这里缺省的命名空间是 

http://www.javapoint.com/java-tutorial 

<tutorials xmlns="http://www.javatpoint.com/java-tutorial">  
  <tutorial>  
    <title>Java-tutorial</title>  
    <author>Sonoo Jaiswal</author>  
  </tutorial>  
  ...  
</tutorials>   

OPCUA 的命名空间

       每个信息模型都必须有自己唯一的标识 URI。对于基本的 OPC UA 规范,此 URI 为 :http://opcfoundation.org/UA/

其他配套规范或自定义规范定义其自己的命名空间 URI,例如,用于 DI 规范为        :http://opcfoundation.org/UA/DI/

          在 OPC UA 服务器内部,命名空间由命名空间索引标识。索引 0 始终是基本节点集,索引 1 用于不属于特定节点集的任何节点实例。
        根据用例,服务器可以将其他节点集加载到其地址空间中。这些节点集通常从索引 2 开始。

命名空间的嵌套

    OPC UA 信息模型是基于模块设计的,大的模块通过小模型构成。因此,信息模型的xml 文件的命名空间也是分层定义的。

      最底层是htttp://www.opcfoundation.org/UA。在其上可以根据模块的分层架构逐步添加。例如配套规范PLCopen 引用了配套规范DI 的模型。

     在OPCUA Server 中导入NodeSet2时将会根据导入的顺序,将命名空间的URI 存放在NameSpaceArray 中。而命名空间在命名空间数组中的索引就是OPACUA NodeId 的ns。NodeSet导入的顺序是由讲究的,不能搞乱。另外,www.opcfoundation.org/UA是服务器内置的,不需要导入。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3_ElementPlus_简单增删改查(2023)

Vue3&#xff0c;Element Plus简单增删改查 代码&#xff1a;https://github.com/xiaoming12318/Vue3_ElementPlus_CRUD.git 环境&#xff1a; Visual Studio Code Node.js 16.0或更高版本&#xff0c;https://nodejs.org/en axios 快速上手&#xff1a; 如果已经有16.0及…

Vue单文件组件

单文件组件 单文件组件是在开发中用的比较多的&#xff0c;它的后缀都是.vue结尾的 既然是.vue结尾&#xff0c;那么直接给浏览器是不能运行的&#xff0c;.vue文件是vue团队打造的特殊文件&#xff0c;想让.vue文件让浏览器识别并且运行&#xff0c;需要对它进行处理加工成纯…

5款大厂设计师都在用的网页设计工具

本文收集了5款大厂设计师使用的几种流行易用的网页设计工具&#xff0c;其中一个可以AI自动生成设计稿&#xff0c;非常的方便&#xff0c;相信一定有一个适合你的网页设计工具。 1.即时设计 即时设计是一款免费的在线 UI 设计工具&#xff0c;无系统限制&#xff0c;浏览器打…

三个原则判定电源环路稳定性

1 环路稳定性评价指标 衡量开关电源稳定性的指标是相位裕度和增益裕度。同时穿越频率&#xff0c;也应作为一个参考指标。 (1) 相位裕度是指&#xff1a;增益降到0dB时所对应的相位。 (2) 增益裕度是指&#xff1a;相位为0deg时所对应的增益大小(实际是衰减)。 (3) 穿越频率…

DVWA下载、安装及使用教程,网络安全小白必看!

DVWA是一款基于PHP和mysql开发的web靶场练习平台&#xff0c;集成了常见的Web漏洞。旨在为安全人员测试自己的专业技能和工具提供合法的环境&#xff0c;帮助web开发者更好的理解web应用安全防范的过程&#xff1b; 一、DVMA介绍 DVWA官网 (opens new window)DVWA Github (ope…

springboot配置文件中的巨坑!!

问题 application.yml test:password1: 030030password2: 030030使用此配置的bean Component public class Test {Value("${test.password1}")private String password1;Value("${test.password2}")private String password2;PostConstructpublic void …

企业微信建设代开发应用的基本流程及实现

一、企业微信代开发应用的基本流程 企业微信中除了系统提供的应用以及上架应用商店的第三方应用外&#xff0c;也可以使用自己开发的应用&#xff0c;不过多数企业都不具备开发能力&#xff0c;只能采用代开发的形式进行定制。就给大家分享一下企业微信代开发应用的基本流程&a…

java八股面试文(带答案,万字总结,精心打磨,建议收藏)堪称2023最强

前言 2023秋招即将来临&#xff0c;很多同学会问Java面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这种模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。 国内的互联网面试&#xff0c;恐怕是现存的、最接近科举考试的…

【Java项目】不使用ES实现关键词搜索问题

文章目录 需求解决思路基本设计查询流程插入流程修改流程删除流程 优化思路总结 需求 ok&#xff0c;这个需求是我提的&#xff0c;然后我问了我的一位杭州的朋友&#xff0c;然后我们最后一起敲定这个方法。 我的项目有一个根据关键字进行商品名称的搜索功能&#xff0c;用户…

安卓期末考试知识总结

文章目录 第一章&#xff1a;Android基础入门习题总结重点知识 第二章&#xff1a;Android常见桌面布局&第三章&#xff1a;Android常见界面控件知识总结习题总结 第一章&#xff1a;Android基础入门 习题总结 Android系统采用分层架构&#xff0c;由高到低分为4层&#…

MySQL数据库 --- 运维篇

一、日志 1.1、错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记录了当 mysqld 启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的…

实训笔记6.12

实训笔记6.12 6.12一、座右铭二、知识回顾2.1 面向对象的两大核心概念&#xff1a;类和对象2.2 面向对象的三大特征封装性继承性多态性-必须在继承之上抽象性 2.3 面向对象的常用关键字2.4 Java设计模式中适配器模式2.4.1 接口适配器2.4.2 类适配器2.4.3 对象适配器 三、Java常…

Linux基础知识3

Linux基础知识 适合有Linux基础的人群进行复习。 禁止转载&#xff01; 用户与用户组管理 Linux系统下的3类用户和功能&#xff1b; 答&#xff1a; root用户&#xff08;或称根用户、超级用户&#xff09;&#xff1a;Linux的内置用户&#xff0c;权限最高&#xff0c;具有…

wps安装提示nsis error

1.安装时弹出「NSIS error」错误框&#xff0c;无法安装。 此问题为一般为安装包损坏导致&#xff0c;可重新下载安装包尝试安装。 我遇到的提示也是这个。文件损坏。但是换了绿色U盘&#xff08;格式是FAT32&#xff09;复制过去就能安装。 之前用白色U盘&#xff08;格式是N…

一学就会-----链表的回文结构

文章目录 题目描述思路代码示例 题目描述 对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。 给定一个链表的头指针A&#xff0c;请返回一个bool值&#xff0c;代表其是否为回文结构。保证链表长度小于等于90…

1.1 搭建Scala开发环境

一、Windows上安装Scala &#xff08;一&#xff09;到Scala官网下载Scala Scala2.13.10下载网址&#xff1a;https://www.scala-lang.org/download/2.13.10.html 单击【scala-2.13.10.msi】超链接&#xff0c;将scala安装程序下载到本地 &#xff08;二&#xff09;安装…

Atcoder Beginner Contest 305

A - Water Station AC代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> using namespace std; int main() {int n;cin>>n;int a,b;for(int in;;i){if(i%50){ai;break;}}for(int in;;i--){if(i%50){bi;break;}}if(a-n<…

【Linux学习】多线程——线程池 | 单例模式

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 线程池 | 单例模式 一、 线程池1.1 Thread.hpp1.2 ThreadPool.hpp1.3 main.cpp1.4 RAII方式加锁 …

苹果的Safari私人浏览现在会自动删除URL中的跟踪参数

苹果将对Safari私人浏览器进行重大更新&#xff0c;为用户提供更好的保护&#xff0c;防止他们在浏览网页时被第三方跟踪。 苹果公司表示:“先进的追踪和指纹保护功能可以进一步防止网站利用最新技术追踪或识别用户的设备。” “隐私浏览现在在不使用时锁定&#xff0c;允许用…

百收网SEO问卷调查赚钱项目介绍

百收网SEO问卷调查赚钱项目介绍 大家好&#xff0c;我是百收网SEO 给面子的 也可以叫狂潮哥 哈哈哈哈 认识我比较久的朋友都知道我们做问卷调查项目3年多了这个生意基本没有在朋友圈发过 原因是靠我们自己做 单人一个月就可以产值1到4W 根本没想去收学员 直到看到同行在收学…