一种基于DXF文件格式的读取与XML转换的方法技术

技术编号:4088401 阅读:1291 留言:0更新日期:2012-04-11 18:40
一种基于DXF文件格式的读取与XML转换的方法,涉及使用CAD工程制图的各类工程技术领域,本方法把DXF文件结构当作一种形式语言来处理,使用3型文法描述DXF文件结构,使用有限状态自动机对DXF文件内容进行识别,即顺序读入DXF文件的字符,一对组码和组值为一组,按组循环,根据读入的组码和组值,进行事件推进,状态转移以及事件处理,输出XML格式的文件,直到文件读入字符为EOF。这就进行了DXF格式到XML格式的转换。本发明专利技术能够有效的处理非标准的DXF文件,具有通用性、灵活性、可扩充性和可移植性。转换后的XML文件格式良好,结构清晰,使得用户专用软件,各类工程软件进行有效数据的提取变得十分简易,不必花费大量时间研究DXF组码和组值结构,降低了开发成本。

【技术实现步骤摘要】

本专利技术涉及使用CAD工程制图的各类工程
,DXF(drawing exchange format)图形交换文件格式在不同的CAD软件间进行图形数据交换,实现资源共享。本技术 实现DXF图形交换文件转换成XML文件,有利于使用XML数据挖掘技术提取其有效数据,形 成数据仓库,用于各类工程专用软件。
技术介绍
本专利技术基于城市交通标志标线智能评价系统,实现从设计人员交付的交通道路 CAD图提取有效数据而专利技术的。不同CAD软件的文件格式不尽相同,出于商业考虑,一般其标准格式文件都没有 公开。由于产品扩展的需要,CAD软件一般都提供二次开发工具来读取其数据,如AutoCAD 的DWG文件,可以使用AutoDesk公司提供的Ob jectARX、AutoLisp或VBA,通过编程来读取 信息。把读取的数据转储至预定义好结构的关系型数据库中。这样,工程图形文件的数据 挖掘就转化为关系型数据的挖掘。这种处理方式有其局限性,需依赖于CAD软件,不支持所 有字节的读取;并且由于各种CAD软件各不相同,需按不同的方式来处理,给数据挖掘带来 了不便。AutoCAD 采用了 DXF (drawing exchange format)图形交换文件格式在不同的 CAD 软件间进行图形数据交换。随着AutoCAD软件的日益流行,DXF文件事实上已成为国际通 用的图形数据交换标准。DXF文件本质是一种ASCII文本文件,但它与普遍的文本文件又不尽相同,它是一 种有限结构的文件,具有层次性,对各种参数的描述是用代码(组码)和与代码相关联的值 (组值)构成,组码和组值联合起来表示一个数据的含义和数据的值。很多软件直接把DXF 作为挖掘对象,通过文本挖掘工具对DXF进行数据挖掘,提取其中的有效数据,供工程图的 应用系统使用。这种方式不足之处是①虽然文本挖掘技术已经比较成熟,但挖掘数据的难 度还是较大;②在提取数据时,需多次对DXF格式的文本文件进行操作,对文本文件操作效 率较低。
技术实现思路
本专利技术所要解决的技术问题是提供一种可以从任何CAD图形文件转换成XML文 件,方便提取出有效数据,实现资源共享的通用方法。本专利技术不受CAD图形文件各个版本的限制,对所有的CAD图都能够转换成格式良 好的XML文件。转换后的XML文件,格式良好,数据结构清晰,使得数据挖掘提取变得十分简易。本专利技术可以广泛用于各类工程软件当中。本专利技术的技术方案是1.技术方案目标如图1所示,左图是原DXF文件数据格式截图,右图为转换后的XML文件数据格式截图。从图中可以看出,转换后的XML文件数据格式已经较为容易阅读, 而实际上,从计算机软件来看,对XML文件进行数据挖掘要比文本格式的DXF文件容易得^^ ο2.技术方案原理要实现DXF文件转换成XML文件这样的功能,类似于计算机程 序运行的编译阶段,如图2所示。日常通用的自然语言是人们交流思想的主要工具,自然语言复杂,往往难以进行 描述。而人与计算机打交道的程序设计语言则具有语法严格、结构正规、便于计算机处理的 特点,而DXF文件数据格式也具有程序设计语言一样的特性。由于程序设计语言和自然语 言存在共性,语言的核心是由语法和语义两部分组成。语法是语言的形式,语义是语言的内 容,以语法为媒介来说明语义是语言的实质。语言是由具有独立意义的单词根据一定的语 法规则构成的表达一定意义的句子组成的集合。给定字母表Σ,一个语言可看做是Σ *中的 某个子集。要分析语言就要知道其结构,文法就是一种能够用有限规则来展现出语言的结 构的形式。语言学家乔姆斯基(Avram Noam Chomsky)对某些自然语言进行研究的基础上, 提出了一种用于描述语言的数学系统,并以此定义了 4类不同的文法和语言。乔姆斯基分 类,即将文法按状态转换函数的不同具体分成4类,4类文法对应4种类型的语言,且有相应 的自动机来识别。从O型到3型,其后一类都是前一类的子集,且限制是逐步增强的,而描述 语言的功能是逐步减弱的。确定的有限状态自动机(Deterministic Finite Automation, DFA)是一个具有离散输入、输出系统的数学模型,它是4类文法的识别装置中最基本、最重 要的一种。而DXF文件的数据完全可以使用3型文法来表达,因此可以把DXF文件数据当 成一种语言来识别,而使用的识别装置就是确定的有限状态自动机。3.技术方案设计与实现第一步根据DXF文件的格式,设计出能够识别该DXF数据格式的3型文法,这里 用状态转换图来表示,设计的状态转换图见图6至图12。状态在DXF文件格式中,每一个有子节点的图元组码,设计成一个状态。输入字符DXF文件数据的输入流,将一对组码组值设计成为一个输入字符。状态转换函数根据当前状态和输入字符确定下一个状态。初态初始状态ROOT。终态结束状态ROOT。一个确定的有限状态自动机M(DFA M)是一个五元组M= (Q, Σ, f, q0, Ζ)其中,Q为状态的有限集合,每个元素称为一个状态;Σ为输入字符的有限集合, 每个元素是一个输入字符;f为状态转换函数,是一个从QX Σ到Q的映射。q0为M的唯一 初态,q0 e Q ;Z为M的终态集,Z是Q的子集。对于DXF文件结构使用状态转换图和五元表达式进行描述,其中状态按照DXF文 件结构本身的逻辑含义进行设计,不违背原本的语义。设计原则是,具有包含关系或者循环 并列关系的设计为一个状态,每个状态中DXF文件中都能够找到原型,每个状态的名字与 DXF文件结构说明文档中结构名字一致。状态具体说明如下ROOT为新增的一个状态,作为根状态;SECTION为DXF文件结构中的一个段;HEADER, CLASSES, ENTITIES, BLOCKS, OBJECTS, TABLES 为 DXF 文件结构中具体的 段结构;段内结构的状态详见每个段的解析。ENTITIES段该有限状态自动机所对应的状态图如图3所示。五元表达式为M = ({ROOT, SECTION, ENTITIES, ENTITY, ENTITYPROPERTY},{(0,SECTION),(2, ENTITY),(0,*),(100,ACDB*),(0,ENDSEC)}, f, ROOT, {ROOT})上面五元表达式中每个变元的具体含义如下(1) {ROOT, SECTION,ENTITIES,ENTITY,ENTITYPROPERTY}代表了五个不同的状态, 每一状态都作为程序中状态类的一个具体实例;其中ENTITY为具体的图元类型,如LINE, LffPOLYLINE 等,ENTITYPROPERTY 为子类。(2) {(0,SECTION),(2,ENTITY),(0,*),(100,ACDB*),(0,ENDSEC)}代表了五个 不同的状态转移事件;(3) f代表了状态转换函数,状态集合用Q表示,输入字符集合用Σ表示,状态转换 函数是QX Σ到Q的映射;其中f为f (ROOT, (0,SECTION)) = SECTIONf (SECTION, (2,ENTITIES)) = ENTITIESf (ENTITIES, (0,*)) = ENTITYf (ENTITIES, (0,ENDS本文档来自技高网
...

【技术保护点】
一种基于DXF文件格式的读取与XML转换的方法,其特征在于:使用3型文法对DXF格式进行描述,使用有限状态自动机根据状态转换图对DXF文件进行解析,在事件发生,状态转移之时,进行事件处理,输出XML格式;其中DXF实体段的五元表达式为M=({ROOT,SECTION,ENTITIES,ENTITY,ENTITYPROPERTY},{(0,SECTION),(2,ENTITY),(0,*),(100,ACDB*),(0,ENDSEC)},f,ROOT,{ROOT});上面五元表输出的格式;事件处理需要输入参数:组码组值,事件处理类型type,下一状态;当type=1时,从父节点状态向子节点状态转移时,子节点状态进栈,同时输出该子节点在xml文件中的开始标签,标签名为状态名字;从前列状态向后续状态移动,状态转移的同时读取组码、组值、状态名,并将这三者分别压入对应的堆栈中,同时输出该状态对应在xml文件中的开始标签,标签名为状态名字,其中VARIABLE状态比较特别,他不会作为标签名,而是以对应该状态的组码值作为标签名;当type=2时,从子节点状态向祖先节点状态转移时,出栈,同时输出当前出栈状态在XML文件中的闭合标签;循环出栈,直到该祖先状态出栈为止;从后续状态向前列状态移动,状态转移的同时将组码、组值、状态名对应的堆栈中的信息弹出,同时输出该状态对应在xml文件中的闭合标签;当type=3时,在一个状态转移到自身时,输出前一状态的内容,再输出前一状态在XML文件中的闭合标签,再输出当前状态在XML文件中的开始标签,栈不动;在同一状态自身循环移动,状态转移的同时将前一状态对应的组码、组值、状态名对应的堆栈中的信息弹出,同时输出该子节点在xml文件中的闭合标签,再读取下一状态的组码、组值、状态名,并将这三者分别压入对应的堆栈中,同时输出该状态对应在在xml文件中的开始标签,标签名为状态名字,其中VARIABLE状态比较特别,他不会作为标签名,而是以对应该状态的组码值作为标签名。达式中每个变元的具体含义如下:1){ROOT,SECTION,ENTITIES,ENTITY,ENTITYPROPERTY}代表了五个不同的状态,每一状态都作为程序中状态类的一个具体实例;ROOT为根状态,SECTION为DXF文件结构中的一个段,ENTITIES为DXF文件结构中具体的段结构,ENTITY为具体的图元类型,ENTITYPRO...

【技术特征摘要】

【专利技术属性】
技术研发人员:班晓娟龙永霞
申请(专利权)人:北京科技大学
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利