專利名稱:可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法
技術(shù)領(lǐng)域:
本發(fā)明涉及可擴(kuò)展標(biāo)記語(yǔ)言領(lǐng)域,尤指一種可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法。
背景技術(shù):
隨著Internet的迅猛發(fā)展,xml(Extensible Markup Language,可擴(kuò)展標(biāo)記語(yǔ)言)作為Internet上數(shù)據(jù)表示的新標(biāo)準(zhǔn),以其具有的自描述性、靈活性、擴(kuò)展性和平臺(tái)無(wú)關(guān)性等優(yōu)勢(shì),正在被廣泛的應(yīng)用于各種Web應(yīng)用中。
近年來(lái)許多研究工作致力于將數(shù)據(jù)庫(kù)技術(shù)應(yīng)用于xml文件上,將xml文件映射至關(guān)系數(shù)據(jù)庫(kù)表內(nèi)。如何將xml文件映射至關(guān)系數(shù)據(jù)庫(kù)表中是目前本領(lǐng)域的重要研究課題之一。
現(xiàn)有xml文件至關(guān)系數(shù)據(jù)庫(kù)表的映射方法都是采用手工映射,并且有些映射方法只支持xml文件本身到數(shù)據(jù)庫(kù)的映射,不支持模式(schema)的映射。R.Bourret、C.Bornhovd和A.Buchmann提出了利用一個(gè)實(shí)體來(lái)實(shí)現(xiàn)xml文件和關(guān)系數(shù)據(jù)庫(kù)之間數(shù)據(jù)的轉(zhuǎn)化。實(shí)體的形式表現(xiàn)為xml文件,而且還詳細(xì)地描述了每個(gè)xml節(jié)點(diǎn)與關(guān)系數(shù)據(jù)庫(kù)中的表、字段的對(duì)應(yīng)關(guān)系。但是這個(gè)實(shí)體很繁復(fù),查找實(shí)體中的節(jié)點(diǎn)來(lái)獲得與關(guān)系數(shù)據(jù)庫(kù)的對(duì)應(yīng)關(guān)系的效率也很低。雖然可以利用表來(lái)存儲(chǔ)xml節(jié)點(diǎn)與關(guān)系數(shù)據(jù)庫(kù)中表與記錄的對(duì)應(yīng)關(guān)系,但是這樣處理會(huì)導(dǎo)致不能靈活修改。而本發(fā)明提出了新的xml Schema到關(guān)系數(shù)據(jù)庫(kù)模式的映射規(guī)則,基于此提出了映射模板的概念,這個(gè)模板可以直接使用去驅(qū)動(dòng)數(shù)據(jù)庫(kù)表的生成。
發(fā)明內(nèi)容
本發(fā)明要解決的問(wèn)題是提供一種基于模式的可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法。
為了解決上述問(wèn)題,本發(fā)明可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法的技術(shù)方案包括下述步驟10)將模式間的依賴關(guān)系存放在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)表中;20)為可擴(kuò)展標(biāo)記語(yǔ)言文件中的每一個(gè)名稱空間創(chuàng)建一個(gè)映射文件,所述映射文件包括該模式中所有的復(fù)雜類型、簡(jiǎn)單類型、全局元素以及相應(yīng)子元素;30)為映射文件中每一個(gè)復(fù)雜類型、全局元素以及出現(xiàn)不止一次的簡(jiǎn)單類型元素分別生成一個(gè)與其對(duì)應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表,將其所包含的子元素和出現(xiàn)小于等于一次的簡(jiǎn)單類型元素作為與其對(duì)應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表中的字段。
所述步驟20)可細(xì)分為下述步驟200)獲取可擴(kuò)展標(biāo)記語(yǔ)言文件的模式對(duì)象模型;
201)根據(jù)模式對(duì)象模型獲取每一個(gè)模式所對(duì)應(yīng)的名稱空間并為每一個(gè)名稱空間創(chuàng)建一個(gè)映射文件;重復(fù)步驟202)至208)填充每一個(gè)映射文件,202)獲取每個(gè)名稱空間的全部全局元素和復(fù)雜類型;203)為每一個(gè)全局元素生成一個(gè)可擴(kuò)展標(biāo)記語(yǔ)言元素映射節(jié)點(diǎn),并設(shè)置與其相應(yīng)的屬性;204)生成可擴(kuò)展標(biāo)記語(yǔ)言元素映射集合節(jié)點(diǎn),且該集合節(jié)點(diǎn)包含步驟203)中生成的所有節(jié)點(diǎn);205)為每一個(gè)復(fù)雜類型生成一個(gè)可擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn),并設(shè)置與其相應(yīng)的屬性;206)找出每一個(gè)復(fù)雜類型所包含的所有子元素;207)為每一個(gè)子元素生成一個(gè)可擴(kuò)展標(biāo)記語(yǔ)言元素節(jié)點(diǎn)并將其放入其所屬的復(fù)雜類型的擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn)中;208)生成可擴(kuò)展標(biāo)記語(yǔ)言類型集合節(jié)點(diǎn),該集合節(jié)點(diǎn)包括步驟205)中生成的所有可擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn)。
所述與可擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn)相應(yīng)的屬性為復(fù)雜類型標(biāo)識(shí),id,用于標(biāo)識(shí)該復(fù)雜類型名稱,name,用于表示該復(fù)雜類型的全局名稱名字空間,namespace,用于表示該復(fù)雜類型的名字空間;與可擴(kuò)展標(biāo)記語(yǔ)言元素節(jié)點(diǎn)相應(yīng)的屬性為名稱,name,用于表示該元素的全局名稱原始名稱,localName,用于表示由模式對(duì)象模型指定的該元素的原始名稱元素類別,elementType,用于表示該元素的類別元素類型,type,用于表示該元素的類型元素標(biāo)識(shí),id,用于標(biāo)識(shí)該元素。
所述步驟30)可細(xì)分為下述步驟300)為映射文件中的每一個(gè)可擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn)生成一個(gè)關(guān)系數(shù)據(jù)庫(kù)表,表名為其屬性復(fù)雜類型標(biāo)識(shí);301)將每一個(gè)可擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn)所包含的所有屬性和出現(xiàn)小于等于一次的簡(jiǎn)單類型元素作為與其相應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表的字段;302)為每一個(gè)出現(xiàn)不止一次的簡(jiǎn)單類型元素生成一個(gè)子關(guān)系數(shù)據(jù)庫(kù)表,該表名為其屬性元素標(biāo)識(shí);303)為每一個(gè)關(guān)系數(shù)據(jù)庫(kù)表建立下列字段記錄序號(hào),uuid_id,用于表示記錄順序?qū)嵗孛Q,uuid_name,用于表示可擴(kuò)展標(biāo)記語(yǔ)言文件實(shí)例中該元素的名稱實(shí)例標(biāo)識(shí),uuid_docid,用于標(biāo)識(shí)可擴(kuò)展標(biāo)記語(yǔ)言文件實(shí)例父元素標(biāo)識(shí),uuid_parentid,用于標(biāo)識(shí)該元素的父元素元素順序,uuid_order,用于表示可擴(kuò)展標(biāo)記語(yǔ)言文件實(shí)例中元素出現(xiàn)的順序。
本發(fā)明可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法還包括步驟建立數(shù)據(jù)庫(kù)系統(tǒng)表,所述數(shù)據(jù)庫(kù)系統(tǒng)表包括模式引用關(guān)系表,Schemacrossref,用于存放可擴(kuò)展標(biāo)記語(yǔ)言文件模式間的依賴關(guān)系;模式表,Schema,用于存放可擴(kuò)展標(biāo)記語(yǔ)言文件模式與其對(duì)應(yīng)的映射文件的對(duì)應(yīng)關(guān)系;文件實(shí)例表,DocInstance,用于存放可擴(kuò)展標(biāo)記語(yǔ)言文件存儲(chǔ)標(biāo)識(shí)。
與現(xiàn)有技術(shù)相比,本發(fā)明可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法的有益效果是由于采用為每一個(gè)名稱空間生成一個(gè)映射文件,然后根據(jù)映射文件生成關(guān)系數(shù)據(jù)庫(kù)表,可以使得模式(模式定義了可擴(kuò)展標(biāo)記語(yǔ)言類型)所定義的一類xml文件共享一套數(shù)據(jù)庫(kù)表,而無(wú)需就單獨(dú)的xml文件進(jìn)行數(shù)據(jù)庫(kù)映射。
由于采用將可擴(kuò)展標(biāo)記語(yǔ)言文件的每一個(gè)復(fù)雜類型、全局元素以及出現(xiàn)不止一次的簡(jiǎn)單類型分別生成一個(gè)與其對(duì)應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表,不考慮該元素是由哪個(gè)xml schema所引用。這樣使生成的表不依賴于引用該元素的xmlschema,而只依賴于定義該元素的xml schema。因而使所有相同類型的元素都會(huì)存儲(chǔ)在一起,這樣在查詢某一元素時(shí),只查詢與其對(duì)應(yīng)的表即可,而不必再考慮與其有關(guān)的xml schema,從而可實(shí)現(xiàn)對(duì)xml文件數(shù)據(jù)的高效查詢。
圖1是本發(fā)明可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法流程圖;圖2是圖1中步驟20)進(jìn)一步劃分的流程圖;圖3是圖1中步驟30)進(jìn)一步劃分的流程圖;圖4是實(shí)施例中四個(gè)模式的依賴關(guān)系示意圖。
具體實(shí)施例方式
如圖1所示,本發(fā)明可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法包括下述步驟10)將模式間的依賴關(guān)系存放在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)表中;20)為可擴(kuò)展標(biāo)記語(yǔ)言文件中的每一個(gè)名稱空間創(chuàng)建一個(gè)映射文件,所述映射文件包括該模式中所有的復(fù)雜類型、簡(jiǎn)單類型、全局元素以及相應(yīng)的子元素;30)為映射文件中每一個(gè)復(fù)雜類型、全局元素以及出現(xiàn)不止一次的簡(jiǎn)單類型元素分別生成一個(gè)與其對(duì)應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表,其所包含的子元素和出現(xiàn)小于等于一次的簡(jiǎn)單類型元素作為與其對(duì)應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表中的字段。
通過(guò)為每一個(gè)名稱空間創(chuàng)建一個(gè)映射文件,然后根據(jù)映射文件將xml類型(復(fù)雜類型、全局元素以及出現(xiàn)不止一次的簡(jiǎn)單類型元素)映射成關(guān)系數(shù)據(jù)庫(kù)表,從而實(shí)現(xiàn)了xml類型至關(guān)系數(shù)據(jù)庫(kù)表的映射,因而可以利用關(guān)系數(shù)據(jù)庫(kù)的成熟技術(shù)來(lái)處理(存儲(chǔ)、檢索等)xml文件。
如圖2所示,所述步驟20)細(xì)分為下述步驟200)獲取可擴(kuò)展標(biāo)記語(yǔ)言文件的模式對(duì)象模型;201)根據(jù)模式對(duì)象模型獲取每一個(gè)模式所對(duì)應(yīng)的名稱空間并為每一個(gè)名稱空間創(chuàng)建一個(gè)映射文件;重復(fù)步驟202至步驟208)填充每一個(gè)映射文件202)獲取每個(gè)名稱空間的所有的全局元素和復(fù)雜類型;203)為每一個(gè)全局元素生成一個(gè)XmlMappingElement(可擴(kuò)展標(biāo)記語(yǔ)言元素)節(jié)點(diǎn),并設(shè)置與其相應(yīng)的屬性;204)生成XmlMappingElements(可擴(kuò)展標(biāo)記語(yǔ)言元素集合)節(jié)點(diǎn),XmlMappingElements節(jié)點(diǎn)包含步驟203)中生成的所有XmlMappingElement節(jié)點(diǎn);205)為每一個(gè)復(fù)雜類型生成一個(gè)XmlMappingType(可擴(kuò)展標(biāo)記語(yǔ)言類型)節(jié)點(diǎn),并設(shè)置與其相應(yīng)的屬性;206)找出每一個(gè)復(fù)雜類型所包含的所有子元素;207)為每一個(gè)子元素生成一個(gè)XmlMappingElement節(jié)點(diǎn)并將其放入其所屬的復(fù)雜類型的XmlMappingType節(jié)點(diǎn)中;208)生成XmlMappingTypes(可擴(kuò)展標(biāo)記語(yǔ)言類型集合)節(jié)點(diǎn),XmlMappingTypes節(jié)點(diǎn)包括步驟205)中生成的所有XmlMappingType節(jié)點(diǎn)。
如表一所示,所述與XmlMappingType節(jié)點(diǎn)相應(yīng)的屬性為復(fù)雜類型標(biāo)識(shí),id,用于標(biāo)識(shí)該復(fù)雜類型,名稱,name,用于表示該復(fù)雜類型的全局名稱,名字空間,namespace,用于表示該復(fù)雜類型的名字空間。
如表二所示,與XmlMappingElement節(jié)點(diǎn)相應(yīng)的屬性為名稱,name,用于表示該元素的全局名稱,原始名稱,localName,用于表示由模式對(duì)象模型指定的該元素的原始名稱,元素類別,elementType,用于表示該元素的類別,元素類型,type,用于表示該元素的類型,元素標(biāo)識(shí),id,用于標(biāo)識(shí)該元素,最小出現(xiàn)次數(shù),minOccurs,用于表示在某個(gè)復(fù)雜類型中的最小出現(xiàn)次數(shù),最大出現(xiàn)次數(shù),maxOccurs,用于表示在某個(gè)復(fù)雜類型中的最大出現(xiàn)次數(shù)。
表一
表二
如圖3所示,所述步驟30)又細(xì)分為下述步驟300)為映射文件中的每一個(gè)XmlMappingType節(jié)點(diǎn)生成一個(gè)關(guān)系數(shù)據(jù)庫(kù)表,表名為其屬性復(fù)雜類型標(biāo)識(shí)(id);301)將每一個(gè)XmlMappingType節(jié)點(diǎn)所包含的所有屬性和出現(xiàn)小于等于一次的簡(jiǎn)單類型元素作為與其相應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表的字段;302)為每一個(gè)出現(xiàn)不止一次的簡(jiǎn)單類型元素生成一個(gè)子關(guān)系數(shù)據(jù)庫(kù)表,該表名為其屬性元素標(biāo)識(shí);303)為每一個(gè)關(guān)系數(shù)據(jù)庫(kù)表建立下列字段,記錄序號(hào),uuid_id,用于表示記錄順序?qū)嵗孛Q,uuid_name,用于表示XML文件實(shí)例中該元素的名稱實(shí)例標(biāo)識(shí),uuid_docid,用于標(biāo)識(shí)XML文件實(shí)例,父元素標(biāo)識(shí),uuid_parentid,用于標(biāo)識(shí)該元素的父元素,元素順序,uuid_order,用于表示XML文件實(shí)例中元素出現(xiàn)的順序。
本發(fā)明可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法還包括步驟建立數(shù)據(jù)庫(kù)系統(tǒng)表,所述數(shù)據(jù)庫(kù)系統(tǒng)表包括模式引用關(guān)系表,Schemacrossref,用于存放可擴(kuò)展標(biāo)記語(yǔ)言文件模式間的依賴關(guān)系,包括字段名稱空間(namespace)和名稱空間引用(refednamespace);模式表,Schema,用于存放可擴(kuò)展標(biāo)記語(yǔ)言文件模式與其對(duì)應(yīng)的映射文件的對(duì)應(yīng)關(guān)系,包括字段名稱空間(namespace)、名字(name)、模式內(nèi)容(text)和映射文件名(mapping);文檔實(shí)例表,DocInstance,用于存放可擴(kuò)展標(biāo)記語(yǔ)言文件存儲(chǔ)標(biāo)識(shí),包括字段文檔實(shí)例標(biāo)識(shí)(id)、名字(name)、文檔集合表外鍵(collectionId(FK)和文檔原始內(nèi)容(text);復(fù)雜類型表,complexType,用于記錄數(shù)據(jù)庫(kù)導(dǎo)入的模式所生成的數(shù)據(jù)庫(kù)表(id為生成的表名),包括字段復(fù)雜類型標(biāo)識(shí)(id)、名字(name)、名稱空間表外鍵(namespace(FK))和類型(type);全局元素表,docRoot,用于保存數(shù)據(jù)庫(kù)導(dǎo)入的模式所定義的全局元素,包括字段全局元素標(biāo)識(shí)(id)、名字(name)和名稱空間(namespace(FK));文檔集合表,Collection,用于存放一類XML文件的集合,包括字段文件標(biāo)識(shí)(id)、名字(name)和全局元素表外鍵(docrootid(FK))。
下面通過(guò)一個(gè)具體的實(shí)例來(lái)詳述本發(fā)明可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法的技術(shù)方案。
下面的xml文件有四個(gè)模式。
模式一company.xsd<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<xsschema targetNamespace=″http//org.xmldb.company″xmlnsxs=″http//www.w3.org/2001/XMLSchema″xmlns=″http//org.xmldb.company″xmlnsper=″http//org.xmldb.personnel″e(cuò)lementFormDefault=″qualified″attributeFormDefault=″unqualified″>
;依賴模式personal.xsd<xsimport namespace=″http//org.xmldb.personnel″schemaLocation=″personal.xsd″/>
<xselement name=″company″>
<xsannotation>
<xsdocumentation>Comment describing your root element</xsdocumentation>
</xsannotation>
<xscomplexType>
<xssequence>
<xselement name=″e(cuò)mployee″type=″e(cuò)mployee″/>
<xselement name=″department″>
<xscomplexType>
<xssequence>
<xselement name=″manager″>
<xscomplexType>
<xssequence>
<xselement name=″rank″type=″xsstring″/>
<xselement ref=″perperson″/>
</xssequence>
</xscomplexType>
</xselement>
<xselement name=″name″type=″xsstring″/>
</xssequence>
</xscomplexType>
</xselement>
</xssequence>
</xscomplexType>
</xselement>
<xscomplexType name=″e(cuò)mployee″>
<xssequence>
<xselement ref=″perperson″maxOccurs=″unbounded″/>
</xssequence>
</xscomplexType></xsschema>
模式二government.xsd<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<xsschema targetNamespace=″http//org.xmldb.government″xmlnsxs=″http//www.w3.org/2001/XMLSchema″xmlnsper=″http//org.xmldb.personnel″xmlns=″http//org.xmldb.government″e(cuò)lementFormDefault=″qualified″attributeFormDefault=″unqualified″>
;依賴模式personal.xsd<xsimport namespace=″http//org.xmldb.personnel″schemaLocation=″personal.xsd″/>
<xselement name=″government″>
<xsannotation>
<xsdocumentation>Comment describing your root element</xsdocumentation>
</xsannotation>
<xscomplexType>
<xssequence>
<xselement name=″officers″>
<xscomplexType>
<xssequence>
<xselement ref=″perperson″maxOccurs=″unbounded″/>
</xssequence>
</xscomplexType>
</xselement>
<xselement name=″name″type=″xsstring″/>
<xselement name=″affiliated″type=″xsstring″/>
</xssequence>
</xscomplexType>
</xselement>
</xsschema>
模式三personal.xsd<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<xsschema targetNamespace=″http//org.xmldb.personnel″xmlnsxs=″http//www.w3.org/2001/XMLSchema″xmlns=″http//org.xmldb.personnel″xmlnsaddr=″http//org.xmldb.address″e(cuò)lementFormDefault=″qualified″>
;依賴模式address.xsd<xsimport namespace=″http//org.xmldb.address″schemaLocation=″address.xsd″/>
;模式定義的全局元素<xselement name=″personnel″>
;模式定義的復(fù)雜類型<xscomplexType>
<xssequence>
<xselement ref=″person″maxOccurs=″unbounded″/>
</xssequence>
</xscomplexType>
<xsunique name=″uniquel″>
<xsselector xpath=″person″/>
<xsfield xpath=″name/given″/>
<xsfield xpath=″name/family″/>
</xsunique>
<xskey name=″e(cuò)mpid″>
<xsselector xpath=″person″/>
<xsfield xpath=″@id″/>
</xskey>
<xskeyref name=″keyref1″refer=″e(cuò)mpid″>
<xsselector xpath=″person″/>
<xsfield xpath=″link/@manager″/>
</xskeyref>
</xselement>
;模式定義的全局元素<xselement name=″person″>
;模式定義的復(fù)雜類型<xscomplexType>
<xssequence>
<xselement ref=″name″/>
;Schema定義的重復(fù)多次的簡(jiǎn)單類型<xselement ref=″e(cuò)mail″ minOccurs=″0″maxOccurs=″unbounded″/>
<xselement ref=″url″minOccurs=″0″maxOccurs=″unbounded″/>
<xselement name=″addresses″>
;模式定義的復(fù)雜類型<xscomplexType>
<xssequence maxOccurs=″unbounded″>
<xselement ref=″addraddress″/>
</xssequence>
</xscomplexType>
</xselement>
</xssequence>
<xsattribute name=″id″type=″xsID″use=″required″/>
<xsattribute name=″note″type=″xsstring″/>
<xsattribute name=″contr″default=″false″>
<xssimpleType>
<xsrestriction base=″xsstring″>
<xsenumeration value=″true″/>
<xsenumeration value=″false″/>
</xsrestriction>
</xssimpleType>
</xsattribute>
<xsattribute name=″salary″type=″xsinteger″/>
</xscomplexType>
</xselement>
;模式定義的全局元素<xselement name=″name″>
;模式定義的復(fù)雜類型<xscomplexType>
<xsall>
<xselement ref=″family″/>
<xselement ref=″given″/>
</xsall>
</xscomplexType>
</xselement>
;模式定義的全局元素<xselement name=″family″type=″xsstring″/>
;模式定義的全局元素<xselement name=″given″type=″xsstring″/>
;模式定義的全局元素<xselement name=″e(cuò)mail″type=″xsstring″/>
;模式定義的全局元素<xselement name=″url″>
;模式定義的復(fù)雜類型<xscomplexType>
<xsattribute name=″href″type=″xsstring″default=″″http//″/>
</xscomplexType>
</xselement>
</xsschema>
模式四address.xsd<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<xsschema targetNamespace=″http//org.xmldb.address″xmlnsxs=″http//www.w3.org/2001/XMLSchema″xmlns=″http//org.xmldb.address″e(cuò)lementFormDefault=″qualified″attributeFormDefault=″unqualified″>
<xselement name=″address″>
<xsannotation>
<xsdocumentation>Comment describing your root element</xsdocumentation>
</xsannotation>
<xscomplexType>
<xssequence>
<xselement name=″tel″type=″xsstring″/>
<xselement name=″postcode″type=″xsstring″/>
<xselement name=″street″type=″xsstring″/>
</xssequence>
</xscomplexType>
</xselement>
</xsschema>
首先,建立數(shù)據(jù)庫(kù)系統(tǒng)表docInstance、collection、complexType、schema、schemacrossref和docRoot。
然后,使用通用的解析器將schema作為普通的xml文件進(jìn)行解析,分析其中的xsimport元素,將xml schema間的依賴(import)關(guān)系存入數(shù)據(jù)庫(kù)系統(tǒng)表Schemacrossref中。在導(dǎo)入某個(gè)具體的模式時(shí),由于其可能依賴其它的模式,如果這些依賴的模式?jīng)]有導(dǎo)入到schemacrossref中,則將其一并導(dǎo)入。
如圖4所示,上述四個(gè)模式的依賴關(guān)系為company.xsd和government.xsd均依賴personal.xsd,personal.xsd依賴address.xsd。
導(dǎo)入government.xsd后表Schemacrossref的存儲(chǔ)結(jié)果為
然后導(dǎo)入company.xsd后表Schemacrossref的存儲(chǔ)結(jié)果為
下面本例采用schema解析器,例如apach xerces,獲取符合w3c規(guī)范的schema對(duì)象模型,再根據(jù)schema對(duì)象模型獲取其所引用的名稱空間,本例中company.xsd所獲得的schema對(duì)象所引用的名稱空間有三個(gè),分別是http//org.xmldb.companyhttp//org.xmldb.personnelhttp//org.xmldb.address
再為每一個(gè)名稱空間創(chuàng)建一個(gè)映射文件,分別是mapping-company.xml、mapping-personal.xml和mapping-address.xml。本例將模式與映射文件的對(duì)應(yīng)關(guān)系存放在數(shù)據(jù)庫(kù)系統(tǒng)表schema中,存儲(chǔ)后表schema結(jié)果為
下面描述模式三personal.xsd生成映射文件mapping-personal.xml的過(guò)程。
在該過(guò)程之前先采用下述方法對(duì)personal.xsd中的類型和元素進(jìn)行命名將全局元素命名為“{element}{+目標(biāo)名稱空間+}+元素的名稱屬性值”;將全局復(fù)雜類型命名為“{type}{+目標(biāo)名稱空間+}+復(fù)雜類型的名稱屬性值”;將局部元素命名為“包含該局部元素的復(fù)雜類型的全局名字+“/”+該局部元素的名稱屬性值”;將局部復(fù)雜類型命名為該局部復(fù)雜類型的父元素的全局名字;將簡(jiǎn)單類型命名為其基礎(chǔ)類型的全局名字。
故該模式定義的所有全局元素及其全局名字如下personnel{element}{http//org.xmldb.personnel}personelperson{element}{http//org.xmldb.personnel}personname{element}{http//org.xmldb.personnel}namefamily{element}{http//org.xmldb.personnel}familygiyen{element}{http//org.xmldb.personnel}giyenemail{element}{http//org.xmldb.personnel}emailurl{element}{http//org.xmldb.personnel}url五個(gè)復(fù)雜類型的全局名字為{element}{http//org.xmldb.personnel}personel{element}{http//org.xmldb.personnel}person{element}{http//org.xmldb.personnel}name{element}{http//org.xmldb.personnel}url{element}{http//org.xmldb.personnel}person/addresses局部簡(jiǎn)單類型的全局名字為{type}{http//www.w3.org/2001/XMLSchema}String該模式的元素和類型有了全局名字后,即能夠區(qū)分不同的類型和元素,映射文件mapping-personal.xml的過(guò)程如下獲取personal.xsd中的全部全局元素和復(fù)雜類型。
所獲得的全局元素為personnel,person,name,family,giyen,email,url
所獲得的復(fù)雜類型為{element}{http//org.xmldb.personnel}personnel{element}{http//org.xmldb.personnel}person{element}{http//org.xmldb.personnel}name{element}{http//org.xmldb.personnel}url{element}{http//org.xmldb.personnel}person/addresses然后對(duì)每一個(gè)全局元素生成一個(gè)XmlMappingElement節(jié)點(diǎn)并設(shè)置其相應(yīng)的屬性。再生成XmlMappingElements節(jié)點(diǎn),該節(jié)點(diǎn)包含所有生成的XmlMappingElement節(jié)點(diǎn)。本例為;xml元素集合節(jié)點(diǎn)<XmlMappingElements>
;全局元素person<XmlMappingElementname=″{element}{http//org.xmldb.personnel}person″localName=″person″e(cuò)lementType=″complex″type=″{elemenr}{http//org.xmldb.personnel}person″id=″F8522164_DC8A_498E_888E_D7ACF6291D39″/>
;全局元素personnel<XmlMappingElementname=″{element}{http//org.xmldb.personnel}personnel″localName=″personnel″e(cuò)lementType=″complex″type=″{element}{http//org.xmldb.personnel}personnel″id=″DB1D8AEA_A320_4203_BC3F_B2FE7D4AE326″/>
;全局元素url<XmlMappingElementname=″{element}{http//org.xmldb.personnel}url″localName=″url″e(cuò)lementType=″complex″type=″{element}{http//org.xmldb.personnel}url″id=″2E1E9830_AB88_4DC8_8B72_A3DE735CA329″/>
;全局元素family<XmlMappingElementname=″{element}{http//org.xmldb.personnel}family″localName=″family″e(cuò)lementType=″simple″type=″{type}{http//www.w3.org/2001/XMLSchema}string″id=″3DC9DBB9_9E7E_4CF4_BDA8_AOAF486E5364″/>
;全局元素name<XmlMappingElementname=″{element}{http//org.xmldb.personnel}name″localName=″name″e(cuò)lementType=″complex″type=″{element}{http//org.xmldb.personnel}name″id=″5F8ECF2E_82E5_48E7_BD5D_C21FAC8CC297″/>
;全局元素given<XmlMappingElementname=″{element}{http//org.xmldb.personnel}given″localName=″given″e(cuò)lementType=″simple″
type=″{type}{http//www.w3.org/2001/XMLSchema}string″id=″11B6ACF7_CC08_415C_8650_FB5730BE0137″/>
;全局元素email<XmlMappingElementname=″{element}{http//org.xmldb.personnel}email″localName=″e(cuò)mail″e(cuò)lementType=″simple″type=″{type}{http//www.w3.org/2001/XMLSchema}string″id=″CAAAF143_2956_454D_8AF3_8E59F56BBA4E″/>
</XmlMappingElements>
最后將每一個(gè)復(fù)雜類型生成XmlMappingType節(jié)點(diǎn)并設(shè)置相應(yīng)屬性,還要找出每一個(gè)復(fù)雜類型所包含的所有子元素(包括屬性)。對(duì)每一個(gè)子元素生成XmlMappingElement節(jié)點(diǎn),并將其放入其所屬的復(fù)雜類型的XmlMappingType節(jié)點(diǎn)中。再生成XmlMappingTypes節(jié)點(diǎn),該節(jié)點(diǎn)包含所有生成的XmlMappingType節(jié)點(diǎn)。
Personal.xsd生成的映射文件中XmlMappingTypes和XmlMappingType為;xml類型集合節(jié)點(diǎn)<xmlMappingTypes>
;復(fù)雜類型{element}{http//org.xmldb.personnel}personnel<XmlMappingType id=″94737D4C_F969_48FF_A4A1_823FA8647BAD″name=″{element}{http//org.xmldb.personnel}personnel″namespace=″http//org.xmldb.personnel″>
;子元素person<XmlMappingElementname=″{element}{http//org.xmldb.personnel}person″localName=″person″e(cuò)lementType=″complex″type=″{element}{http//org.xmldb.personnel}person″id=″F8522164_DC8A_498E_888E_D7ACF6291D39″/>
</XmlMappingType>
;復(fù)雜類型{element}{http//org.xmldb.personnel}person<XmlMappingType id=″D62E1F94_35CA_4362_BB4E_DC39C58EACA3″name=″{element}{http//org.xmldb.personnel}person″namespace=″http//org.xmldb.personnel″>
;子元素id<XmlMappingElement name=″id″localName=″id″e(cuò)lementType=″attribute″type=″{type}{http//www.w3.org/2001/XMLSchema}ID″id=″81195F3E_ED21_44C6_A0D5_F4F0E44BC159″/>
;子元素note<XmlMappingElement name=″note″localName=″note″e(cuò)lementType=″attribute″type=″{type}{http//www.w3.org/2001/XMLSchema}string″id=″7AA4C149_DB7A_4F75_91DF_B01EF4B5B40D″/>
;子元素contr<XmlMappingElement name=″contr″localName=″contr″e(cuò)lementType=″attribute″
type=″{type}{http//www.w3.org/2001/XMLSchema}string″id=″11C9845E_B1BF_4BFC_A1D0_CD6D89F50F41″/>
;子元素salary<XmlMappingElement name=″salary″localName=″salary″e(cuò)lementType=″attribute″type=″{type}{http//www.w3.org/2001/XMLSchema}integer″id=″34009506_9DC1_4468_A654_E66BFFE49FCD″/>
;子元素name<XmlMappingElementname=″{element}{http//org.xmldb.personnel}name″localName=″name″e(cuò)lementType=″complex″type=″{element}{http//org.xmldb.personnel}name″id=″5F8ECF2E_82E5_48E7_BD5D_C21FAC8CC297″/>
;子元素email<XmlMappingElementname=″{element}{http//org.xmldb.personnel}email″localName=″e(cuò)mail″e(cuò)lementType=″simple″type=″{type}{http//www.w3.org/2001/XMLSchema}string″id=″CAAAF143_2956_454D_8AF3_8E59F56BBA4E″minOccurs=″0″maxOccurs=″100000″/>
;子元素url<XmlMappingElementname=″{element}{http//org.xmldb.personnel}url″localName=″url″e(cuò)lementType=″complex″type=″{element}{http//org.xmldb.personnel}url″id=″2E1Eg830_AB88_4DC8_8B72_A3DE735CA329″/>
;子元素addresses<XmlMappingElementname=″{element}{http//org.xmldb.personnel}person/addresses″localName=″addresses″e(cuò)lementType=″complex″type=″{element}{http//org.xmldb.personnel}person/addresses″id=″1D2AAg3A_0DEF_4924_A88F_C433515B20F6″/>
</XmlMappingType>
;復(fù)雜類型{element}{http//org.xmldb.personnel}name<XmlMappingType id=″45E5901B_C36F_4F9E_8888_ADB29B816770″name=″{element}{http//org.xmldb.personnel}name″namespace=″http//org.xmldb.personnel″>
;子元素family<XmlMappingElementname=″{element}{http//org.xmldb.personnel}family″localName=″family″e(cuò)lementType=″simple″type=″{type}{http//www.w3.org/2001/XMLSchema}string″id=″3DC9DBB9_9E7E_4CF4_BDA8_A0AF486E5364″minOccurs=″1″maxOccurs=″1″/>
;子元素given<XmlMappingElementname=″{element}{http//org.xmldb.personnel}given″localName=″given″
elementType=″simple″type=″{type}{http//www.w3.org/2001/XMLSchema}string″id=″11B6ACF7_CC08_415C_8650_FB5730BE0137″minOccurs=″1″maxOccurs=″1″/>
</XmlMappingType>
;復(fù)雜類型{element}{http//org.xmldb.personnel}url<XmlMappingType id=″22F2B421_815E_4E95_9D49_C67FA72D5265″name=″{element}{http//org.xmldb.personnel}url″namespace=″http//org.xmldb.personnel″>
;子元素href<XmlMappingElement name=″href″localName=″href″e(cuò)lementType=″attribute″type=″{type}{http//www.w3.org/2001/XMLSchema}string″id=″5ACA5FFB_8E8A_4E9A_A17F_86FFCD1EE1EC″/>
</XmlMappingType>
;復(fù)雜類型{element}{http//org.xmldb.personnel}person/addresses<XmlMappingType id=″3E043791_8941_471A_A95D_A3DC796BBD5C″name=″{element}{http//org.xmldb.personnel}person/addresses″namespace=″http//org.xmldb.personnel″>
;子元素address<XmlMappingElementname=″{element}{http//org.xmldb.address}address″localName=″address″e(cuò)lementType=″complex″type=″{element}{http//org.xmldb.address}address″id=″35CE114E_D191_4534_A321_9BA88F9CB0BF″/>
</XmlMappingType>
</XmlMappingTypes>
下面根據(jù)映射文件mapping-personal.xml生成關(guān)系數(shù)據(jù)庫(kù)表。
首先對(duì)于mapping-personal.xml中的每一個(gè)XmlMappingType生成一張表,為了使表名唯一,本例采用XmlMappingType中的id作為該表的表名;其次將XmlMappingType所包含的所有屬性和出現(xiàn)小于等于一次的簡(jiǎn)單類型元素作為該表的字段;再者對(duì)于出現(xiàn)不止一次的簡(jiǎn)單類型元素生成一張子表,其表名為XmlMappingElement的id;最后,對(duì)所有生成的表都建立公共字段uuid_id,uuid_name,uuid_docid,uuid_parented,uuid_order。
注對(duì)于一個(gè)復(fù)雜類型元素只生成一張表,不管該復(fù)雜類型是由哪個(gè)xmlschema所引用。這樣使生成的表不依賴于引用復(fù)雜類型的xml schema,而只依賴于定義該復(fù)雜類型元素的xml schema。因而使所有相同類型的元素都會(huì)存儲(chǔ)在一起,不管其來(lái)源,從而有利于對(duì)特定元素的查詢。
對(duì)于mapping-personal.xml中有五個(gè)XmlMappingType元素,同時(shí)簡(jiǎn)單類型元素{element}{http//org.xmldb.personnel}email的最大出現(xiàn)次數(shù)大于1,故應(yīng)生成六張表,將生成表的情況存放在數(shù)據(jù)庫(kù)系統(tǒng)表complextype中為
其中每張表都包含如下公共字段(其中AB8E7A48_544A_48E3_8E4C_81268F986E10為本例指定的UUID)
對(duì)于每張表除了包含上述公共字段外,還包含了schema定義的所屬類型的所有屬性和簡(jiǎn)單類型元素的字段。
表94737D4C_F969_48FF_A4Al_823FA8647BAD({element}{http//org.xmldb.personnel}personnel)包含的字段為
表D62EIF94_35CA_4362_BB4E_DC39C58EACA3({element}{http//org.xmldb.personnel}person)包含的字段為
表CAAAF143_2956_454D_8AF3_8E59F56BBA4E({element}{http//org.xmldb.personnel}person/email)包含的字段為
表45E5901B_C36F_4F9E_8888_ADB29B816770({element}{http//org.xmldb.personnel}name)包含的字段為
表22F2B421_815E_4E95_9D49_C67FA72D5265({element}{http//org.xmldb.personnel}url)包含的字段為
表3E043791_8941_471A_A95D_A3DC796BBD5C({element}{http//org.xmldb.personnel}person/addresses)包含的字段為
綜上所述,采用本發(fā)明可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法的技術(shù)方案,可以將xml類型(復(fù)雜類型、全局元素和出現(xiàn)次數(shù)不止一次的簡(jiǎn)單類型元素)映射成關(guān)系數(shù)據(jù)庫(kù)表,這樣就可以利用關(guān)系數(shù)據(jù)庫(kù)成熟的技術(shù)來(lái)處理(存儲(chǔ)、查詢等)xml文件。
以上所述僅是本發(fā)明可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法原理的前提下,還可以作出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法的保護(hù)范圍。
權(quán)利要求
1.一種可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法,其特征在于,包括下述步驟10)將模式間的依賴關(guān)系存放在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)表中;20)為可擴(kuò)展標(biāo)記語(yǔ)言文件中的每一個(gè)名稱空間創(chuàng)建一個(gè)映射文件,所述映射文件包括該模式中所有的復(fù)雜類型、簡(jiǎn)單類型、全局元素以及相應(yīng)子元素;30)為映射文件中每一個(gè)復(fù)雜類型、全局元素以及出現(xiàn)不止一次的簡(jiǎn)單類型元素分別生成一個(gè)與其對(duì)應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表,其所包含子元素和出現(xiàn)小于等于一次的簡(jiǎn)單類型元素作為與其對(duì)應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表中的字段。
2.如權(quán)利要求1所述的可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法,其特征在于,所述步驟20)又進(jìn)一步分為下述步驟200)獲取可擴(kuò)展標(biāo)記語(yǔ)言文件的模式對(duì)象模型;201)根據(jù)模式對(duì)象模型獲取每一個(gè)模式所對(duì)應(yīng)的名稱空間并為每一個(gè)名稱空間創(chuàng)建一個(gè)映射文件;重復(fù)步驟202)至208)填充每一個(gè)映射文件,202)獲取每個(gè)名稱空間的全部全局元素和復(fù)雜類型;203)為每一個(gè)全局元素生成一個(gè)可擴(kuò)展標(biāo)記語(yǔ)言元素映射節(jié)點(diǎn),并設(shè)置與其相應(yīng)的屬性;204)生成可擴(kuò)展標(biāo)記語(yǔ)言元素映射集合節(jié)點(diǎn),且該集合節(jié)點(diǎn)包含步驟203)中生成的所有節(jié)點(diǎn);205)為每一個(gè)復(fù)雜類型生成一個(gè)可擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn),并設(shè)置與其相應(yīng)的屬性;206)找出每一個(gè)復(fù)雜類型所包含的所有子元素;207)為每一個(gè)子元素生成一個(gè)可擴(kuò)展標(biāo)記語(yǔ)言元素節(jié)點(diǎn)并將其放入其所屬的復(fù)雜類型的擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn)中;208)生成可擴(kuò)展標(biāo)記語(yǔ)言類型集合節(jié)點(diǎn),該集合節(jié)點(diǎn)包括步驟205)中生成的所有可擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn)。
3.如權(quán)利要求2所述的可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法,其特征在于,所述與可擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn)相應(yīng)的屬性為復(fù)雜類型標(biāo)識(shí),id,用于標(biāo)識(shí)該復(fù)雜類型名稱,name,用于表示該復(fù)雜類型的全局名稱名字空間,namespace,用于表示該復(fù)雜類型的名字空間;與可擴(kuò)展標(biāo)記語(yǔ)言元素節(jié)點(diǎn)相應(yīng)的屬性為名稱,name,用于表示該元素的全局名稱原始名稱,localName,用于表示由模式對(duì)象模型指定的該元素的原始名稱元素類別,elementType,用于表示該元素的類別元素類型,type,用于表示該元素的類型元素標(biāo)識(shí),id,用于標(biāo)識(shí)該元素。
4.如權(quán)利要求3所述的可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法,其特征在于,所述步驟30)又進(jìn)一步分為下述步驟300)為映射文件中的每一個(gè)可擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn)生成一個(gè)關(guān)系數(shù)據(jù)庫(kù)表,表名為其屬性復(fù)雜類型標(biāo)識(shí);301)將每一個(gè)可擴(kuò)展標(biāo)記語(yǔ)言類型節(jié)點(diǎn)所包含的所有屬性和出現(xiàn)小于等于一次的簡(jiǎn)單類型元素作為與其相應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表的字段;302)為每一個(gè)出現(xiàn)不止一次的簡(jiǎn)單類型元素生成一個(gè)子關(guān)系數(shù)據(jù)庫(kù)表,該表名為其屬性元素標(biāo)識(shí);303)為每一個(gè)關(guān)系數(shù)據(jù)庫(kù)表建立下列字段記錄序號(hào),uuid_id,用于表示記錄順序?qū)嵗孛Q,uuid_name,用于表示可擴(kuò)展標(biāo)記語(yǔ)言文件實(shí)例中該元素的名稱實(shí)例標(biāo)識(shí),uuid_docid,用于標(biāo)識(shí)可擴(kuò)展標(biāo)記語(yǔ)言文件實(shí)例父元素標(biāo)識(shí),uuid_parentid,用于標(biāo)識(shí)該元素的父元素元素順序,uuid_order,用于表示可擴(kuò)展標(biāo)記語(yǔ)言文件實(shí)例中元素出現(xiàn)的順序。
5.如權(quán)利要求4所述的可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法,其特征在于,還包括步驟建立數(shù)據(jù)庫(kù)系統(tǒng)表,所述數(shù)據(jù)庫(kù)系統(tǒng)表包括模式引用關(guān)系表,Schemacrossref,用于存放可擴(kuò)展標(biāo)記語(yǔ)言文件模式間的依賴關(guān)系;模式表,Schema,用于存放可擴(kuò)展標(biāo)記語(yǔ)言文件模式與其對(duì)應(yīng)的映射文件的對(duì)應(yīng)關(guān)系;文件實(shí)例表,DocInstance,用于存放可擴(kuò)展標(biāo)記語(yǔ)言文件存儲(chǔ)標(biāo)識(shí)。
全文摘要
本發(fā)明公開(kāi)一種可擴(kuò)展標(biāo)記語(yǔ)言類型至關(guān)系數(shù)據(jù)庫(kù)表的映射方法,包括步驟10)將模式間的依賴關(guān)系存放在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)表中;20)為可擴(kuò)展標(biāo)記語(yǔ)言文件中的每一個(gè)名稱空間創(chuàng)建一個(gè)映射文件,所述映射文件包括該模式中所有的復(fù)雜類型、簡(jiǎn)單類型、全局元素以及相應(yīng)子元素;30)為映射文件中每一個(gè)復(fù)雜類型、全局元素以及出現(xiàn)不止一次的簡(jiǎn)單類型元素分別生成一個(gè)與其對(duì)應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表,其所包含子元素和出現(xiàn)小于等于一次的簡(jiǎn)單類型元素作為與其對(duì)應(yīng)的關(guān)系數(shù)據(jù)庫(kù)表中的字段??梢允沟媚J?模式定義了可擴(kuò)展標(biāo)記語(yǔ)言類型)所定義的一類可擴(kuò)展標(biāo)記語(yǔ)言文件共享一套數(shù)據(jù)庫(kù)表,而無(wú)需就單獨(dú)的可擴(kuò)展標(biāo)記語(yǔ)言文件進(jìn)行數(shù)據(jù)庫(kù)映射。
文檔編號(hào)G06F17/30GK1632794SQ200410102620
公開(kāi)日2005年6月29日 申請(qǐng)日期2004年12月27日 優(yōu)先權(quán)日2004年12月27日
發(fā)明者李安渝, 嚴(yán)兵, 傅朝霞, 秦良娟, 丁蔚, 耿建光, 秦懷平, 董勝濤 申請(qǐng)人:中國(guó)科學(xué)院軟件研究所, 神州數(shù)碼軟件有限公司