CN100458786C - 基于应用定制解析xml文档的方法及装置 - Google Patents
基于应用定制解析xml文档的方法及装置 Download PDFInfo
- Publication number
- CN100458786C CN100458786C CNB2006100925633A CN200610092563A CN100458786C CN 100458786 C CN100458786 C CN 100458786C CN B2006100925633 A CNB2006100925633 A CN B2006100925633A CN 200610092563 A CN200610092563 A CN 200610092563A CN 100458786 C CN100458786 C CN 100458786C
- Authority
- CN
- China
- Prior art keywords
- label
- tag
- node
- value
- substring
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/14—Tree-structured documents
- G06F40/143—Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种新的XML解析器SpeedXMLParser及其解析实现方法,此解析器提供XML文档解析方法ParseInstruction中能通过参数instruction来进行XML文档的定制解析,解析器根据参数instruction生成UserInstruction树,然后根据UserInstruction树进行XML文档的定制解析过程,并建立SpeedXMLParser内存树结构(类似DOM)便于XML文档数据的处理如:随机访问XML文档数据;查、改、删XML文档数据等。此发明具有较大提高XML文档解析性能,从而改善计算机的数据处理性能的技术益处。
Description
技术领域
本发明总的来说涉及文档数据处理领域,更具体地说,涉及一种新的不同于当前普遍使用的SAX(Simple API for XML)和DOM(Document Object Model)方式的XML文档解析实现方法及其解析装置,具有可基于定制的应用要求(例如用户定制的解析要求)进行解析并且提高XML文档解析性能的特点。
背景技术
XML(可扩展的标记语言)是一种结构化的文本标签语言,主要由标签、标签值、属性、属性值、特殊处理指令、注释等构成,由于其开放性,可扩展性,语法严格等优势,目前已经广泛用于各种数据存储和数据通信领域。
目前XML的数据解析有两种主流技术:SAX(Simple API forXML)和DOM(Document Object Model),两种技术实现原理不同,如图1所示:
SAX基于事件触发方式进行解析,输入XML文档100,经过SAX解析器101,解析器顺序的从XML文档中读数据,当发现特殊符号(如标签的开始,结束等)出现,则以事件的方式向应用层模块103进行通报,当应用层处理完成后返回SAX解析器继续后续的处理,直到文档结束或者应用层要求终止解析过程。
DOM则将XML文档100一次性的经过DOM解析器102解析成一个保存在内存中的对象树104,对象树的节点总是XML文档某一部分的映射,节点的层次性恰好反映了XML文档的结构,对XML的随机操作转化为对DOM树的操作。
两项技术的优缺点如下表1,可以看出,除了性能方面差一些外,DOM比SAX具有明显的优势,因而成为目前主流的XML解析器得到了大量应用。
项目 | SAX | DOM |
解析效率 | 相对较高 | 相对较低 |
对内存的需求 | 低 | 高,需要在内存中构造DOM树 |
应用层能否中断解析过程 | 可以 | 不可以 |
与应用层的关系 | 与应用层之间存在一个紧耦合的回调关系 | 独立于应用层 |
能否提供随机访问XML文档数据 | 只提供顺序访问方式 | 提供随机访问 |
操作XML文档数据的能力 | 通常只提供查询接口 | 能提供查,改,删XML文档数据接口 |
表1:SAX和DOM技术的优缺点
发明内容
根据上述的背景技术分析,本发明目的在于提供一个可扩展的API接口,通过此接口既能提供类似DOM的强大XML数据处理能力(随机访问XML文档数据;能查、改、删XML文档数据),又能尽可能提高XML文档的解析速度和XML数据的查询速度,从而增强计算机的数据处理性能。
本发明的技术方案是:提供一个SpeedXMLParser接口给用户,在此接口中的XML解析过程ParseInstruction方法的接口参数中提供一个用户定制特性参数instruction,由此参数指明应用需要解析哪些标签及其属性的值,解析器只解析应用指定的XML文档部分而忽略XML文档的其他部分,图2描述了SpeedXMLParser与DOM的解析树的区别。
概括地说,根据本发明的第一方面,提供一种解析文档的方法,该方法按照定制的应用要求,对XML文档进行定制解析,该方法包括步骤:
按照定制的应用要求确定对所述XML文档进行解析的范围;
基于所确定的解析范围对所述XML文档进行解析,以便从所述XML文档获得与所述应用要求相匹配的信息。
根据本发明的第二方面,提供一种用于解析XML文档的文档解析装置,用于按照定制的应用要求,对XML文档进行定制解析,所述文档解析装置包括:
解析指令树生成单元,用于按照定制的应用要求产生解析XML文档所需的解析指令树;
文档解析单元,用于按照由所述解析指令树生成单元产生的所述指令树来解析XML文档,以从所述XML文档获得与所述应用的要求相匹配的信息。
本发明的解析方法和解析装置根据定制的应用要求对符合特定语法规则的文档进行解析,从而提高解析效率,改善计算机数据处理性能。
附图说明
通过结合构成本发明的一部分的附图对本发明的具体实施例的描述,本发明的目的、特征及其技术益处将会变得明显。在各附图中:
图1是示出现有技术中SAX和DOM技术实现的原理图;
图2是示出通过根据本发明的解析方法的解析器SpeedXMLParser构建的解析树与DOM构建的解析树的区别的图;
图3是示出根据本发明的解析方法的解析器SpeedXMLParser提供的应用程序接口的示意图;
图4是示出在根据本发明的解析方法中利用解析器SpeedXMLParser对XML文档进行解析的过程的示意图;
图5是示出在根据本发明的解析方法中对UserInstruction的定义以及UserInstruction树的结构的图;
图6是示出在根据本发明的解析方法中构建UserInstruction树的流程图;
图7和图8是示出根据本发明的解析方法利用解析器SpeedXMLParser对XML文档进行解析的详细流程图;
图9是示出根据本发明的解析方法利用解析器SpeedXMLParser解析示例XML文档所生成的内存树结构的图,其中参数instruction=″/物品列表/(书籍<a>),((电脑<a>)/(配置))″
图10是示出了用于实现本发明的解析方法的解析装置的示意结构框图。
具体实施方式
下面结合各附图对本发明的具体实施方式进行详细描述。
图2示出通过根据本发明的解析方法利用解析器SpeedXMLParser构建的解析树与DOM构建的解析树的区别。如图2所示,假设输入的XML文档有18种标签,则DOM将究全解析成DOM树结构200(当然同一种标签可能多个值,图中没有标出),但是实际上某一应用或者应用的某一模块只需要用到了0,4,6三种标签的数据,则利用实现本发明的解析方法的解析器SpeedXMLParser将输入的XML文档解析为树结构201。可以看到,本发明的方法在原DOM树结构200中的3,5,7标签下只解析成一个节点而没有继续深入解析为子树,从而大大减少了解析工作量,提高解析效率。
在很多以XML文档作为接口数据交换的实际应用系统中,应用系统的某一构件或者构件中的某一模块可能只关心输入XML数据流的一部分数据项而不是全部的XML数据项,采用DOM处理方式需要解析XML文档的所有标签和属性,包括本应用系统不需要用到的XML数据项,而使用实现本发明的解析方法的解析器SpeedXMLParser则可避免这部分对应用系统无用的性能损失。
为了能够说明清楚问题,先按照XML的规则构造如下一个XML文档,后面将围绕这个例子对本发明进行详细说明:
<?xml version=″1.0″encoding==″UTF-8″?>
<物品列表>
<书籍 尺寸=″16开″>
<名称>自传书</名称>
<价格 单位=″人民币″>10.9</价格>
<作者 性别=″男″出生日期=″1949″>Jupiter</作者>
<作者>Felicity</作者>
<出版社><名称>商业出版社</名称><城市>深圳</城市></出版社>
</书籍>
<书籍>
<名称>史记</名称>
<作者 性别=″男″>司马迁</作者>
</书籍>
<电脑 质保期=″3年″>
<型号 厂商=″DELL″颜色=″黑″>D400</型号>
<配置>
<CPU>Pentium</CPU>
<Memory容量=″256″/>
</配置>
</电脑>
<照相机><厂商>柯达</厂商><型号>DX6490</型号></照相机>
</物品列表>
(1)应用接口描述
图3以UML(统一建模语言)方式描述了提供的应用程序接口,其中String类为字符串类,InputStringStream为字符串输入流,ElementList为Element的一个链表,是链表类的一个具体应用,同理,AttributeList为Attribute的一个链表,字符串类,链表类和字符串输入流在标准面向对象支持语言如C++/Java已经得到支持。
SpeedXMLParser为XML文档解析的入口,变量定义:
类变量 | 描述 |
Root:Element* | 用于保存解析XML文档的根节点信息,初始化为空值(NULL) |
Mode:int | 当需要解析子标签时,建立快速索表的种类(Element的类变量Value保存指向此表的指针),可能取值有:1)HASH_MODE:快速索引表的种类为哈希表,以内存换速度,达到更好的搜索效率;2)SORT_MODE:快速索引表的种类为字符串排序表(升序或降序) |
SpeedXMLParser的方法定义:
Element用于保存SpeedXMLParser树的一个节点,可以是叶节点或者子树的根节点,它对应XML文档的一个标签,Element变量定义:
类变量 | 描述 |
Name:String | 用于保存本节点的标签名 |
IfParseAttr:bool | 标志是否需要解析此标签的属性 |
Attribute:void* | 用于保存本节点的属性,有两种可能:1)如果IfParseAttr=true,即需要解析标签属性,则Attribute为AttributeList*类型;2)如果IfParseAttr=false,即不需要解析标签属性,则Attribute为String*类型,指向的字符串为整个标签属性,如:容量=″256″ |
IfParseValue:bool | 标志是否需要解析此标签的子标签; |
Value:void* | 用于保留本标签的值,有两种可能:1)如果IfParseValue=true,即需要对子标签进行解析,则Value为指向一个快速索引表,索引表的类型可能是哈希表或者字符串排序表,由SpeedXMLParser的类变量Mode指明创建哪一种快速索引表,索引表的功能建立一个<tagElementList*>的二维对应关系,即能够通过标签名tag搜索其对应的ElementList*指针,此指针指向tag对应的XML数据的节点列表;2)如果IfParseValue=false,即不需要对子标签进行解析,则Value为String*类型,用于保存本标签的开始标签与结束标签之间的子字符串,即使此子字符串可能包含子标签也不进一步解析,如可能保存的子字符串为:″<厂商>柯达</厂商><型号>DX6490</型号>″ |
Element方法定义:
Attribute用于保存某个标签的一个属性值,Attribute变量定义:
类变量 | 描述 |
Name:String | 用于保存本节点的标签属性名 |
Value:String | 用于保存本节点的标签属性值 |
使用以上接口,应用操作XML文档数据的伪代码如下:
//instream已经包含待解析的XML文档数据
SpeedXMLParser*parser=new SpeedXMLParser();
parser->ParseInstruction(instream,″/物品列表/(书籍<a>),((电脑<a>)/(配置))″,HASH_MODE);
//得到“书籍”列表的顺序第一个节点(名为“自传书”)
Element*pBook=parser->GetElement(″/物品列表/书籍″,0);
if(!pBook)
{
//返回“自传书”的属性名为“尺寸”的值(″16开″)
String*pAttrValue=pBook->GetAttributeByName(″尺寸″);
//得到“作者”列表的顺序第二个节点(名为“Felicity”)
Element*pAuthor=pBook->GetSonNodeByName(″作者″,1);
if(!pAuthor)
//返回此“作者”元素的第一个值“Felicity”
String*pValue=pAuthor->GetValueString();
//…
}
delete parser;
(2)SpeedXMLParser::ParseInstruction方法中用户定制解析参数instruction的定义
语法使用RFC2234的Backus-Naur Form(BNF)定义如下:
instuction=″/″rootTag[″/″sonTagList]
sonTagList=sonTag[″,″sonTagList]
sonTag=″(″tagString[″/″sonTagList]]″)″
rootTag=tag
tagString=tag[″<a>″]
tag=与W3C的XML规范对标签的定义一致,但是不包含′/′,’<’和’>’,’(’和’)’字符
rootTag为根标签,sonTag为子标签,子标签本身可以递归,<a>的含义是要求解析器解析此标签的属性值。
依照此语法,举例说明instruction的含义如下表:
instruction | 含义 |
″/物品列表″ | 要求解析器:只解析根标签“物品列表”的所有下一级子标签 |
″/物品列表/(书籍<a>)″ | 要求解析器:解析根标签“物品列表”的所有下一级子标签;以及子标签“书籍”的属性,和“书籍”所有下一级子标签 |
″/物品列表/(书籍<a>),(电脑)″ | 要求解析器:解析根标签“物品列表”的所有下一级子标签;以及解析子标签“书籍”的属性和“书籍”所有下一级子标签;以及解析子标签“电脑”的所有下一级子标签; |
″/物品列表/(书籍<a>),((电脑<a>)/(配置))″ | 要求解析器:只解析根标签“物品列表”的所有下一级子标签;以及解析子标签“书籍”的属性和“书籍”所有下一级子标签;以及解析子标签“电脑”的属性和所有下一级子标签;以及解析标签“配置”的所有下一级子标签。 |
(3)SpeedXMLParser::ParseInstruction方法的XML文档总体解析过程
图4是示出在根据本发明的解析方法中利用SpeedXMLParser对XML文档进行解析的过程的示意图。如图4所示,该解析过程包括两大步骤:
步骤S400:解析接口instruction参数,构造UserInstruction树;
步骤S401:根据在步骤S400构造的UserInstruction树进行XML文档的定制解析过程,并建立SpeedXMLParse内存树结构;
(4)构造UserInstruction树
图5是示出在根据本发明的解析方法中对UserInstruction的定义以及UserInstruction树的结构的图。
方框500描述了UserInstruction的定义:
类变量 | 描述 |
TagName:String | 用于保存解析XML文档的标签信息,初始化为空值(NULL) |
IfNeedParseAttr:bool | 标志是否需要解析此标签的属性 |
Son:UserInstructionList* | 指针指向此标签需要解析的下级子标签列表,UserInstructionList是List的一个具体应用 |
方框501描述当参数instruction等于″/物品列表/(书籍<a>),((电脑<a>)/(配置))″时解析生成的UserInstruction树的结构。
下面参照图6描述UserInstruction树的构造过程。
如图6所示,从参数instruction中读起始子字符串(步骤S600),判断读出的子字符串的值(步骤S601):
如果子字符串值为空,或不是″/tag″格式且不以″/tag/″为首的字符串,错误退出(步骤S602);
如果子字符串值为″/tag″格式,创建UserInstruction树根节点,并且设置根节点数据元素TagName的值为″tag″、IfNeedParseAttr的值为false、Son为NULL,结束UserInstruction树的构造正常退出(步骤S603);
如果子字符串值以″/tag/″为首的字符串,创建UserInstruction树根节点,并且设置根节点数据元素TagName的值为″tag″、IfNeedParseAttr的值为false、Son指向一个新创建的UserInstructionList,以instruction剩余的子字符串作为输入参数(步骤S604),逐级构造UserInstruction树其余各层子节点(步骤S605)。
步骤S605逐级构造UserInstruction树子节点的详细方法如下:
1)读输入参数字符串数据,忽略分隔符逗号(′,′),判断从字符串中读出的子字符串是否以′(′为首的字符串?
1.1)如果是′(′为首的字符串,扫描后续的字符,直到发现有匹配的′)′字符出现,则把此匹配的′(″)′之间的字符串读出,没有匹配的′)′则出错退出处理,′(″)′匹配的含义是:a)分割的子字符串中必须以′(′为首′)′为尾的字符串,′(″)′之间的子字符串包含相同个数的′(″)′;b)内部的每一对′(″)′之间的子字符串也都匹配。
比如有如下输入字符串,则本次读出的匹配子字符串为:
输入字符串 | 本次读出的匹配子串 |
(tagString1/(tagString2),(tagString3)),(tagString4/(tagString5)) | tagString1/(tagString2),(tagString3) |
(tagString4/(tagString5)) | tagString4/(tagString5) |
(tagString5) | tagString5 |
进一步判断本次读出的匹配子串,如果子串中不包含字符′/′,进入1.2.1)步骤处理;如果子串中包含字符′/′,重新进入1)步骤处理;
1.2)如果不是′(′为首的字符串,判断是否符合″tagString″格式,或者以″tagString/″为首的字符串;
1.2.1)如果是″tagString″格式,则创建UserInstruction子节点,子节点变量TagName保存″tagString″的″tag″部分字符串,如果″tagString″包含″<a>″,则子节点变量IfNeedParseAttr置为true,子节点变量Son置为NULL,并且把此节点加入到上级节点Son指向的UserInstructionList列表中;
1.2.2)如果是″tagString/″格式,则创建UserInstruction子节点,子节点变量TagName保存″tagString″的″tag″部分字符串,如果″tagString″包含″<a>″,则子节点变量IfNeedParseAttr置为true,子节点变量son指向一个空的新创建的UserInstructionList链表,并且把此节点加入到上级节点Son指向的UserInstructionList列表中,然后顺序读参数instruction中后续的子字符串,并且忽略′(′之前的′,′重新进入1)步骤处理;
1.2.3)不是以上格式,错误退出;
(5)XML文档的解析过程
XML解析过程如图7,图8所示:
1)从参数输入字符串流instream中读出有效子字符串(步骤S700),“有效子字符串”的含义是需要解析器:
a)忽略特殊指令语句<?Statements?>
b)忽略注释语句<!--Statements-->
c)忽略特殊指令语句<%Statements%>
d)忽略语句<![CDATA[Statements]]>
e)读出的子字符串应该为以下几种:开始标签(包括属性),结束标签,标签值。注意空标签也属于以”<tag”为首的开始标签。例如,在前面的XML文档中,<Memory容量=″256″/>是一种空标签。
f)如果出现不符合XML的语法则出错退出。
g)如果到instream的末尾则出错退出。注意,如果是一个合法的XML文档,则文档的正常解析应该在解析器的流程控制中结束。如果解析器还需要从instream读取字符串,则说明解析器还没有读到整个XML的结束标签,但此时instream已经到输入流的结束,说明不是一个合法完整的XML文档,故出错退出。
2)判断读出的有效子字符串(步骤S701),如果不是开始标签,则出错退出(步骤S703);如果是开始标签,进一步判断UserInstruction树的根节点的数据成员TagName是否与读出的开始标签名一致(步骤S702),如果不一致,则出错退出(步骤S703);如果一致,成员Root指向一个新创建的根节点,设置根节点数据成员Name为开始标签名、IfParseAttr为false、Attribute为NULL。进一步判断此根开始标签是否为空标签(步骤S704)。
3)如果是空标签,相当于字符流以如下样式开始:″<rootTag/>″,,设置根节点的IfParseValue为false、Value为NULL,结束解析,正常退出(步骤S705)。
4)如果不是空标签,继续从instream参数中读有效子字符串(步骤S706);
5)判断读出的有效子字符串是什么(步骤S707):如果是标签值,相当于字符流以如下样式开始:″<rootTag>rootValue″,则直接使根节点的数据成员IfParseValue为false、Value指向此标签值字符串,继续继续从instream流中读有效子字符串,判断是否是根标签的结束标签,是则结束解析正常退出,忽略instream未处理的后续字符流;如果不是根标签的结束标签,则出错退出(步骤S708);
6)如果步骤S707读出的有效子字符串是结束标签,相当于字符流以如下样式开始:″<rootTag></rootTag>″,则判断是否是根节点的结束标签,是则设置根节点的数据成员IfParseValue为false、Value为NULL,结束解析,忽略instream未处理的后续字符流;不是根节点的结束标签则出错退出(步骤S709)。
7)如果步骤S707读出的有效子字符串是开始标签,相当于字符流以如下样式开始:″<rootTag><subTag>″,设置根节点的数据成员IfParseValue为true、Value指向一个新创建的快速索引表(快速索引表的类型由SpeedXMLParse的变量Mode指明,以下同),然后循环从参数instream的字符流中读有效子字符串生成其余各层子节点(步骤S710)。
图8示出生成各层子节点的具体处理过程的流程图,步骤S710后续处理为步骤S805,详细描述如下:
1)继续从参数instream字符流中顺序读有效子字符串(步骤S800);
2)步骤S801判断读出的子字符串是否是结束标签,是则进一步在步骤S802判断是否是为根标签的结束标签?是根标签的结束标签则结束解析正常退出(步骤S804),忽略instream未处理的后续字符流;不是根标签的结束标签则错误退出(步骤S803)。
3)如果步骤S801判断读出的子字符串不是结束标签;则判断读出的子字符串是否是开始标签(步骤S805),不是开始标签则错误结束(步骤S809),是开始标签则判断此标签在UserInstruction树的此层是否有此标签(步骤S806);
4)步骤S806判断此标签不在UserInstruction树的此层中,表明应用不要求进一步解析此标签的子标签,则步骤S807进一步判断是否读出子字符串为空标签,是则创建不解析属性和子标签的子节点,并把此节点加入到上级节点Value指向快速索引表此标签对应的ElementList列表中(所有创建新节点都需要此处理,以下同),设置此节点的Value为NULL,结束本节点的解析过程(步骤S810),退回到上一层节点的解析过程(步骤S800);如果步骤S807判断读出的子字符串不是空标签,则顺序扫描是否发现此开始标签的结束标签(步骤S808),如果没有发现此开始标签的结束标签,则错误退出(步骤S809);如果发现此开始标签的结束标签,则创建不解析属性和子标签的子节点,设置此节点的Value为开始标签与结束标签之间的字符串,如解析当前标签为″照相机″,当前待解析的字符串为″<照相机><厂商>柯达</厂商><型号>DX6490</型号></照相机>″,则此节点的Value指向″<厂商>柯达</厂商><型号>DX6490</型号>″的字符串值,然后结束本节点的解析过程(步骤S811),退回到上一层节点的解析过程(步骤S800);
5)步骤S806判断此标签在UserInstruction树的此层中,表明应用要求进一步解析此标签的子标签及属性,则取出匹配的UserInstruction对象,步骤S812判断是否读出子字符串为空标签,是空标签则创建子节点,并根据UserInstruction对象决定是否进一步解析标签属性,然后结束本节点的解析过程(步骤S813),退回到上一层节点的解析过程(步骤800);
6)如果步骤S812判断读出子字符串不为空标签,则创建子节点,并根据对应的UserInstruction对象决定是否进一步解析标签属性,然后继续从参数instream字符流中顺序读有效子字符串(步骤S814),步骤S815判断读出的有效子字符串的值;
7)如果步骤S815判断读出的有效子字符串的值为标签值,设置此节点的Value指向此标签值,继续从instream流中读有效子字符串,判断读有效子字符串是否是本子节点的结束标签,是本子节点的结束标签则结束本节点的解析过程,退回到上一层节点的解析过程(步骤S800);不是,出错退出(步骤S816);
8)如果步骤S815判断读出的有效子字符串的值为结束标签,相当于标签值为NULL,则判断是否是本子节点的结束标签,是结束标签则结束本节点的解析过程,并设置此节点的Value为NULL,退回到上一层节点的解析过程;不是,出错退出(步骤S817);
9)如果步骤S815判断读出的有效子字符串的值为开始标签,表明进入一个子标签的解析过程,则设置本子节点Value指向一个新创建的空的快速索引表,并进行本节点的下一级子节点的解析过程(步骤S818,S806)。
虽然本发明上述文档解析方法优选地通过软件来实现,但是本领域技术人员了解,这种方法同样也可以通过硬件来实现。例如,本发明还提供一种用于实现上述XML文档解析方法的解析装置。图10示出了本发明这种解析装置的示意结构框图。如图10所示,解析装置900包括解析指令生成单元901和文档解析单元902。定制的文档解析要求输入解析指令树生成单元901,该解析指令树生成单元901执行如上结合附图6描述的指令树生成方法,生成定制解析指令树,并将其输出到文档解析单元902。待解析的文档903也输入到文档解析单元902,该文档解析单元902依据定制解析指令,执行如上结合附图7-8描述的内存树生成方法,完成对输入的文档903的定制解析。
此外,虽然上述具体实施例是以XML文档为例进行说明的,但是,本领域技术人员了解,只要是按照一定语法规则构建的文档,都可以利用本发明的方法和装置进行定制解析。
上述具体实施例的描述并不意在对本发明进行限制,本发明的保护范围应该根据附后的权利要求进行解释,以期包含所有具体实施例的修改、变型及其等同结构等。
Claims (12)
1、一种解析文档的方法,该方法按照定制的应用要求,对XML文档进行定制解析,该方法包括步骤:
按照定制的解析指令创建指令树,其中该指令树包含有关需要从所述XML文档获得的内容的项目的信息,所述定制的解析指令是基于所述应用要求制定的;
基于所创建的指令树对所述XML文档进行解析,以便从所述XML文档获得与所述应用要求相匹配的信息。
2、如权利要求1所述的解析文档的方法,其中所述指令树包括表示需要从所述XML文档获得的相应标签的、代表所述指令树的相应节点的标签名称的节点名称数据元素TagName、表示是否需要解析相应节点的属性的节点属性解析参数IfNeedParseAttr、表示是否需要解析相应节点的下一级子节点的下级节点解析参数Son,以及其中,所述的创建指令树的步骤包括:
从定制解析指令中读起始子字符串,判断读出的子字符串的值是否为空、″/tag″格式和以″/tag/″为首的字符串中的任意一种(S601),并基于判断结果执行以下的操作
如果子字符串值为空,或不是″/tag″格式(S602)且不以″/tag/″为首的字符串,则错误退出定制的解析指令的解析过程;
如果子字符串值为″/tag″格式,创建指令树根节点,设置根节点名称数据元素TagName的值为″tag″(S603),节点属性解析参数IfNeedParseAttr的值为false,表示不需要解析根节点的属性,下级节点解析参数Son为NULL,表示不需要解析下一级子节点,结束指令树的构造正常退出;
如果子字符串值是以″/tag/″为首的字符串(S604),创建指令树根节点,设置根节点名称数据元素TagName的值为″tag″、节点属性解析参数IfNeedParseAttr的值为false、下级节点解析参数Son指向一个新创建的指令列表,所述指令列表包括与根节点下的子节点对应的子节点名称数据元素TagName、表示是否需要解析相应子节点的属性的子节点属性解析参数IfNeedParseAttr、表示是否需要解析相应子节点的下一级子节点的下级节点解析参数Son,以所述定制的指令的剩余子字符串作为输入参数,逐级构造所述指令树的其余各层子节点。
3、如权利要求2所述的解析文档的方法,其中,所述逐级构造所述指令树的其余各层子节点的步骤包括:
从所述定制的指令的剩余子字符串抽取需要解析的、所述XML文档的子标签的信息;
对于每个需要解析的子标签,执行以下操作
根据所述定制的指令判断是否需要解析该子标签的属性以及是否需要解析其下一级子标签,如果需要解析其属性,将与该子标签对应的指令树的子节点的节点属性解析参数IfNeedParseAttr的值设置为true;如果需要解析其下一级子标签,则使该子标签对应的指令树的子节点的下级节点解析参数Son指向与该需要解析的下一级子标签对应的空的新的指令列表,并将该子节点加入到上一级节点对应的指令列表中;如果不需要解析其下一级子标签,则将该子标签对应的指令树的子节点的下级节点解析参数Son设置为NULL,并将该子节点加入到上一级节点对应的指令列表中。
4、如权利要求1-3中任一项所述的解析文档的方法,其中所述的基于所创建的指令树对XML文档进行解析的步骤生成包含与所述定制指令相匹配的信息的内存树,所述内存树包括表示内存树的相应节点的名称的标签名称参数Name、表示是否需要解析XML文档中相应标签的属性的标签属性解析参数IfParseAttr、表示相应标签的属性的标签属性参数Attribute、表示是否需要解析相应标签的子标签的子标签解析参数IfParseValue、表示本标签的值的标签值参数Value,所述文档解析步骤包括子步骤:从所述XML文档的字符串流中读出有效子字符串(S700);判断读出的有效子字符串是否为开始标签(S701)
如果不是开始标签,则出错退出文档解析过程(S703);
如果是开始标签,则进一步判断所述指令树的根节点对应的根节点名称参数TagName是否与读出的开始标签名一致,如果不一致,则出错退出(S703);如果一致,则创建内存树的根节点,设置根节点对应的标签名称参数Name为开始标签名、标签属性解析参数IfParseAttr为false、标签属性参数Attribute为NULL;
进一步判断此根开始标签是否为空标签(S704)
如果是空标签(S705),设置根节点的子标签解析IfParseValue为false、标签值Value为NULL,结束文档解析过程,正常退出,
如果不是空标签,则继续从XML文档中读有效子字符串,并执行如下步骤:
如果读出的有效子字符串是标签值(S708),则直接使根节点的对应子标签解析参数IfParseValue为false、标签值参数Value指向此标签值字符串,继续从XML文档中读有效子字符串,判断是否是根标签的结束标签,是则结束文档解析正常退出,忽略未处理的后续字符流;如果不是根标签的结束标签,则出错退出文档解析过程;
如果读出的有效子字符串是结束标签(S709),则判断是否是根节点的结束标签,是则设置根节点的对应子标签解析参数IfParseValue为false、标签值参数Value为NULL,结束文档解析,忽略未处理的后续字符流;如果不是根节点的结束标签则出错退出文档解析过程;
如果读出的有效子字符串是开始标签(S710),则设置根节点的对应子标签解析参数IfParseValue为true、标签值参数Value指向一个新创建的快速索引表,该快速索引表包括该根标签的所有下一级子标签的标签索引参数,然后循环从XML的字符流中读有效子字符串以生成内存树其余各层子节点。
5、如权利要求4所述的解析文档的方法,其中所述的生成内存树其余各层子节点的步骤包括:
继续从XML文档字符流中顺序读有效子字符串;
判断读出的子字符串是否为结束标签(S801)
如果是结束标签则进一步判断是否是为根标签的结束标签(S802),如果是根标签的结束标签则结束文档解析正常退出(S804),忽略未处理的后续字符流;如果不是根标签的结束标签则错误退出文档解析(S803);
如果不是结束标签,则判断读出的子字符串是否是开始标签(S805),如果不是开始标签则错误结束文档解析过程(S809),如果是开始标签则判断在指令树的此层是否有此标签(S806)并根据判断结果执行以下操作
如果判断此标签不在指令树的此层中,则进一步判断是否读出子字符串为空标签(S807),如果是则创建不解析属性和子标签的子节点(S810),并把此节点加入到上一级节点对应的标签值参数Value指向的快速索引表内此标签所对应的元素列表ElementList中,设置此节点的对应标签值参数Value为NULL,结束本节点的解析过程,并退回到上一层节点的解析过程(S800);如果判断读出子字符串不是空标签(S807),则顺序扫描是否发现此开始标签的结束标签(S808),如果没有发现此开始标签的结束标签,则错误退出文档解析过程(S809);如果发现此开始标签的结束标签,则创建不解析属性和子标签的的子节点(S811),设置此节点的对应标签值参数Value为开始标签与结束标签之间的字符串,然后结束本节点的解析过程,退回到上一层节点的解析过程(S800);
如果判断此标签在指令树的此层中(S806),则取出指令树中与该标签对应的节点属性解析参数IfNeedParseAttr并进行以下操作:判断是否读出子字符串为空标签(S812),是空标签则创建子节点(S813),并根据所述节点属性解析参数IfNeedParseAttr的值决定是否进一步解析标签属性,然后结束本节点的解析过程,退回到上一层节点的解析过程(S800);如果判断读出子字符串不为空标签(S812),创建子节点(S814),并根据所述节点属性解析参数IfNeedParseAttr的值决定是否进一步解析标签属性,然后继续从XML字符流中顺序读有效子字符串,判断读出的有效子字符串的值(S815)并依据判断结果进行以下操作:
如果判断读出的有效子字符串的值为标签值(S815),设置此节点对应的标签值参数Value指向此标签值(S816),继续从XML文档数据流中读有效子字符串,判断读有效子字符串是否是本子节点的结束标签,是本子节点的结束标签则结束本节点的解析过程,退回到上一层节点的解析过程(S800);不是,则出错退出文档解析过程;
如果判断读出的有效子字符串的值为结束标签(S815),则判断是否是本子节点的结束标签(817),如果是本子节点的结束标签则结束本节点的解析过程,并设置此节点的标签值参数Value为NULL,退回到上一层节点的解析过程;如果不是,则出错退出文档解析;
如果判断读出的有效子字符串的值为开始标签(S815),则设置本子节点对应的标签值参数Value指向一个新创建的空的快速索引表(S818),进行本节点的下一级子节点的解析过程(S806),其中该快速索引表包括该子标签的所有下一级子标签的标签索引参数。
6、如权利要求4所述的解析文档的方法,其中所述有效子字符串的含义是需要解析过程
a)忽略特殊指令语句<?Statements?>;
b)忽略注释语句<!--Statements-->;
c)忽略特殊指令语句<%Statements%>;
d)忽略语句<![CDATA[Statements]]>;
e)读出的子字符串为开始标签、结束标签、标签值中的任何一种;
f)如果出现不符合XML的语法则出错退出;
g)如果到XML文档的末尾则出错退出。
7、如权利要求4所述的解析文档的方法,其中所述快速索引表包括哈希表方式的索引表或按字符串升序或降序排序的索引表。
8、一种用于解析XML文档的文档解析装置,用于按照定制的应用要求,对XML文档进行定制解析,所述文档解析装置包括:
解析指令树生成单元,用于按照定制的解析指令产生解析XML文档所需的解析指令树,其中该指令树包含有关需要从所述XML文档获得的内容的项目的信息,所述定制的解析指令是基于所述应用要求制定的;
文档解析单元,用于按照由所述解析指令树生成单元产生的所述指令树来解析XML文档,以从所述XML文档获得与所述应用的要求相匹配的信息。
9、如权利要求8所述的文档解析装置,其中所述解析指令树生成单元包括:第一模块、第二模块、第三模块、第四模块、第五模块和第六模块;
所述指令树包括表示需要从所述XML文档获得的相应标签的、代表所述指令树的相应节点的标签名称的节点名称数据元素TagName、表示是否需要解析相应节点的属性的节点属性解析参数IfNeedParseAttr、表示是否需要解析相应节点的下一级子节点的下级节点解析参数Son;
其中,
所述第一模块,用于从定制解析指令中读起始子字符串;
所述第二模块,用于判断读出的子字符串的值是否为空、″/tag″格式和以″/tag/″为首的字符串中的任意一种,并基于判断结果指示以下模块执行操作
如果子字符串值为空,或不是″/tag″格式且不以″/tag/″为首的字符串,则指示所述第三模块执行错误退出定制的解析指令解析的过程;
如果子字符串值为″/tag″格式,则指示所述第四模块创建指令树根节点,设置根节点名称数据元素TagName的值为″tag″,节点属性解析参数IfNeedParseAttr的值为false,表示不需要解析根节点的属性,下级节点解析参数Son为NULL,表示不需要解析下一级子节点,结束指令树的构造正常退出;
如果子字符串值是以″/tag/″为首的字符串,则指示所述第五模块创建指令树根节点,设置根节点名称数据元素TagName的值为″tag″、节点属性解析参数IfNeedParseAttr的值为false、下级节点解析参数Son指向一个新创建的指令列表,所述指令列表包括与根节点下的子节点对应的子节点名称数据元素TagName、表示是否需要解析相应子节点的属性的子节点属性解析参数IfNeedParseAttr、表示是否需要解析相应子节点的下一级子节点的下级节点解析参数Son;所述第六模块以所述定制的指令的剩余子字符串作为输入参数,逐级构造所述指令树的其余各层子节点。
10、如权利要求9所述的文档解析装置,其中所述第六模块还包括两个子模块,用于构造所述指令树的其余各层子节点;
其中,
第一子模块,用于从所述定制的指令的剩余子字符串抽取需要解析的、所述XML文档的子标签的信息;
第二子模块,对于每个需要解析的子标签,执行以下操作
根据所述定制的指令判断是否需要解析该子标签的属性以及是否需要解析其下一级子标签,如果需要解析其属性,将与该子标签对应的指令树的子节点的节点属性解析参数IfNeedParseAttr的值设置为true;如果需要解析其下一级子标签,则使该子标签对应的指令树的子节点的下级节点解析参数Son指向与该需要解析的下一级子标签对应的空的新的指令列表,并将该子节点加入到上一级节点对应的指令列表中;如果不需要解析其下一级子标签,则将该子标签对应的指令树的子节点的下级节点解析参数Son设置为NULL,并将该子节点加入到上一级节点对应的指令列表中。
11、如权利要求8至10任意一项所述的文档解析装置,其中所述按照由所述解析指令树生成单元产生的所述指令树来解析XML文档为生成包含与所述定制指令相匹配的信息的内存树,所述内存树包括表示内存树的相应节点的名称的标签名称参数Name、表示是否需要解析XML文档中相应标签的属性的标签属性解析参数IfParseAttr、表示相应标签的属性的标签属性参数Attribute、表示是否需要解析相应标签的子标签的子标签解析参数IfParseValue、表示本标签的值的标签值参数Value,所述文档解析单元包括:第一单元、第二单元、第三单元、第四单元、第五单元;
其中,
所述第一单元,用于从所述XML文档的字符串流中读出有效子字符串;
所述第二单元,用于判断读出的有效子字符串是否为开始标签
如果不是开始标签,则出错退出文档解析过程;
如果是开始标签,则进一步判断所述指令树的根节点对应的根节点名称参数TagName是否与读出的开始标签名一致,如果不一致,则出错退出;如果一致,则创建内存树的根节点,设置根节点对应的标签名称参数Name为开始标签名、标签属性解析参数IfParseAttr为false、标签属性参数Attribute为NULL;所述第三单元,用于进一步判断此根开始标签是否为空标签
如果是空标签,设置根节点的子标签解析IfParseValue为false、标签值Value为NULL,结束文档解析过程,正常退出,
如果不是空标签,则继续从XML文档中读有效子字符串,并只是以下单元执行操作:
如果读出的有效子字符串是标签值,则指示所述第四单元直接使根节点的对应子标签解析参数IfParseValue为false、标签值参数Value指向此标签值字符串,继续从XML文档中读有效子字符串,判断是否是根标签的结束标签,是则结束文档解析正常退出,忽略未处理的后续字符流;如果不是根标签的结束标签,则出错退出文档解析过程;
如果读出的有效子字符串是结束标签,则指示所述第五单元判断是否是根节点的结束标签,是则设置根节点的对应子标签解析参数IfParseValue为false、标签值参数Value为NULL,结束文档解析,忽略未处理的后续字符流;如果不是根节点的结束标签则出错退出文档解析过程;
如果读出的有效子字符串是开始标签,则指示所述第六单元设置根节点的对应子标签解析参数IfParseValue为true、标签值参数Value指向一个新创建的快速索引表,该快速索引表包括该根标签的所有下一级子标签的标签索引参数,然后循环从XML的字符流中读有效子字符串以生成内存树其余各层子节点。
12、如权利要求11所述的文档解析装置,其中所述第六单元还包括九个子单元,用于执行生成内存树其余各层子节点的操作
其中,
第一子单元,用于继续从XML文档字符流中顺序读有效子字符串;
第二子单元,用于判断读出的子字符串是否为结束标签
如果是结束标签则由第三子单元进一步判断是否是为根标签的结束标签,如果是根标签的结束标签则结束文档解析正常退出,忽略未处理的后续字符流;如果不是根标签的结束标签则错误退出文档解析;
如果不是结束标签,则由第四子单元判断读出的子字符串是否是开始标签,如果不是开始标签则错误结束文档解析过程,如果是开始标签则判断在指令树的此层是否有此标签并根据判断结果执行以下操作
如果判断此标签不在指令树的此层中,则由第五子单元进一步判断是否读出子字符串为空标签,如果是则创建不解析属性和子标签的子节点,并把此节点加入到上一级节点对应的标签值参数Value指向的快速索引表内此标签所对应的元素列表ElementList中,设置此节点的对应标签值参数Value为NULL,结束本节点的解析过程,并退回到上一层节点的解析过程;如果判断读出子字符串不是空标签,则顺序扫描是否发现此开始标签的结束标签,如果没有发现此开始标签的结束标签,则错误退出文档解析过程;如果发现此开始标签的结束标签,则创建不解析属性和子标签的的子节点,设置此节点的对应标签值参数Value为开始标签与结束标签之间的字符串,然后结束本节点的解析过程,退回到上一层节点的解析过程;
如果判断此标签在指令树的此层中,则由第六子单元取出指令树中与该标签对应的节点属性解析参数IfNeedParseAttr并进行以下操作:判断是否读出子字符串为空标签,是空标签则创建子节点,并根据所述节点属性解析参数IfNeedParseAttr的值决定是否进一步解析标签属性,然后结束本节点的解析过程,退回到上一层节点的解析过程;如果判断读出子字符串不为空标签,创建子节点,并根据所述节点属性解析参数IfNeedParseAttr的值决定是否进一步解析标签属性,然后继续从XML字符流中顺序读有效子字符串,判断读出的有效子字符串的值并依据判断结果进行以下操作:
如果判断读出的有效子字符串的值为标签值,则由第七子单元设置此节点对应的标签值参数Value指向此标签值,继续从XML文档数据流中读有效子字符串,判断读有效子字符串是否是本子节点的结束标签,是本子节点的结束标签则结束本节点的解析过程,退回到上一层节点的解析过程;不是,则出错退出文档解析过程;
如果判断读出的有效子字符串的值为结束标签,则由第八子单元判断是否是本子节点的结束标签,如果是本子节点的结束标签则结束本节点的解析过程,并设置此节点的标签值参数Value为NULL,退回到上一层节点的解析过程;如果不是,则出错退出文档解析;
如果判断读出的有效子字符串的值为开始标签,则由第九子单元设置本子节点对应的标签值参数Value指向一个新创建的空的快速索引表,进行本节点的下一级子节点的解析过程,其中该快速索引表包括该子标签的所有下一级子标签的标签索引参数。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100925633A CN100458786C (zh) | 2006-06-15 | 2006-06-15 | 基于应用定制解析xml文档的方法及装置 |
PCT/IB2007/052306 WO2007144853A2 (en) | 2006-06-15 | 2007-06-15 | Method and apparatus for performing customized paring on a xml document based on application |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100925633A CN100458786C (zh) | 2006-06-15 | 2006-06-15 | 基于应用定制解析xml文档的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1896992A CN1896992A (zh) | 2007-01-17 |
CN100458786C true CN100458786C (zh) | 2009-02-04 |
Family
ID=37609520
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100925633A Expired - Fee Related CN100458786C (zh) | 2006-06-15 | 2006-06-15 | 基于应用定制解析xml文档的方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN100458786C (zh) |
WO (1) | WO2007144853A2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106407679A (zh) * | 2016-09-13 | 2017-02-15 | 上海市徐汇区中心医院 | 移动互联跨平台跨设备远程诊疗系统 |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101650670B (zh) | 2008-08-14 | 2013-01-09 | 鸿富锦精密工业(深圳)有限公司 | 可共享应用程序配置参数的电子系统及其方法 |
CN101650733B (zh) * | 2009-07-31 | 2012-10-31 | 金蝶软件(中国)有限公司 | 一种单点登录系统及其个性化数据引入方法和装置 |
CN101739462B (zh) * | 2009-12-31 | 2012-11-28 | 中兴通讯股份有限公司 | 可扩展标记语言编码方法、解码方法和客户端 |
CN103049536A (zh) * | 2012-11-01 | 2013-04-17 | 广州汇讯营销咨询有限公司 | 提取网页正文内容的方法和系统 |
CN104424334A (zh) * | 2013-09-11 | 2015-03-18 | 方正信息产业控股有限公司 | Xml文档节点的构建方法和装置 |
CN104753891B (zh) * | 2013-12-31 | 2019-04-05 | 中国移动通信集团湖南有限公司 | 一种xml报文解析方法及装置 |
US10360621B2 (en) * | 2015-05-20 | 2019-07-23 | Ebay Inc. | Near-identical multi-faceted entity identification in search |
CN105868257A (zh) * | 2015-12-28 | 2016-08-17 | 乐视网信息技术(北京)股份有限公司 | Xml数据解析方法、生成方法以及处理系统 |
CN106372042B (zh) * | 2016-08-31 | 2019-09-24 | 北京奇艺世纪科技有限公司 | 一种文档内容获取方法和装置 |
CN108076010B (zh) * | 2016-11-10 | 2020-09-08 | 中国移动通信集团广东有限公司 | 一种xml报文解析方法及服务器 |
CN108399084B (zh) * | 2017-02-08 | 2021-02-12 | 中科创达软件股份有限公司 | 一种应用程序的运行方法及系统 |
CN108427676A (zh) * | 2017-02-13 | 2018-08-21 | 北京新云胜科技有限公司 | 一种xml标签快速定位和处理的方法 |
CN110795915A (zh) * | 2018-07-31 | 2020-02-14 | 中兴通讯股份有限公司 | xml文件批量修改方法、系统、设备和计算机可读存储介质 |
CN110765163B (zh) * | 2019-10-17 | 2020-07-14 | 广州商品清算中心股份有限公司 | 一种大数据处理流程的执行计划生成方法 |
CN111881696B (zh) * | 2020-07-31 | 2024-02-23 | 兰州大学 | 一种cml到化学盲文的转换系统及方法 |
CN112148298A (zh) * | 2020-09-11 | 2020-12-29 | 杭州安恒信息技术股份有限公司 | Html数据解析方法、装置、计算机设备和存储介质 |
CN112182310B (zh) * | 2020-11-04 | 2023-11-17 | 上海德拓信息技术股份有限公司 | 一种内置实时搜索的通用树形组件实现方法 |
CN113347196A (zh) * | 2021-06-21 | 2021-09-03 | 浙江理工大学 | 一种对网络数据进行解析的解析方法、装置、电子设备以及存储介质 |
CN117275651A (zh) * | 2023-09-01 | 2023-12-22 | 北京华益精点生物技术有限公司 | 医疗报告生成方法、装置及电子设备 |
CN116976286B (zh) * | 2023-09-22 | 2024-02-27 | 北京紫光芯能科技有限公司 | 用于进行文本布局的方法及装置、电子设备、存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1504925A (zh) * | 2002-11-27 | 2004-06-16 | 用于导入和导出分层结构化数据的方法和计算机可读介质 | |
US20040210599A1 (en) * | 1999-07-26 | 2004-10-21 | Microsoft Corporation | Methods and apparatus for parsing extensible markup language (XML) data streams |
CN1667610A (zh) * | 2005-03-24 | 2005-09-14 | 北京北方烽火科技有限公司 | 一种基于标记的xml快速解码方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100564767B1 (ko) * | 2003-12-26 | 2006-03-27 | 한국전자통신연구원 | Xml처리 장치 및 이를 적용한 시스템의 xml 처리 방법 |
-
2006
- 2006-06-15 CN CNB2006100925633A patent/CN100458786C/zh not_active Expired - Fee Related
-
2007
- 2007-06-15 WO PCT/IB2007/052306 patent/WO2007144853A2/en active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040210599A1 (en) * | 1999-07-26 | 2004-10-21 | Microsoft Corporation | Methods and apparatus for parsing extensible markup language (XML) data streams |
US20050108632A1 (en) * | 1999-07-26 | 2005-05-19 | Microsoft Corporation | Methods and apparatus for parsing extensible markup language (XML) data streams |
CN1504925A (zh) * | 2002-11-27 | 2004-06-16 | 用于导入和导出分层结构化数据的方法和计算机可读介质 | |
CN1667610A (zh) * | 2005-03-24 | 2005-09-14 | 北京北方烽火科技有限公司 | 一种基于标记的xml快速解码方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106407679A (zh) * | 2016-09-13 | 2017-02-15 | 上海市徐汇区中心医院 | 移动互联跨平台跨设备远程诊疗系统 |
CN106407679B (zh) * | 2016-09-13 | 2019-03-26 | 上海市徐汇区中心医院 | 移动互联跨平台跨设备远程诊疗系统 |
Also Published As
Publication number | Publication date |
---|---|
CN1896992A (zh) | 2007-01-17 |
WO2007144853A3 (en) | 2008-03-06 |
WO2007144853A2 (en) | 2007-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100458786C (zh) | 基于应用定制解析xml文档的方法及装置 | |
Chaudhri et al. | XML data management: native XML and XML-enabled database systems | |
US7823123B2 (en) | Semantic system for integrating software components | |
Abiteboul et al. | Web data management | |
Jardim-Goncalves et al. | Enabling interoperability of STEP Application Protocols at meta-data and knowledge level | |
US20090019015A1 (en) | Mathematical expression structured language object search system and search method | |
CN104598635A (zh) | 一种基于xml描述的复杂文档自动生成方法 | |
Kuck | Tim Berners-Lee's Semantic Web | |
CN109656951A (zh) | 基于表达式查询数据的方法及查询系统 | |
EP1835417A1 (en) | Web service with associated lexical tree | |
Mossakowski et al. | Hets user guide-version 0.99 | |
JP5056384B2 (ja) | 検索プログラム、方法及び装置 | |
KR20170065417A (ko) | 자연 언어 처리 스키마 및 그 지식 데이터베이스 구축 방법 및 시스템 | |
Ramalho et al. | Metamorphosis–a topic maps based environment to handle heterogeneous information resources | |
CN104598636A (zh) | 复杂文档分离组织方法以及复杂文档自动生成方法 | |
Hayashi et al. | Combining UML, XML and relational database technologies. The best of all worlds for robust linguistic databases | |
Varanka et al. | Topographic mapping data semantics through data conversion and enhancement | |
Lanza et al. | The Space Plug-and-Play Avionics Common Data Dictionary--Constructing the Language of SPA | |
KR20040056298A (ko) | 엑스퀘리를 사용하여 통합 스키마를 정의하는 데이터 통합시스템 및 그 방법 | |
Szmeja et al. | ShExMap and IPSM-AF—comparison of RDF transformation technologies | |
Silva et al. | Semantic data extraction for B2B Integration | |
Piris | Extracting knowledge bases from table-structured web resources applied to the semantic based requirements engineering methodology softwiki | |
Idicula | Intelligent agent-based multilingual information retrieval system | |
Collard | An infrastructure to support meta-differencing and refactoring of source code | |
Wilde et al. | SPath: A Path Language for XML Schema |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090204 Termination date: 20150615 |
|
EXPY | Termination of patent right or utility model |