映射模型

2024-05-10

映射模型(精选十篇)

映射模型 篇1

1 对象模型

面向对象程序设计已经成为当今软件开发世界的主流方法。面对对象程序设计的思想是把数据结构和算法封装在若干个类中, 对象与类是面向对象程序设计中2个最重要的核心概念。对象是程序运行期的基本实体, 它由一组数据和操作这些数据的一组代码所组成。对象可以表示客观世界的任何事物, 它是对客观世界所有客观实体的抽象。类是创建对象的模板, 类和对象是抽象与具体的关系, 是具有相同数据元素和行为的对象的抽象。从同一个类实例化的每个对象具有相同的状态和行为。此外, 面向对象技术还具有一些其他的基本特性, 如封装、继承、多态等。多个对象之间除了继承关系外还可能存在依赖、关联、聚合、组合等关系。

2 关系数据模型

关系模型是目前数据库管理系统中最经典且应用最为广泛的数据模型。关系模型的概念由美国IBM公司研究员E.F.Codd博士于1970年在“大型共享系统的关系数据库关系模型”一文中首次提出。关系模型有着严格的数学基础, 它主要由以下三部分组成:

(1) 关系数据结构。关系模型建立的基础是集合代数论。从用户的观点看来, 每一个关系的逻辑结构就是一张扁平的二维表。关系成为描述现实世界的实体以及实体间各种联系的基本手段。

(2) 关系数据操作。关系模型的数据操作主要包括数据的新增、修改、删除和查询。与非关系模型的单记录操作方式不同, 关系模型中的数据操作是集合操作。操作对象和操作的结果都是关系, 即若干元组的集合。

(3) 关系完整性约束。完整性约束是为了保证关系模型中数据的正确性和安全性, 从而对数据提出的某种依存和制约的规则。关系模型中的完整性约束主要有包括实体完整性、参照完整性和用户定义的完整性。

3 对象模型与关系模型的联系

对象模型和关系模型之间存在着固有的差异, 它们之间也存在着映射的基础。对象模型和关系模型归根到底只是数据存在的两种形式:在应用程序端, 数据以属性值的形式存在于内存的对象中;而在数据库端, 数据以记录的形式存在于磁盘的数据文件中。对象模型中的类和对象与关系模型中的表和元组之间也存在着相似之处。也就是说, 对象模型中的类可以映射为关系模型中的表, 类中的属性可以映射为表中的字段, 从而使类的一个对象映射为表中的一条记录。另外, 对象之间存在一系列的关系, 如继承, 关联、聚合、组成等, 这些关系也可以在数据库对应的不同表之间找到联系。

4 对象关系映射的实现方式

对象关系映射是指这样的一种操作:它试图将内存中的实体对象与数据库表中的记录之间建立某种联系, 从而使应用程序端对实体对象的持久化操作转换为数据库端对数据表中记录的操作。

在一个采用关系数据库作为数据存储媒介的面向对象软件开发系统中实施对象关系映射通常包含以下三个步骤:

(1) 映射元数据信息的定义。映射元数据信息是实现对象关系映射的基础。其主要描述了对象模型与关系模型之间的联系:如类与表之间的联系, 类的属性与表的列之间的联系, 类的属性类型与表的列类型之间的联系等。另外, 类与类之间的关系和数据库相同表或不同表之间的联系也要反映在映射元数据信息中。

(2) 映射算法的具体实现。这是将对程序中实体对象的持久化操作转换为对数据库中表记录的CRUD操作的一个具体实现过程, 其本质根据持久化操作的具体要求自动生成其相应的SQL语句。市面上的大多数对象关系映射组件都已经实现了这个过程, 开发人员只需要调用其提供的API即可。开发人员也可以自己实现这个过程, 通常可以设计一个位于关系数据库之上的数据持久层来完成目标对象的持久化操作。

(3) 优化调整。为提高系统整体性能而对系统中的对象模型、关系模型以及对象关系映射算法及其实现等各方面进行适当的优化和调整, 以提高程序的执行效率。

5 结语

对象关系映射技术最大的优点就是它允许开发人员使用面向对象的思维来操纵对象数据的持久化。使用该技术, 开发人员只需操纵对象, 对象关系映射组件便会自动地将对象的持久化操作转换为对关系数据库的SQL语句操作, 这使得开发人员能够从复杂琐碎的底层数据库SQL编码工作中解放出来, 从而更加专注于业务逻辑功能的实现, 以提高软件的开发效率。

摘要:在软件开发过程中, 对象数据和关系数据的不匹配给开发工作带来了种种负面效果, 对象关系映射技术的出现很好地解决了这个难题, 它使得开发人员能够使用面对对象的思维来操纵关系型数据库, 从而大大提高软件开发效率。

关键词:对象模型,关系模型,对象关系映射,数据持久化

参考文献

[1]刘金等.基于Hibernate的J2EE数据持久层的设计与实现[J].计算机与现代化, 2007 (3)

[2]Christian Bauer, Gavin King.Hibernate in Action[M].CN:POST&TELECOM PRESS2007

映射模型 篇2

人眼启发的图像非均匀映射变换模型构造算法

