发明名称 一种基于DXF文件格式的读取与XML转换的方法
摘要 一种基于DXF文件格式的读取与XML转换的方法,涉及使用CAD工程制图的各类工程技术领域,本方法把DXF文件结构当作一种形式语言来处理,使用3型文法描述DXF文件结构,使用有限状态自动机对DXF文件内容进行识别,即顺序读入DXF文件的字符,一对组码和组值为一组,按组循环,根据读入的组码和组值,进行事件推进,状态转移以及事件处理,输出XML格式的文件,直到文件读入字符为EOF。这就进行了DXF格式到XML格式的转换。本发明能够有效的处理非标准的DXF文件,具有通用性、灵活性、可扩充性和可移植性。转换后的XML文件格式良好,结构清晰,使得用户专用软件,各类工程软件进行有效数据的提取变得十分简易,不必花费大量时间研究DXF组码和组值结构,降低了开发成本。
申请公布号 CN101944080A 申请公布日期 2011.01.12
申请号 CN201010271291.X 申请日期 2010.09.02
申请人 北京科技大学 发明人 班晓娟;龙永霞
分类号 G06F17/22(2006.01)I;G06F17/50(2006.01)I 主分类号 G06F17/22(2006.01)I
代理机构 北京东方汇众知识产权代理事务所(普通合伙) 11296 代理人 刘淑芬
主权项 一种基于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});上面五元表达式中每个变元的具体含义如下:1){ROOT,SECTION,ENTITIES,ENTITY,ENTITYPROPERTY}代表了五个不同的状态,每一状态都作为程序中状态类的一个具体实例;ROOT为根状态,SECTION为DXF文件结构中的一个段,ENTITIES为DXF文件结构中具体的段结构,,ENTITY为具体的图元类型,ENTITYPROPERTY为子类;2){(0,SECTION),(2,ENTITY),(0,*),(100,ACDB*),(0,ENDSEC)}代表了五个不同的状态转移事件;3)f代表了状态转换函数,状态集合用Q表示,输入字符集合用∑表示,状态转换函数是QX∑到Q的映射;4)ROOT代表了整个有限状态自动机的起始状态;5){ROOT}代表了整个有限状态自动机的终态集合;实现有限状态自动机对DXF文件进行解析转换,使用相应的数据结构存储状态,事件以及状态转换函数;在事件发生之时,进行事件处理,事件处理中需要输出XML格式,因此结合XML格式有开始标签必须有结束标签的特性,利用栈的先进后出的原理,使用栈记录向子节点移动的深度,以及每一层的状态,出栈时结束标签,实现XML格式的有效性;方法步骤如下:步骤一:初始化状态集、事件集、状态转换函数集,以当前状态为开始状态ROOT;步骤二:从DXF文件读入一对组值组码,触发事件的产生;步骤三:根据当前状态和步骤二中读入的组值组码,在当前状态的状态转换函数集中找到下一状态,进行状态转移,把下一状态作为新的当前状态,并且调用事件处理类进行事件处理;步骤四:循环执行步骤二、步骤三,直到文件读入字符为EOF时,执行步骤五:步骤五:程序结束,输出XML文件;所述的状态集为状态的集合,状态包括:唯一标识名字Name;状态转换函数集nextStateTable;所述的事件集为事件的集合,事件包括组码和组值;所述的状态转换函数集为状态转换函数的集合,状态转换函数包括:下一状态名StateName,事件处理类型Type;StateName:记录下一状态;Type:type为1时,进栈,输出开始标签;type为2时,出栈,输出闭合标签;type为3时,先输出闭合标签,在输出开始标签,栈不动;type为4时,无动作;所述的事件处理:用作事件处理,决定着输出的格式;事件处理需要输入参数:组码组值,事件处理类型type,下一状态;当type=1时,从父节点状态向子节点状态转移时,子节点状态进栈,同时输出该子节点在xml文件中的开始标签,标签名为状态名字;从前列状态向后续状态移动,状态转移的同时读取组码、组值、状态名,并将这三者分别压入对应的堆栈中,同时输出该状态对应在xml文件中的开始标签,标签名为状态名字,,其中VARIABLE状态比较特别,他不会作为标签名,而是以对应该状态的组码值作为标签名;当type=2时,从子节点状态向祖先节点状态转移时,出栈,同时输出当前出栈状态在XML文件中的闭合标签;循环出栈,直到该祖先状态出栈为止;从后续状态向前列状态移动,状态转移的同时将组码、组值、状态名对应的堆栈中的信息弹出,同时输出该状态对应在xml文件中的闭合标签;当type=3时,在一个状态转移到自身时,输出前一状态的内容,再输出前一状态在XML文件中的闭合标签,再输出当前状态在XML文件中的开始标签,栈不动;在同一状态自身循环移动,状态转移的同时将前一状态对应的组码、组值、状态名对应的堆栈中的信息弹出,同时输出该子节点在xml文件中的闭合标签,再读取下一状态的组码、组值、状态名,并将这三者分别压入对应的堆栈中,同时输出该状态对应在在xml文件中的开始标签,标签名为状态名字,其中VARIABLE状态比较特别,他不会作为标签名,而是以对应该状态的组码值作为标签名。
地址 100083 北京市海淀区学院路30号