人眼的视觉信息采集是非均匀的.这种特征和注意力机制确保了人类视觉系统在信息处理方面的优先性.首先介绍了对数极坐标映射,然后基于人类视觉系统的`构造,提出了非均匀映射模型的构造规则.基于此规则,以线性模型为例进行了应用性研究.扩展了非均匀映射模型的范围,促进了空间变分辨率视觉理论的进一步发展.

作 者:王琪 李言俊 张科 WANG Qi LI Yan-jun ZHANG Ke 作者单位:西北工业大学航天学院,西安,710072刊 名:宇航学报 ISTIC PKU英文刊名:JOURNAL OF ASTRONAUTICS年,卷(期):200627(6)分类号:V557关键词:非均匀映射 对数极坐标变换 模型构造 Non-uniformed mapping Log polar transform (LPT) Model construction

浅谈映射 篇3

在湘教版的教材中用贴切的生活反映了对应的概念,那么作为教师关键就是让学生深刻领悟映射的定义,为此,我在讲解时给学生作了如下剖析:

一、映射定义的剖析

1.A、B两非空集合,可以是数集,点集,也可以是其他集合;

2.映射f:A→B是由三个部分构成的集合:集合A;集合B;集合A到B的对应法则f,这里A,B有先后顺序,f:A→B与f:B→A是两个不同的映射,对于f:A→B,原象属于集合A,象属于集合B;对于f:B→A,原象属于集合B,象属于集合A;

3.在映射f:A→B中,A中每一元素在B中都必须有象,并且象是唯一的。

了解概念之后让学生观察下列哪些是从集合A到集合B的映射,哪些不是,并说明原因。

通过实例认识概念之后进一步让学生总结判断某个对应是否为映射,必须同时满足两个条件。

二、判断是否为映射所满足的条件

1.集合A中任何一个元素都在集合B中有元素与之对应;

2.集合B中所对应的元素是唯一的。

映射的对应关系表现为“一对一”“多对一”;而非“一对多”“一对无”。

在学生总结之后再举几个小题练习:

(1)A=N,B=N+,f:x→| x-1 |;

(2)A={x |0<x<6 },B={y | 0<y<2},f:x→y=2x

相信通过以上的学习学生对于映射这个概念已经理解得很清楚了,那么接下来就让学生认识象与原象之间的关系。

例:已知f:A→B是集合A到集合B的映射,A=B={(x,y) |x∈R,y∈R},f:(x,y)→(kx,y+b),若B中元素(6,2)在此映射下与集合A中元素(3,1)对应,求

(1)k,b;

(2)B中元素(-1,2)的原象。

通过本例的讲解相信学生对于这一节内容已经感到非常轻松了。

以上是本人的一点拙见,希望对还不熟悉这课教法的同行们有所帮助!

城市三维模型视频映射技术研究 篇4

1 Open GL概述

Open GL是SGI公司于1992年发布的三维图形编程接口, 是目前2D和3D图形应用程序开发中应用最广泛的三维图形标准, 已经成为唯一真正开放的、独立于经销商的多平台图形标准。它集成了大量的图形变换、光照、渲染、材质、纹理映射、特殊效果和其他强大的可视化函数, 能快速的建立逼真的三维模型。

1.1Open GL的主要技术特点

工业标准:由国际协会Open GL Architecture Review Board指导规范。

稳定性:具备多种平台上的实现程序, 确保已有的应用程序实时更新。

可靠性和可移植性:任何Open GL应用程序在兼容硬件上都显示出一致的视觉效果。

可扩展性:使程序开发者和硬件经销商在产品新版本中快速将其新特征集成进去。

易用性:具有很强的逻辑性, 代码量很小, 方便易用, 且不必考虑硬件特点。

1.2Open GL的图形操作步骤

Open GL对图形进行操作并将图形绘制到屏幕上的基本步骤如下:

1.根据基本图元构造物体模型, 对物体模型进行数学描述。

2.将物体模型放置到三维空间中, 选择适合的视点以便观察感兴趣的场景。

3.计算物体的颜色, 结合光照和纹理, 确定所观察的场景中物体的最终效果。

4.光栅化:将场景中物体模型的数学描述和颜色信息转换为计算机屏幕上的像素。

注:Open GL在绘制曲面前, 必须进行初始化 (将像素格式加入到图形设备接口) 。

1.3像素格式

像素格式是描述Open GL绘制曲面的一些属性。包括像素缓冲区、像素数据色彩模式、缓冲区的字节数、各种可见性屏蔽等。通过填充PIXELFORMATDESCRIPTOR结构来描述。由Set Pixel Format () 为当前像素格式赋值。1.4绘图描述表

绘图描述表是传递所有Open GL命令必须通过的端口, 调用Open GL函数的每一线程都需要一个当前设备描述表, 一个线程只能由一个激活的绘图描述表, 一个绘图描述表具有和它相关的设备描述表, 两者具有相同的像素格式。管理绘图描述表的相关函数有:创建绘图描述:wgl Creat Context () ;设置当前绘图描述表Wgl Make Current () ;为当前绘图描述提供句柄:Wgl Get Current Context () ;提供相关设备描述表句柄:Wgl Get Current DC () ;删除绘图描述表:Wgl Delete Contex () 。

1.5Open GL在VC中的使用方法

1.设置Open GL编程环境的方法:添加头文件到STDAFX.H中, 进而连接库函数。

2. 基于Open GL的VC编程框架:

(1) 构造Open GL的窗口风格; (2) 设置支持Open GL的像素格式; (3) 创建绘图描述表, 设置为当前绘图描述表; (4) 对Open GL的绘图环境进行初始化; (5) 添加Windows消息响应函数; (6) 结束时删除绘图描述表。

2地形三维可视化和纹理映射研究

2.1 地形三维可视化

2.1.1 地形三维可视化的原理和技术

地形三维可视化是通过三维的表现形式来表达地形。常用的地形三维表达包括立体等高线图、现况透视图、立体透视图等。常用的地形三维可视化技术有下三:一是利用常用的参数曲面通过插值和拟合生成三维地形;二是利用分形技术生成三维地形;三是利用数字高程模型或数字地形模型的三维坐标数据, 生成不规则格网 (TIN) 或者规则格网 (GRID) , 建立三维地形的基本骨架。

2.1.2 数字高程模型

数字高程模型 (DEM) 是地形信息的一种数字表达, 是GIS的基础数据, 可用于土地利用现状分析、水利工程设计、城市规划等。有两种存储方式:一是规则格网点的存储形式, 二是不规则三角网的存储形式。规则格网DEM是一种栅格数据结构, 数据结构简单, 数据存储量小, 利于各种分析和计算。不规则三角网是一种简单的拓扑矢量数据结构, 具有更高的分辨率, 其数据存储和操作都较复杂。

2.1.3 三维建模

Open GL提供了点、线、多边形三种基本的几何图元, 可以构造更复杂的形体对象。在地形三维可视化中首先需要进行三维模型的建立。可以利用多个三角形或四边形拼接而成的曲面来近似模拟地形表面。使用Bezier曲面或NURBS曲面来创建所需要的模拟地形表面的曲面。

2.1.4 三维图形变换

三维几何对象是处于三维坐标中的几何图形, 计算机屏幕的像素是二维的, 在屏幕上显示三维模型就必须将几何对象的三维坐标转换到屏幕上的像素位置。进行一系列的变换, 统称三维图形变换, 有投影变换、视口变换和几何变换三种。

2.1.5 三维漫游

虚拟漫游是虚拟现实技术的重要分支, 其方式可以分为电子沙盘和目标沿路径飞行两种。电子沙盘是目标绕着某一固定点转动, 通过实时改变基本的模型变换矩阵中的参数来改变目标的实时显示效果。目标沿路径飞行则是按照一定的飞行路线观察地形景观。记录路线采样点平面坐标, 根据采样点在DEM中内插确定观察路线上采样点的高程坐标。

2.2 纹理映射的原理和方法

纹理映射是将纹理图像投射到物体表面从而获得真实感效果的物体模型。Open GL可采用一维、二维或三维的纹理进行映射, 纹理图是由R、G、B、A数值组成的矩形数组。它不仅能反映地表起伏状况, 还能更真实的反映地表的真实面貌。

2.2.1 地形三维可视化中常用的纹理

从专业摄影图片中获取;实地摄影获取纹理图像;航摄图片、航空遥感图像;

扫描地形图或专题图得到的数字图像;通过分形产生纹理等。

2.2.2 纹理映射的步骤

(1) 定义纹理; (2) 控制纹理; (3) 映射方式 (三种) ; (4) 纹理坐标: (将纹理坐标与构成三维模型的点坐标联系起来, 能有效改善变形情况) ; (5) 激活和取消纹理映射。

3视频读取方法和视频纹理映射的研究

3.1 视频和视频帧

连续的图像变化每秒超过24帧画面以上时, 根据视觉暂留原理, 人眼无法辨别单幅的静态画面, 看上去是平滑连续的视觉效果, 这样连续的画面叫做视频。视频帧是视频中最小单位的单幅影像画面, 是一幅静止的画面, 连续的视频帧就构成了动态的视频。视频帧频是指视频剪辑每秒显示的帧数。

3.2 Open CV读取视频的原理和方法

3.2.1 简介Open CV及Open CV在VC中的使用方法

Open CV是由Intel公司基于C/C++语言开发的跨平台开源图像处理函数库。具有良好的可移植性, 可用于实时图像处理。功能完善, 包括图像数据操作、摄像头定标、运动分析、目标识别等, 且支持多种动态数据结构。Open CV包括cv (核心函数库) 、cvaux (辅助函数库) 、和ml (机器学习函数库) 等模块。在VC中Open CV需要首先设置预编译的头文件, 随后设置链接库。

3.2.2 Open CV读取视频及抓取视频帧的方法

Open CV支持视频的输入输出等操作, 读取视频涉及的Open CV函数如下:Cv Capture*capture=cv Capture From AVI (文件名) ;利用cv Capture From AVI函数获取指向视频文件的指针。而后还需要释放视频流捕捉器, 采用cv Release Capture (&capture) 函数实现。利用Open CV的函数cv Grab Frame (capture) 和cv Retrieve Frame (capture) 可以从视频流中抓取某一帧的影像。

3.3 视频纹理映射研究

3.3.1 视频纹理映射的概念

在地形三维可视化中, 通过纹理映射可以将真实世界的影像反映到模型上从而达到更真实的效果。视频纹理映射即用视频替代单幅影像作为映射单元映射到三维模型上。由此获得的三维景观能够实时动态的反映地形真实面貌和变化情况。

3.3.2 探讨实现视频纹理映射的方法

利用Open GL的命令函数可以实现二维图像的纹理映射, 而视频是由一帧一帧的单幅影像组成的, 因此视频纹理映射是可行的。基本思路是:利用Open CV函数读取视频, 抓取视频帧影像并存储下来, 然后将一帧影像映射到三维模型上。再读取第二帧影像替代第一帧进行映射, 这样不断的将所有视频帧影像映射到三维模型上。连续映射到模型上的视频帧就会形成动态效果, 从而实现视频纹理映射。

4结论与展望

4.1 结论

传统的多窗口的影像进行监控, 视觉上的不直观, 定位和观察上更不便。本课题提出了一种有效的改善这种不足的方法———城市三维模型视频映射技术。基于VC语言和Open GL函数库, 对地形进行三维重建并将视频影像作为纹理映射到模型上。这样生成的视频具有很强的立体感, 能够更加真实的反映现实世界, 此外对于不同区域的摄像机所获得的视频, 可以整合到同一个三维模型上, 从而达到整体监控和快速定位的效果。

4.2 展望

回顾论文的研究过程, 对基于Open GL实现地形三维可视化和视频纹理映射有了一定的研究, 并且实现了三维漫游和视频纹理映射系统的各种功能, 但是, 由于时间、实验条件和个人水平限制, 本文在以下几个方面还需要作进一步的研究:

数据点多时, 在GRID构建三维模型的基础上进一步研究构建TIN模型的算法。

Hibernate关系映射 篇5

Single_Table

1、当多个类存在继承关系的时候,这时候建表的方案有3种,

2、第一种是父类中包含全部的属性,任何子类的信息都由父类对应的数据表来存储。在该表中,增加一个用于表示不同的子类及父类的字段,这样就可以对父类和子类数据进行区分。这种设计成为Single_Table。如下实验:

(1)设计一个父类Person.java。其中定义共有的属性id,name

package com.zgy.hibernate.model;

import javax.persistence.DiscriminatorColumn;

import javax.persistence.DiscriminatorType;

import javax.persistence.DiscriminatorValue;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Inheritance;

import javax.persistence.InheritanceType;

@Entity

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)

@DiscriminatorColumn(name=“discriminator”,discriminatorType=DiscriminatorType.STRING)

@DiscriminatorValue(“person”)

public class Person {

private int id;

private String name;

@Id

@GeneratedValue

public int getId {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

(2)定义Student.java,定义自己的私有属性score

package com.zgy.hibernate.model;

import javax.persistence.DiscriminatorValue;

import javax.persistence.Entity;

@Entity

@DiscriminatorValue(“student”)

public class Student extends Person{

private int score;

public int getScore() {

return score;

}

public void setScore(int score) {

this.score = score;

}

}

(3)定义Teacher.java,定义自己的私有属性title

package com.zgy.hibernate.model;

import javax.persistence.DiscriminatorValue;

import javax.persistence.Entity;

@Entity

@DiscriminatorValue(“teacher”)

public class Teacher extends Person{

private String title;

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

}

(4)测试save()方法

package com.zgy.hibernate.model;

import java.util.Map;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

import org.hibernate.cfg.Configuration;

import org.hibernate.service.ServiceRegistry;

import org.hibernate.tool.hbm2ddl.SchemaExport;

import org.junit.AfterClass;

import org.junit.BeforeClass;

import org.junit.Test;

public class ORMapppingTest {

public static SessionFactory sf = null;

@BeforeClass

public static void beforeClass(){

Configuration configure =new Configuration().configure();

new SchemaExport(configure).create(true, true);

sf = configure.buildSessionFactory();

}

@Test

public void testSave() {

Student s = new Student();

s.setName(“s1”);

s.setScore(80);

Teacher t = new Teacher();

t.setName(“t1”);

t.setTitle(“中级”);

Session session = sf.openSession();

session.beginTransaction();

session.save(s);

session.save(t);

session.getTransaction().commit();

session.close();

}

@AfterClass

public static void afterClass(){

sf.close();

}

}

(5)查看SQL语句:

create table Person (

discriminator varchar(31) not null,

id integer not null auto_increment,

name varchar(255),

score integer,

title varchar(255),

primary key (id)

)

Hibernate: insert into Person (name, score, discriminator) values (?, ?, ‘student‘)

Hibernate: insert into Person (name, title, discriminator) values (?, ?, ‘teacher‘)

可以看出,在Person表中,产生了所有子类的字段,并且在保存数据的时候,每条数据都加入了对应的标识。

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)用于定义存储的策略使用的是单表存储

@DiscriminatorColumn(name=“discriminator”,discriminatorType=DiscriminatorType.STRING)定义标识列,该列的类型是String类型

@DiscriminatorValue(“person”)定义Person类的数据在标识列discriminator中的取值是“person”

@DiscriminatorValue(“student”)定义Student类的数据对应的表示是“student”

@DiscriminatorValue(“teacher”)定义Teacher类的数据对应的表示是“teacher”

测试读取数据:

@Test

public void testLoad() {

testSave();

Session session = sf.openSession();

session.beginTransaction();

Student s = (Student)session.load(Student.class, 1);

Person t = (Person)session.load(Person.class, 2);

System.out.println(s.getScore());

System.out.println(t.getName());

session.getTransaction().commit();

session.close();

}

查看SQL语句:

Hibernate: select student0_.id as id2_0_0_, student0_.name as name3_0_0_, student0_.score as score4_0_0_ from Person student0_ where student0_.id=? and student0_.discriminator=‘student‘

80

Hibernate: select person0_.id as id2_0_0_, person0_.name as name3_0_0_, person0_.score as score4_0_0_, person0_.title as title5_0_0_, person0_.discriminator as discrimi1_0_0_ from Person person0_ where person0_.id=?

t1

Table_Per_Class

(1)修改Person.java中的ID生成策略,使用Table生成主键

package com.zgy.hibernate.model;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Inheritance;

import javax.persistence.InheritanceType;

import javax.persistence.TableGenerator;

@Entity

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

@TableGenerator(

name=“t_gen”,

table=“t_gen_table”,

pkColumnName=“t_pk”,

valueColumnName=“t_value”,

pkColumnValue=“person_pk”,

initialValue=1,

allocationSize=1

)

public class Person {

private int id;

private String name;

@Id

@GeneratedValue(generator=“t_gen”,strategy=GenerationType.TABLE)

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

(2)修改Student.java

package com.zgy.hibernate.model;

import javax.persistence.Entity;

@Entity

public class Student extends Person{

private int score;

public int getScore() {

return score;

}

public void setScore(int score) {

this.score = score;

}

}

(3)修改Teacher.java

package com.zgy.hibernate.model;

import javax.persistence.Entity;

@Entity

public class Teacher extends Person{

private String title;

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

}

(4)测试save()方法

@Test

public void testSave() {

Student s = new Student();

s.setName(“s1”);

s.setScore(80);

Teacher t = new Teacher();

t.setName(“t1”);

t.setTitle(“中级”);

Session session = sf.openSession();

session.beginTransaction();

session.save(s);

session.save(t);

session.getTransaction().commit();

session.close();

}

(5)观察生成的SQL语句

create table Person (

id integer not null,

name varchar(255),

primary key (id)

)

create table Student (

id integer not null,

name varchar(255),

score integer not null,

primary key (id)

)

create table Teacher (

id integer not null,

name varchar(255),

title varchar(255),

primary key (id)

)

create table t_gen_table (

t_pk varchar(255),

t_value integer

)

Hibernate: insert into Student (name, score, id) values (?, ?, ?)

Hibernate: insert into Teacher (name, title, id) values (?, ?, ?)

(6)测试load()方法

@Test

public void testLoad() {

testSave();

Session session = sf.openSession();

session.beginTransaction();

Student s = (Student)session.load(Student.class, 1);

Teacher t = (Teacher)session.load(Teacher.class, 2);

System.out.println(s.getScore());

System.out.println(t.getName());

session.getTransaction().commit();

session.close();

}

(7)观察SQL语句

Hibernate: select student0_.id as id1_0_0_, student0_.name as name2_0_0_, student0_.score as score1_1_0_ from Student student0_ where student0_.id=?

80

Hibernate: select teacher0_.id as id1_0_0_, teacher0_.name as name2_0_0_, teacher0_.title as title1_2_0_ from Teacher teacher0_ where teacher0_.id=?

t1

Joined

(1)修改Person.java

package com.zgy.hibernate.model;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Inheritance;

import javax.persistence.InheritanceType;

@Entity

@Inheritance(strategy=InheritanceType.JOINED)

public class Person {

private int id;

private String name;

@Id

@GeneratedValue

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

(2)Student.java和Teacher只保留@Entity

(3)测试save()方法

@Test

public void testSave() {

Student s = new Student();

s.setName(“s1”);

s.setScore(80);

Teacher t = new Teacher();

t.setName(“t1”);

t.setTitle(“中级”);

Session session = sf.openSession();

session.beginTransaction();

session.save(s);

session.save(t);

session.getTransaction().commit();

session.close();

}

(4)查看SQL语句

create table Person (

id integer not null auto_increment,

name varchar(255),

primary key (id)

)

create table Student (

score integer not null,

id integer not null,

primary key (id)

)

create table Teacher (

title varchar(255),

id integer not null,

primary key (id)

)

alter table Student

add constraint FK_ohs43dct8k52ch2exlmf4bs3l

foreign key (id)

references Person (id)

alter table Teacher

add constraint FK_g6jmt7fcm6gfd0jvhimb9xy84

foreign key (id)

references Person (id)

Hibernate: insert into Person (name) values (?)

Hibernate: insert into Student (score, id) values (?, ?)

Hibernate: insert into Person (name) values (?)

Hibernate: insert into Teacher (title, id) values (?, ?)

(5)测试load()方法

@Test

public void testLoad() {

testSave();

Session session = sf.openSession();

session.beginTransaction();

Student s = (Student)session.load(Student.class, 1);

Teacher t = (Teacher)session.load(Teacher.class, 2);

System.out.println(s.getScore());

System.out.println(t.getName());

session.getTransaction().commit();

session.close();

}

(6)观察SQL语句

Hibernate: select student0_.id as id1_0_0_, student0_1_.name as name2_0_0_, student0_.score as score1_1_0_ from Student student0_ inner join Person student0_1_ on student0_.id=student0_1_.id where student0_.id=?

80

梦境的映射 篇6

迷人的甜甜圈

很多有一定经验的单反摄友,特别钟情于拍摄一些浅景深的照片,因为柔和的焦外成像非常的迷人。而看多了这类照片后,估计也会觉得腻味吧。其实玩焦外成像,除了大光圈镜头、电影镜头等众所周知的镜头外,小众的折返镜头是非常值得推荐的。折返镜头又称反射式镜头,其光学结构不同于折射式镜头,它拥有长度短,重量轻,方便携带等优势。并且,由于其结构比较简单,因此价格也相对低。而在成像方面,由于其独特的光学结构,在焦外能够形成美丽的焦外甜圈,是普通镜头所没有的,因此令许多摄影爱好者迷恋。在目前的市面上,折返镜头的数量并不多,而且大多数属于胶片时代的产物。因此,大多数的折返镜头还得在市场上耐心的寻找才会觅起身影。

MI TIPS

折返镜头利用光线折反原理,当光线通过第一组镜片时,不是直接到达cMos传感器,而是经过两次反射后才到达CMOS传感器。这样,折返镜头的长度可以大大缩短,最大限度得缩小了体积、重量,也降低了成本。在成像方面,折返镜头也有着其独有的魅力,由于通过镜头的光线呈环状,所以离焦的弥散斑成环状。并且,折返镜头用无色散的反射面代替有色散的折射面,因此色散控制很好。不过值得注意的是,折返镜头的光路的中心有一个反射面,折返镜头无法设置可调节的光圈叶片,所以折返镜头只有一档光圈值。

众里寻它千百度

既然折返镜头并不被大多数摄友所熟悉,那么就看看我为大家提供的一些参考镜头吧。毕竟,挑选一款合适自己相机的镜头是非常重要的。

制造魅力影像

看了这么多,想必很多摄友会问,我们应该如何使用折返镜头拍摄呢?的确,折返镜头对手大多数摄友来讲还是相当陌生的,并且由于其采用了独特的光学结构,我们如果按照以往的拍摄经验进行使用它,那么很容易拍摄到一堆废片。尤其是在暗光环境下,或者需要更小光圈控制进光量的需求时,我们的摄友应该如何使用折返镜头呢?下面,就让MI为大家带来一些解决方案吧。

1暗光环境

细心的摄友应该会很容易发现,大多数的折返镜头不仅是500mm以上超长焦段,而且恒定光圈值都在F8左右。因此,在光线较弱的阴天或者夜晚,如何合理控制曝光时间就变得非常的重要了。减慢快门,也许是最完美的解决方案,但是过慢的快门时间则会让我们无法实现手持拍摄,毕竟走到哪里都需要三角架是一件闹心的事。而提高感光度ISO设置,的确能够有效缓解这一问题,但是过高的感光度设置带来的画质影响,想必也无需多言。因此,对于热衷于手持街拍的摄友来讲,折返镜头搭配高ISO控制力更佳的全画幅机型才是王道。而对于不怕麻烦的摄友来讲,三角架就将永不离身了。

2辅助工具

前面我们提到了折返镜头只有一档的恒定光圈,当我们在一些特定环境下,需要如何控制曝光量呢?虽然,通过改变快门速度能够调整曝光量,但是却不能通过调整光圈的大小达到改变进光量的目的。要想改变进光量,必须使用一种叫做中性密度镜的特殊滤光镜。这种灰颜色的滤光镜可以减弱进入照相机的光量。而滤光镜的颜色越深,到达CMOS传感器的光线就越少。

映射模型 篇7

关键词:定性映射,语义图像检索,特征提取,相关反馈

引言

计算机技术、多媒体技术和网络技术的飞速发展, 引领人类进入了一个多媒体信息时代。人类接触到和需要处理的图像信息每天都在呈几何级数的速度增长, 如何从海量的图像资源库中快速、准确地检索到所需的图像信息, 即建立有效的图像分类和检索机制成为迫切需要解决的问题。

1 图像检索技术

20世纪70年代, 在数据库技术和计算机视觉两大领域的推动下, 图像检索技术开始受到关注, 并逐渐活跃起来。

早期的基于文本的图像检索 (Text-Based Image Retrieval, TBIR) 通过手工对图像库中的每一幅图像加注描述性的文本, 然后根据加注的关键字, 使用文本检索技术实现图像检索的目的[1]。但随着图像数据库规模的日益扩充, 对图像的手工描述, 费时费力, 且主观性强, 易于出错, 难以表达图像中的全部信息 (如纹理、亮度、形状等) 使得它无法适应图像检索的实际需求[2]。

为解决上述问题, 20世纪90年代初出现了基于内容的图像检索 (Content-Based Image Retrieval, CBIR) 。由于传统的CBIR系统过于关注图像的底层特征, 无法深入表达图像的语义内涵, 缩小语义鸿沟对检索带来的障碍, 越来越多的研究者致力于基于语义的图像检索 (Semantic-Based Image Retrieval, SBIR) 的研究[3]。

本文结合属性论方法中的定性映射模型, 提出了一种基于定性映射的语义图像检索技术。

2 基于定性映射的颜色特征提取

在图像的低层物理特征中, 颜色特征是人眼识别图像的最可靠和最稳定的感知特征之一。因此, 本文提取颜色特征来描述图像。

2.1 HSI颜色空间

HSI颜色空间是美国色彩学家孟塞尔 (H.A.Munseu) 提出的一种感知颜色的模型[4]。在这种HSI模型中, 包含色调H、饱和度S和强度I三种基本特征量, 其中, 色调H由角度表示, 取值为0°~-360°, 饱和度S表示色彩的纯度, 取值为0~1。可以通过以下公式, 将常见的RGB颜色空间转换为HSI颜色空间。

2.2 HSI颜色空间的定性映射模型

设X (i, j) =H (i, j) ∧S (i, j) ∧I (i, j) 为图像中像素点x (i, j) 的色调H (i, j) 、饱和度S (i, j) 和强度I (i, j) 构成的一个整合性质, x= (h, s, i) 是X (i, j) 的量值, X (i, j) 的定性基准为 ( (h11, h12) , …, (hn1, hn2) , (s11, s12) , …, (sn1, sn2) , (i11, i12) , …, (in1, in2) 则由定性映射和定性基准模糊原理知, 定性基准区间构成的定性基准阵列[5,6]可表示如下:

C中不在同一行、不在同一列的定性基准区间将三维属性空间分割为3n个超立方体。以C为定性基准的合取性质的判断可定义为下述定性映射的形式:

以超长方体阵列C为定性基准的定性映射, 就是要确定一个向量c= (h, s, i) ∈H×S×I是否落在C的某超立方体中, 如果落在其中, 则有:

否则为0, 其中j, k, l∈{1, 2, 3, …, m}。反之, 具有此性质的对象x必具有以此为定性基准的性质。

根据一般经验, 将人们能感知的颜色划分为红、黄、绿、蓝、紫、黑、灰、白共8种。在HSI颜色空间中, 对应这8种颜色的定性基准可描述如式 (7) 所示。

得到颜色的定性基准后, 按照定性基准统计图像的颜色特征, 设8种颜色在图像中所占像素数分别为A1, A2, A3, A4, A5, A6, A7, A8, S为像素数目总和, 则第j种颜色在图像中所占的百分比别为

3 低层颜色特征到高层语义的转换

一幅图像由多个颜色特征表示, 每种颜色特征对应一个语义集, 那么一幅图像就可以用多个语义集来描述。图1为低层颜色特征到高层语义的映射过程, 其中, 红色特征对应语义集{红花, 太阳, 国旗, …}, 蓝色特征对应语义集{蓝天, 大海, …}等, 整个图像的语义定义为:{{红花, 太阳, …}, {蓝天, 大海, …}, ……}, 这样就可以提取出一个语义集。

4 相关反馈技术[7]

从图像8种颜色对应的百分比中, 选取所占比例最大的前3种颜色c1、c2、c3, 构造该图像的颜色特征M, 则M可表示为:

其中, ωi为各颜色所占的语义权重。

通过在检索过程中动态调整图像的语义权重, 可以优化检索结果。语义的相关反馈就是通过更新语义和图像之间的权重系数wi实现的, 具体过程如下:

STEP1.把所有的权限系数wi设置为1, 初始时图像的所有语义的权值大小相等。

STEP2.对于检索的结果, 若图像和语义相关, 则权重wi不变;若图像和语义无关, 则表示该语义的权重更新为原来权重的一半。

经过用户多次使用及反馈后, 语义的准确性提高。

5 语义图像检索

语义图像检索系统结构如图2所示。用户可以提交需要查询的语义关键字, 系统根据该语义关键字对图像库中的每一幅图像的语义进行匹配, 并按照每幅图像的语义权重大小, 依次将查询到的图像显示在屏幕上。用户根据需要对检索结果进行反馈, 图像的语义权重会随着系统的使用而不断修正。在多次反馈后, 查询结果逐渐趋于准确。

系统选取自然图像 (如:蓝天、白云、草地、树木、花朵等) 为图像库, 每幅图像大小均为250×360, 以JPG格式存储。系统界面如图3, 下拉列表框中有六个图像语义关键词, 分别是:花朵、白云、草地、天空、树、道路。用户选择要查询的关键词, 然后点击“检索”按钮, 则系统会根据图像中语义所占比重的大小, 将前15幅相应语义的图像显示在界面上。图4为多次反馈后的结果。

6 总结

本文通过研究属性论方法中的定性映射等相关技术, 将定性映射用于语义图像检索, 实现基于定性映射的颜色特征提取, 并映射为高层语义, 借助相关反馈技术进一步提高语义检索的准确性, 设计了一个基于定性映射的语义图像检索系统, 为解决语义图像检索问题, 提高图像检索效率提供一个有效的新途径。

参考文献

[1]张黎, 陈敏.基于内容的图像与视频检索技术研究[J].医学信息, 2005, 18 (5) :425-429.

[2]史美艳.基于语义的图像检索技术研究[D].济南:山东大学, 2011.

[3]杨芳芳.基于区域特征的有监督图像语义标注[D].苏州:苏州大学, 2010.

[4]宋西平, 李国琴, 罗陆锋等.基于HSI色彩空间与FFCM聚类的葡萄图像分割[J].农机化学研究, 2015, (10) :40-44.

[5]许广林.智能融合的定性映射模型及其属性计算网络实现技术的研究[D].上海:上海海事大学, 2008.

[6]周如旗, 冯嘉礼, 张谦.模糊属性Petri网建模方法及学习模型研究[J].计算机工程, 2014, 40 (6) :190-194.

映射模型 篇8

1 总体设计

为了实现基于本体映射模型的研究,结合JAVA与XML技术,提出了一个基于本体映射的人才供求关系的设计和实现机制,并通过JavaBeans组件,将源本体-应聘者,目标本体-招聘者的数据信息以组件的形式封装,同时进行源本体和目标本体的匹配。

2 系统总体结构

本系统的总体结构如图1所示。

本系统的元数据层包括:企业招聘源本体元数据、人才应聘目标本体元数据、组件接口层和映射处理层。企业招聘源本体企业求职的信息处理,源本体通过语义分析和推理进行整合,并将最后元数据以XML的形式显示;人才应聘目标本体将复杂处理本身个体的数据,同样以XML的形式显示;组件接口层包括封装处理的JavaBeans接口组件;映射处理层负责对元数据信息进行处理,并返回最后结果。

2.1 元数据层

该层包括企业招聘源本体元数据和人才应聘目标本体元数据。

1)企业招聘流程如下:输入条件->求职信息->匹配->筛选->确定。

由于XML具有良好的扩展行以及简单规范等特点,将源本体最终转换为XML文档的形式存放,记录供应方的要求。

2)人才应聘流程如下:输入自身信息->搜索岗位信息->匹配->筛选->确定。

在目标本体最终文档里面,记录知道需求人员所对应的情况。

2.2 组件接口层

组件接口层负责实现元数据的从元数据获取信息,并以标准形式存放在Java向量Vector中。在这里我们定义了向量中数据的排列规则。依次为:fatherindex(父节点对应的索引值)、father(父节点名称)、name(节点名称)、value(节点对应的值)。具体JavaBeans组件接口程序如下:

2.3 映射处理层

企业招聘源本体和人才应聘目标本体的数据通过组件接口层转换为标准数据后,在映射处理层中进行本体的匹配,此处运用XML中SAX处理方式,映射表中的树型结构数据与标准数据匹配,再进行阈值判定,得出最后的结果。

3 运行结果

1)先点击“SourceOntology”,打开对应的源本体的XML文档。

2)输入源本体需要匹配的内容。比如:输入:专业="计算机软件",国家="中国"省份="湖北"等。然后点击“保存”。

3)打开“TargetOntology”,打开对应的目标本体的XML文档,输入每个目标个体对应的信息。如图2所示。比如:输入:name=”郭晶晶”,major="计算机软件",state="湖北"等。然后点击“保存”。

4)”Map Table”的匹配,通过领域专家学习,建立每个节点对应的概率。如图3所示。

5)点击“Match”按钮,对源本体和目标本体通过映射表进行匹配,结果如图4所示。

4 结束语

随着社会的进步和技术的发展知识正在发挥着越来越大的作用,市场的竞争在很大程度上体现为人才的竞争。从而找到合适的人才,成为企业提高竞争力的一项关键任务;同时,当今的市场环境变化快速。市场需求在变,对人才的需求也相应处于变化之中。如何能快速适应这一变化,提高人才招聘流程的工作效率,进行快速定位,也成为需要考虑的重要因素。本系统对人才需求的本体映射分析研究,初步达到了预期的效果。

摘要:本体映射作为本体学习和发展的基本方法之一,在本体间的语义整合方面有着广阔的前景。结合JAVA与XML技术,将本体映射模型在人才供需应用系统中加以实现,实验结果表明本课题研究达到了预期的效果。

关键词:本体,本体映射,XML,JavaBeans

参考文献

[1]王亮.基于SQL的XML到关系数据库的转换方法[J].计算机应用研究,2002:70-72.

[2]刘利.利用DOM技术实现XML与数据库映射的中间件[J].计算机与数字工程,2001,29(4):58-59.

[3]http://www.xmlsoftware.com/[EB/OL].

[4]邓志鸿.Ontology研究综述[J].北京大学学报:自然科学版,2002,38(5):126-203.

映射模型 篇9

1.1 SVG

SVG(Scalable Vector Graphics)是可升级矢量图形的简称,它是一种使用xml来描述二维图形及其应用的语言。对图像来说,可升级意味着图像尺寸并不限定于固定的大小,SVG图像可升级到不同的显示分辨率,SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失。可以放大一个SVG图像,来了解其精美的细节信息。SVG是可升级的,原因在于:同一段SVG内容,既可以是独立的图像,也可以被引用到一个页面,还可以嵌入到另外的SVG图像中。因此,一个复杂的SVG图像可以由多部分组成,还可以由多人共同完成。SVG使用xml格式定义图形,它是W3C的标准。

1.2 VML

VML相当于IE里面的画笔,能实现你所想要的图形,而且结合脚本,可以让图形产生动态效果。VML是微软公司于1999年9月附带IE5.0发布的,VML其实是Word和Html结合的产物。可以将Word文档另存为Html,其中的文本和图片可以很容易的转换,但如果是手制的图形在以往的IE里就无法解释了,如果都转换成图形文件又不现实。于是微软把Word里面的图形控件结合到IE里,使IE也具备了绘图功能。

2 SVG与VML的映射

在设计SVG与VML的映射中,采用的工具是Visual Studio 2008,用C语言编写。如果把SVG直接映射为VML或者把VML直接映射为SVG,这样实现较为复杂。所以采用了增加一个中间过度模型的方法,也就是说先把SVG转成一个中间模型,然后再把中间模型转成VML,或者先把VML转成中间模型,然后把中间模型转成SVG。这样把SVG转成VML的过程其实是VML转成SVG的逆过程。对此,只需要设计一个对称类,实现其中一个过程,就能得到另一个过程。以下所提到的SVG与VML的映射就指SVG到VML的映射,因为其逆过程同理。

另外,在对SVG模型和VML模型的定义采用弱类型(大部分用string字符串类型定义)来定义,其模型中元素的属性基本使用string类型来定义,因为在表达层上,不需要任何限制。而在中间模型,采用强类型,比如元素属性的类型如果是整型的,必须定义为整型。所以在对SVG模型映射成中间模型的过程中,要把SVG模型中的弱类型映射为中间模型的强类型,如果映射失败,说明SVG模型本身出现错误,因为其类型本来就是弱类型,没有经过验证。

2.1 SVG和VML预定义的形状元素

SVG的预定义的形状元素有矩形 <Rect>、圆形 <Circle>、椭圆 <Ellipse>、线 <Line>、折线 <Polyline>、多边形 <Polygon>、路径<Path>。VML的预定义形状元素有直线<Line>、折线<Polyline>、矩形<Rect>、圆矩形<RoundRect>、圆<Oval>、曲线<Curve>、形状<Shape>。

2.2 SVG形状元素模型的定义与生成

要建立SVG模型到中间模型的映射,必须先测试所定义SVG模型是否能产生所想要的SVG文件,并能通过浏览器看到这个SVG图形。对此,需要对类序列化,把类序列化成一个.svg格式的文本文件,然后用浏览器打开查看这个SVG图形类能否显示相对应的SVG图形。C#中System.Xml.Serialization提供了这个功能,另外,还应该建立SvgModelTest工程,测试所定义的SVG模型中的各个属性,这样能更好的完善这个模型的定义。定义一个基本图形类,其图形都继承自这个基本图形类。比如一个SVG模型的矩形Rect类,可以定义如下:

如何生成这个Rect类?由上面的SVG文档中可知,SVG文档的根元素是<svg>,所以笔者另外定义了一个SvgGraph类,用来生成SVG文档,因为每个SVG文档中的每个元素都有ID属性,并且元素中可能含有其它元素,所以另外定义了一个SvgElement,所以的图形类都继承它,它是所有图形的父类,SvgElement中只有两个属性,该类表示为如下:

属性Children主要用来表示元素中含有的子元素,其类型为List类型,表示可以添加多个元素。同时,SvgGraph类也继承自SvgElement类,它有Width,Height,Version,ViewBox属性,所以实例化一个SvgGraph类,同时把前面的Rect类加入到SvgGraph类的Children属性,就能序列化这个类,序列化后得到一个含有<rect>元素的SVG文档如下:

2.3 中间模型的定义与测试

中间模型与SVG模型的区别是明显的,中间模型中元素的属性已经不能再是弱类型了,而需要能验证其正确性的强类型。比如很多元素含有style属性,SVG模型中对style属性只需要定义为string类型(如style=”fill:red;stroke:black”),而在中间模型中必须将style定义为一个类,而类里面有两个属性可定义为Color Fill与Color Stroke。同时,参考Scalable Vector Graphics (SVG) 1.1 Specification。可以发现SVG规范中含有如下基本数据类型:整型值<integer>,实数值<number>,百分比值<percentage>,长度值<length>,坐标值<coordinate>,角度值<angle>,颜色值<color>,频率值<frequency>,时间值<time>。这些基本数据类型,必须在中间模型中定义为强类型,即如果C语言中提供这个类型(如整型),可直接拿来使用,如果没有提供,就将其定义为一个类。这些类中至少要有两个方法。即Parse(string s)方法与ToString()方法,Parse(string s)方法是用来把传入的字符串s经过解析,生成类;而ToString()方法则是相当于其逆过程,把这类转化一个字符串返回。

中间模型的定义完成后,同样需要对其定义的类进行测试,建立中间模型测试工程GraphModelTest。举长度Length类做为例子。Length类应该包含两个属性,一个是值Value,另一个单位Unit。除了长度之外,还有很多情况也是值与单位,为了提供程序的健壮性,应该建立一个泛型ValueUnit<U>,而Length类只需要继承它就可以了。下面对Length类进行测试,在工程GraphModelTest中建立单元测试lengthTest类,下面即为测试LengthTest类中的一个主体方法:

这个方法即为传入一个Length类的对象,利用其ToString()方法得到这个类的字符串表示,然后再调用Parse(string s)方法,得到这个类的另一个对象,比较这两个对象相对应的两个属性,其相对应的两个属性必须相等才能通过Length类的测试。

2.4 SVG模型到中间模型的映射

建立SVG模型到中间模型的映射是整个项目的重点,设计好这个映射关乎着整个项目的性能。笔者放弃了使用枚举法枚举SVG模型中的每个基本元素将其转成中间模型的方法,而是成功地使用了一个可递归映射的映射机制来实现整个映射,大大减少了代码量,并且这套映射每个基本元素都能使用,只需要在映射的两端添加对应元素即可。

2.4.1 SVG模型根元素到中间模型根元素的映射

一份完整的SVG文档需要基本的框架元素来支撑,这些元素构成了SVG基本的框架结构。<svg>元素是其中必不可少的一个元素,也是SVG文档中最早定义的元素,所以首先需要对<svg>元素进行映射。<svg>元素在SVG模型中定义为类SvgGraph,在中间模型中定义为类Graph,其需要进行映射的属性,如表1所示。

在实现的过程中,把映射即看为动作,分为4种类型:复制动作(单纯地一个对象的内容复制到另一个对象);化字符串动作(主要用于把中间模型转成SVG模型或VML模型的情况,因为后者的两个模型是表示层的,都是用字符串表示,所以直接转化为字符串即可);列表动作(用于一个元素下面的子元素列表进行映射的动作,是一个递归过程);解析动作(用于把一个字符串类型转化为一个类的动作)。很明显,上表中的映射只用到了解析动作。实现解析动作,首先定义一个抽象类Action作为所有动作类的父类,里面有一个抽象方法ConvertTo(ActionContext context)方法,所有动作类必须重写这个方法。解析动作类ParseAction实现这个方法,根据传入的上下文对象context,通过C#的反射机制,动态调用类的类型的Parse(string s)方法生成这个类对象,这样就成功地把SvgGraph的属性映射到了Graph中的属性。

2.4.2 SVG模型子元素到中间模型子元素的映射

SVG模型的根元素<svg>有子元素,子元素可能也有子元素,这是一个递归的过程。前面讲到了SvgModel继承SvgElement,SvgElement里面有个List<SvgElement> Children属性,所以一个元素的子元素都需要添加到这个元素的Children属性中。这样,进行SVG模型子元素到中间模型子元素的映射,采用了列表动作。

列表动作是一个递归过程,实现列表动作同样,列表动作类ListAction继承Action,并且重写了ConvertTo(ActionContext context)方法。首先遍历这个List,比如读取到一个SvgRect矩形类,取得SvgRect类到中间模型Rect类的动作,执行这个动作的ConvertTo(ActionContext context) 方法,这个动作是解析动作,如上所述即可处理。问题是如果读取的子元素还是一个List<SvgElement>类型的话,应该使用列表动作,递归地调用列表动作的ConvertTo(ActionContext context)方法,来递归的进行映射。

2.5 中间模型到VML模型的映射

建立中间模型到VML模型的映射,与建立SVG模型到中间模型的映射类似,映射的建立过程类似于SVG模型到中间模型。VML模型的属性基本都是采用字符串类型的,所以主要采用化字符串动作ToStringAction和列表动作。首先检测Graph类的各个属性,如果遇到非List类的,则采用化字符串动作,把一个类序列化成字符串,赋值到VML模型相对应的属性;如果遇到的是List类,则采用列表动作,在VML模型中生成对应的List类,而List类中的各对象则依次采用化字符串动作。上面整个为递归过程,和前面SVG模型到中间模型的实现过程类似。

3 SVG模型到VML模型的映射测试

前面建立了从SVG模型到VML模型的映射,同样需要对建立的映射进行测试以确保映射的正确性。SVG模型到VML模型的映射测试分为两部分,因为SVG模型到VML模型映射的建立本身就分为两个部分,SVG模型到中间模型的映射测试同样也是两个过程。这两个过程是类似的,以SVG模型到中间模型的映射测试为例,其代码如下:

第1行,建立一个中间模型的Graph对象;第2行把一个Element(比如矩形rect)加入到Graph对象的Children属性,SvgGraph.GraphMapper是一个对称映射;第3行利用这个对称映射把Graph转化成SvgGraph;第4行测试有没有成功生成SvgGraph对象;第5行再利用对称映射把SvgGraph对象转化为一个Graph对象g2:g2和g1是一个类的两个对象;第6行测试有没成功生成Graph对象;第7行测试两个对象是不是同一个引用,这里显然不是同一个引用,只是内容相同;第8行取出g2的一个子元素;第9行测试r1和r2是不是同一个引用,显然也不是同一个引用;第10行和第11行是递归测试其子元素的内容,它们之间相对应的属性内容必须相同。

4 结束语

映射模型 篇10

当前,国家电网建设正朝着以特高压电网为骨干网架,各级电网协调发展的坚强智能电网方向不断发展[1],具有显著信息化、自动化、互动化特征。随着经济发展,变电站数量越来越多,截止2012年,河南电网拥有110千伏及以上变电站1038座。电力调控中心除承担电力生产、输送调配等传统任务外,还增加了电网一、二次设备的日常运行监视和远程控制职责,变电站需要采集的信息量呈爆炸性增长[2]。海量的信息大大增加了智能变电站子站端和调度主站端的调试和运维工作量,并且容易出错。

本文针对因电网规模扩大和智能变电站信息量大增而引起的调试和运维工作量大、易出错的问题,结合不同级别调度职能需求,对智能变电站远传信息进行分级技术研究,制定远传信息的分级规则和系统解决方案;经过对变电站子站端(简称子站端)电网模型与实时数据库的映射研究及其他相关模型映射研究,在子站端远动系统开发相应软件模块,实现子站端信息分级和调度信息分级远传。

2 技术方案(Technical solution)

2.1 研究内容

子站端以IEC61850标准为基础,研究子站电网模型的扩展、统一和关联处理方法,并结合各级调度控制中心的职责,确定变电站信息编码规范、信息分级规则和相关配套技术。现在变电站监控信息远程多采用人工选点方式,已不适应目前大量信息远传的需要,需要进行创新性研究,主要内容如下:

(1)智能信息分类研究。

(2)子站电网模型(IEC61850)与实时数据库的映射研究。

(3)信息编码规范与实时数据库的映射研究。

(4)子站与主站的智能信息分级交互研究。

2.2 总体方案

为了实现智能变电站信息分级远传,需对子站端进行相应的信息模型研究并开发相应软件。子站端系统结构如图1所示。

子站端通过“IEC61850信息采集”获得全站信息,根据“IEC61850(子站电网模型)与实时数据库的映射文件(mapinfo.xml)”,存入“实时数据库(db)”,结合“智能信息分类研究(dbedit)”结果和“信息编码规范与实时数据库的映射研究”生成“信息编码规范与实时数据库的映射文件(map.xml)”,转换成准备上传的“IEC61970与信息编码规范的映射文件(cime.xml)”,子站端系统再结合“IEC61970(主站电网模型)与信息编码规范的映射研究”和“子站与主站的智能信息分级交互研究(IEC104)”把分级后的子站端信息送至主站端。

主站通过实时服务通信协议获得子站相关模型信息,然后在主站内部实现模型映射,限于篇幅具体转换规则不在此展开叙述,计划另撰文阐述[3]。

3 信息分级及子站端实现(Information classification)

电力调度分级划分为国调、网调、省调、地调、县调和集控,一般按照电压等级对变电站内不同设备信息进行分级采集,如图2所示。

子站端远动系统采集变电站的一次设备、过程层设备、间隔层设备及站控层设备的实时测控信息,通过实时数据库(db)与内置调度分级系统,根据不同调度需求和信息分类规则,生成各级调度转发数据库(zfdb),按调度规定的相应规约把站内信息送至各级调度中心。信息分类一般规则按一次设备(开关、刀闸、机构、测量等)、过程层设(GOOSE链路状态、SMV链路状态等)、间隔层设备(保护动作、保护告警、压板、装置告警、通信状态等)、站控层设备系统信息(通信状态、系统故障、系统告警等)进行划分。

4 子站端信息分级模块及映射研究(Model mapping)

根据智能变电站信息分级和各级调度采集规则,利用智能化信息分级远传软件系统实现信息分级以及远传功能。子站端软件主要包含五个模块:(1)智能信息分类功能模块;(2)全站信息建模功能模块;(3)远传分级建模功能模块;(4)IEC61970模型映射功能模块;(5)IEC104远传通信模块。各功能模块关系如图3所示。

智能化信息分类模块根据关键词和相关定义建立分类规则库,在全站信息建模时按分类规则自动实现全站信息的分类,并生成智能分类后的全站信息数据库(db),由远程分级模块对信息进行远程信息分级,通过IEC104远传通信模块及IEC61970模型映射功能模块把分级后的信息送至主站。子站各模块关系如图3所示。

4.1 子站端远传规约选择

变电站子站与调控主站间的通信协议采用电力系统实时数据通信应用层协议IEC104[4,5]。104规约应用服务数据单元(ASDU)结构一般结构如表1所示,由数据单元标识,一个或多个信息体和应用服务数据单元的公共时标所组成[4]。

为实现信息分级及控制功能IEC104规约扩充了两个ASDU:信息分级传送文件(ASDU54)和信息分级文件(ASDU127)。扩充ASDU的基本原则是不改变IEC104协议的帧结构和通讯流程。

(1)信息分级传送文件ASDU54

(2)信息分级文件(ASDU127)

4.2 子站端电网模型(IEC61850)与远动实时数据库的映 射研究

子站端电网模型(IEC61850)不对具体的通信技术和采用的通信协议做出限定,满足技术需要并能传输标准的信息模型,就可以使用该通信技术和协议,需要解释该通信技术和协议如何承载标准的信息模型,既映射问题[6]。子站端电网模型(IEC61850)与远动实时数据库(db)的关联关系,映射研究内容包括:(1)站内IED与实时数据库IED地址的映射;(2)遥测类的映射;(3)遥信类的映射;(4)遥控类的映射;(5)遥脉类的映射;(6)定值类的映射。如下:

(1)站内IED与实时远动数据库IED地址的映射

选择一个SCD文件查找到其中的IED名称进行IED映射,给每个IED分配IED地址。网关的名称命名为IED名称。如表2所示。

(2)遥测类的映射

遥测类的映射CDC类型:MV、CMV BSC、WYE、DEL等。如表3所示。

(3)遥信类的映射

CDC类型:SPS、DPS、SPC、DPC、INS、ACT、ACD。如表4所示。

(4)遥控类的映射

CDC类型:SPC、DPC、INC、BSC(遥调)、ISC(遥调)、APC等。如表5所示。

(5)遥脉类的映射

CDC类型:BCR,如表6所示。

(6)定值类的映射

映射定值数据集,是为了配合国内实施规范。如表7所示。

5 工程应用(Application)

在变电站子站端远动系统调试界面中增加调度分级配置功能,可以方便配置信息分级,如图4所示。

在某地区实际工程中,应用具备信息分级功能的子站远动系统后,减少子站运维人天数27人/天,大幅度降低了变电站子站端和调控主站端信息接入联调的工作量,提高了子站端信息远传的调试工作质量和效率,节约了运行维护的成本。

6 结论(Conclusion)

本文在目前智能变电站数量和调度信息量激增的情况下,根据不同调度主站端职能和对智能变电站信息远传的要求,提出了一种在子站端进行信息分级和远传方案。通过进行子站端电网模型(IEC61850)与实时数据库(db)映射研究,分析了站内IED与实时数据库IED地址、遥测类的映射、遥信类、遥控类、遥脉类、定值类的映射;子站端开发相应软件模块,实现基于调度信息分级规则、IEC104扩展协议的子站端调度信息的自动分级处理及远传。

摘要:本文结合智能变电站的信息特点和各级调度职能要求,提出了一种在智能变电站子站端对调度信息进行分级和远传的方案。在子站端开发信息分级功能模型和软件处理模块,对子站端电网模型(IEC61850)与实时数据库的进行模型映射研究,在子站端实现了调度信息的分级,并通过IEC104扩展协议实现与调度主站端的信息远传。

上一篇:科学研究中的美学功能下一篇:热水锅炉的操作与管理