可扩展标记语言元素和类型的全局命名方法

文档序号:6446199阅读:102来源:国知局
专利名称:可扩展标记语言元素和类型的全局命名方法
技术领域
本发明涉及可扩展标记语言领域,尤指一种对可扩展标记语言文件中的各级父子关系的元素和类型进行全局命名的可扩展标记语言元素和类型的全局命名方法。
背景技术
随着Internet的迅猛发展,XML(可扩展标记语言)作为Internet上数据表示的新标准,以其具有的自描述性、灵活性、扩展性和平台无关性等优势,正在被广泛的应用于Web上的数据传输和数据存储过程中。
W3C(万维网联盟,XML标准组织)推出了一系列的XML相关的技术和标准,其中可以通过XPath(XML路径表达方式标准)来对某个具体的XML文件中的元素及其子元素和属性进行定位,支持XPath的解析器可以迅速的根据XPath分析出XML文档中的某个具体元素。使用XPath这种处理方式时必须根据具体的XML文档结构来书写其特定的路径,如果对于大量结构不同但又具有相似元素或类型的XML文档,我们只能针对每个文档使用对应的XPath来找到这个元素,在这种情况下这种处理方式是很繁琐的,同时效率也是很低的。
如何对XML文档中的元素和类型进行命名,使得能够通过唯一名字来找到不同XML文档中相同定义的元素,这一直是业界关注的问题,目前还没有解决方案。

发明内容
本发明要解决的问题是提供一种能够对XML文档中的元素和类型进行全局命名的可扩展标记语言元素和类型的全局命名方法。
为了解决上述问题,本发明可扩展标记语言元素和类型的全局命名方法的技术方案包括下述步骤10)将全局元素命名为“{element}{+目标名称空间+}+元素的名称属性值”;20)将全局复杂类型命名为“{type}{+目标名称空间+}+复杂类型的名称属性值”;30)将局部元素命名为“包含该局部元素的复杂类型的全局名字+“/”+该局部元素的名称属性值”;40)将局部复杂类型命名为该局部复杂类型的父元素的全局名字;50)将简单类型命名为其基础类型的全局名字。
所述步骤10)前还包括下述步骤1)获取可扩展标记语言模式文件定义的目标名称空间;
2)读取模式文件中的全局元素的名称属性值。
所述步骤10)和步骤20)之间还包括以下步骤11)获取可扩展标记语言模式文件定义的目标名称空间;12)读取模式文件中的全局复杂类型的名称属性值。
所述步骤20)和步骤30)之间还包括以下步骤21)获取包含局部元素的复杂类型的全局名字;22)读取该局部元素的名称属性值。
所述步骤30)和步骤40)之间还包括步骤获取包含局部复杂类型的父元素的全局名字。
所述步骤40)和步骤50)之间还包括以下步骤获取简单类型的基础类型的全局名字。
与现有技术相比,本发明可扩展标记语言元素和类型的全局命名方法的有益效果由于对XML的元素和类型进行全局命名,将全局元素命名为“{element}{+目标名称空间+}+元素的名称属性值”、将全局复杂类型命名为“{type}{+目标名称空间+}+复杂类型的名称属性值”、将局部元素命名为“包含该局部元素的复杂类型的全局名字+“/”+该局部元素的名称属性值”、将局部复杂类型命名为该局部类型的父元素的全局名字以及将简单类型命名为其基础类型的全局名字。这样不仅可以很快地标识出Schema中未显式给出名称的匿名类型和不同类型中定义的名字可能相同的局部元素,也可以很方便的区分Schema不同的名称空间中定义的相同名字的元素和类型,同时在Schema引用别的Schema导致多个名称空间在同一XML文档中出现的情况下,也可以通过全局名字来唯一区分该元素和类型,还可以很方便的根据Schema定义的复杂类型来处理相同的XML元素,统一集中的处理这些信息,省去分析大量XML文档所带来的额外开销。


图1是本发明可扩展标记语言元素和类型的全局命名方法的流程图。
具体实施例方式
如图1所示,本发明可扩展标记语言元素和类型的全局命名方法包括下述步骤10)将全局元素命名为“{element}{+目标名称空间+}+元素的名称属性值”;20)将全局复杂类型命名为“{type}{+目标名称空间+}+复杂类型的名称属性值”;30)将局部复杂类型命名为该局部复杂类型的父元素的全局名字;40)将局部元素命名为“包含该局部元素的复杂类型的全局名字+“/”+该局部元素的名称属性值”;50)将简单类型命名为其基础类型的全局名字。
使用目标名称空间作为全局元素的全局名字的一部分,这样能够将处在不同schema中的具有相同名称属性值的全局元素区分开;至于全局复杂类型的命名同理;由于局部复杂类型对所属元素是不可见,所以它的名字可以忽略,故在对局部复杂类型进行命名时获取引用它的父元素的全局名字,并把这个名称作为该匿名类型的全局名字;当局部元素是由一个局部类型所定义时,或者一个局部类型被一个局部元素所引用时,局部类型和局部元素的命名是相互递归的,顺序是从外到里;对于简单类型使用其基础类型的全局名字作为其全局名字。
所述步骤10)前还包括下述步骤1)获取可扩展标记语言模式(Schema)文件定义的目标名称空间(TargetNameSpace);2)读取模式文件中的全局元素(element)的名称属性(name)值。
可通过XML解析工具来获取schema文件定义的目标名称空间以及读取所述名称属性值。
所述步骤10)和步骤20)之间还包括以下步骤11)获取可扩展标记语言模式文件定义的目标名称空间;12)读取模式文件中的全局复杂类型(complexType)的名称属性(name)值。
可通过XML解析工具来获取schema文件定义的目标名称空间以及读取所述名称属性值。
所述步骤20)和步骤30)之间还包括以下步骤21)获取包含局部元素的复杂类型的全局名字;22)读取该局部元素的名称属性值。
可通过XML解析工具来获取schema文件定义的目标名称空间以及读取所述名称属性值。
所述步骤30)和步骤40)之间还包括步骤获取包含局部类型的父元素的全局名字。
可通过XML解析工具来获取schema文件定义的包含局部类型的父元素的全局名字。
所述步骤40)和步骤50)之间还包括步骤获取简单类型的基础类型的全局名字。
可通过XML解析工具来获取schema文件定义的简单类型的基础类型的全局名字。
对于xml文档中包含的类型及元素可分为全局元素、局部元素、全局复杂类型、局部复杂类型和简单类型。
下面介绍三个schema文件,采用本发明可扩展标记语言元素和类型的全局命名方法的技术方案对其元素和类型进行命名的过程。
Schema一address.xsd<?xml version=″1.0″encoding=″UTF-8″?>
<xsschema targetNamespace=http//org.xmldb.addressxmlns=″http//org.xmldb.address″xmlnsxs=http//www.w3.org/2001/XMLSchemaelementFormDefault=″qualified″attributeFormDefault=″unqualified″>
;Schema所定义的全局元素address<xselement name=″address″>
;Schema所定义的局部复杂类型<xscomplexType>
<xssequence>
;Schema所定义的局部复杂类型中定义的局部元素<xselement name=″tel″type=″xsstring″/>
<xselement name=″postcode″type=″xsstring″/>
<xselement name=″street″type=″xsstring″/>
</xssequence>
</xscomplexType>
</xselement>
</xsschema>
该Schema所属的名称空间http//org.xmldb.address首先为Schema一中定义的全局元素进行命名,该Schema所定义的全局元素为address,其名称属性值为address,因而全局元素address的全局名字是{element}{http//org.xmldb.address}address;由于Schema一没有定义全局复杂类型及简单类型,故不涉及对全局复杂类型及简单类型的命名;下面对局部复杂类型进行命名,由于局部复杂类型对所属元素是不可见的,所以局部复杂类型的名字可以忽略,故本方案将引用它的父元素的全局名称作为局部复杂类型的全局名字。
Schema一中的局部复杂类型的父元素为address,故将address的全局名字作为该局部复杂类型的全局名字为{element}{http//org.xmldb.address}address;Schema一中的局部元素为tel、postcode和street包含tel的复杂类型的全局名字为{element}{http//org.xmldb.address}address,tel的名称属性值为tel,故其全局名字为{element}{http//org.xmldb.address}address/tel;包含postcode的复杂类型的全局名字为{element}{http//org.xmldb.address}address,postcode的名称属性值为postcode,故其全局名字为{element}{http//org.xmldb.address}address/postcode包含street的复杂类型的全局名字为{element}{http//org.xmldb.address}address,其名称属性值为street,故其全局名字为{element}{http//org.xmldb.address}address/street。
Schema二personal.xsd<?xml version=″1.0″encoding=″UTF-8″?><xsschema targetNamespace=http//org.xmldb.personnelxmlnsaddr=http//org.xmldb.addressxmlns=http//org.xmldb.personnelxmlnsxs=http//www.w3.org/2001/XMLSchemaelementFormDefault=″qualified″>
<xsimport namespace=http//org.xmldb.addressschemaLocation=″address.xsd″/>;Schema所定义的全局元素<xselement name=″personnel″>;Schema所定义的局部复杂类型<xscomplexType>
<xssequence>
<xselement ref=″person″maxOccurs=″unbounded″/>
</xssequence>
</xscomplexType>
<xsunique name=″unique 1″>
<xsselector xpath=″person″/>
<xsfield xpath=″name/given″/>
<xsfield xpath=″name/family″/>
</xsunique>
<xskey name=″empid″>
<xsselector xpath=″person″/>
<xsfield xpath=″@id″/>
</xskey>
<xskeyref name=″keyref1″refer=″empid″>
<xsselector xpath=″″person″/>
<xsfield xpath=″link/@manager″/>
</xskeyre></xselement>;Schema所定义的全局元素
<xselement name=″person″>;Schema所定义的局部复杂类型<xscomplexType>
<xssequence>
<xselement ref=″name″/>
<xselement ref=″email″ minOccurs=″0″maxOccurs=″unbounded″/>
<xselement ref=″url″minOccurs=″0″maxOccurs=″unbounded″/>
<xselement name=″addresses″>
<xscomplexType>
<xssequence maxOccurs=″unbounded″>;Schema所定义的局部元素<xselement ref=″addraddress″/>
</xssequence>
</xscomplexType>
</xselement>
</xssequence>
<xsattribute name=″id″type=″xsID″use=″required″/>
<xsattribute name=″note″type=″xsstring″/>
<xsattribute name=″contr″default=″false″>
;Schema定义的简单类型<xssimpleType>;<xsrestriction base=″xsstring″>
<xsenumeration value=″true″/>
<xsenumeration value=″false″/>
</xsrestriction>
</xssimpleType>
</xsattribute>
<xsattribute name=″salary″type=″xsinteger″/>
</xscomplexType></xselement>;Schema所定义的全局元素<xselement name=″name″>;Schema所定义的局部复杂类型<xscomplexType>
<xsall>
<xselement ref=″family″/>
<xselement ref=″given″/>
</xsall>
</xscomplexType></xselement>;Schema所定义的全局元素<xselement name=″family″type=″xsstring″/>;Schema所定义的全局元素<xselement name=″given″type=″xsstring″/>;Schema所定义的全局元素<xselement name=″email″type=″xsstring″/>;Schema所定义的全局元素<xselement name=″url″>;Schema所定义的局部复杂类型<xscomplexType>
<xsattribute name=″hreftype=″xsstring″default=″http//″/>
</xscomplexType>
</xselement></xsschema>
该Schema所属的名称空间为http//org.xmldb.personnel首先,对Schema定义的全局元素进行命名全局元素personnel,其名称属性值为personnel,故其全局名字为{element}{http//org.xmldb.personnel}personel同理,其它的全局元素的全局名字为person{element}{http//org.xmldb.personnel}personname{element}{http//org.xmldb.personnel}namefamily{element}{http//org.xmldb.personnel}familygiven{element}{http//org.xmldb.personnel}givenemail{element}{http//org.xmldb.personnel}emailurl{element}{http//org.xmldb.personnel}url该Schema没有定义全局复杂类型;对该Schema定义的所有局部复杂类型采用其父元素的全局名字作为该局部复杂类型的全局名字,因而本Schema的四个局部复杂类型的全局名字为{element}{http//org.xmldb.personnel}personel{element}{http//org.xmldb.personnel}person{element}{http//org.xmldb.personnel}name{element}{http//org.xmldb.personnel}url对于Schema定义的局部元素addresses,包含其的复杂类型的全局名字为{element}{http//org.xmldb.personnel}person,其名称属性值为addresses,故该局部元素的全局名字为{element}{http//org.xmldb.personnel}person/addresses
该Schema中定义的简单类型的基础类型是xsstring,通过xml解析器获取名字空间http//www.w3.org/2001/XMLSchema定义的类型xsString的全局名字是{type}{http//www.w3.org/2001/XMLSchema}String。
故该局部简单类型的全局名字为{type}{http//www.w3.org/2001/XMLSchema}StringSchema 三company.xsd<?xml version=″1.0″encoding=″UTF-8″?><xsschema targetNamespace=http//org.xmldb.companyxmlnsper=http//org.xmldb.personnelxmlns=″http//org.xmldb.company″xmlnsxs=″http//www.w3.org/2001/XMLSchema″elementFormDefault=″qualified″attributeFormDefault=″unqualified>
<xsimport namespace=″http//org.xmldb.personnel″schemaLocation=″personal.xsd″/>;Schema所定义的全局元素<xselement name=″company″>;Schema所定义的局部复杂类型<xscomplexType>
<xssequence>;Schema所定义的局部元素<xselement name=″employee″type=″employee″/>;Schema所定义的局部元素<xselement name=″department″>;Schema所定义的局部复杂类型<xscomplexType>
<xssequence>;Schema所定义的局部元素<xselement name=″manager″>;Schema所定义的局部复杂类型<xscomplexType>
<xssequence>;Schema所定义的局部元素<xselement name=″rank″type=″xsstring″/>
<xselement ref=″perperson″/>
</xssequence>
</xscomplexType>
</xselement>;Schema所定义的局部元素
<xselement name=″name″type=″xsstring″/>
</xssequence>
</xscomplexType>
</xselement>
</xssequence>
</xscomplexType></xselement>;Schema所定义的全局复杂类型<xscomplexType name=″employee″>
<xssequence>
<xselement ref=″perperson″maxOccurs=″unbounded″/>
</xssequence>
</xscomplexType></xsschema>
company.xsd所属的名称空间为http//org.xmldb.company;首先,为该Schema所定义的全局元素进行命名,该全局元素的名称属性值为company,故该全局元素的全局名字为{element}{http//org.xmldb.company}company其次,为该Schema定义的全局复杂类型进行命名该全局元素的名称属性值为employee,故该全局复杂类型的全局名字为{type}{http//org.xmldb.company}employee再者,为该Schema定义的局部元素进行命名,该schema定义了五个局部元素,employee、department、manager、rank和name对于employee,获取包含该局部元素的类型的全局名字为{element}{http//org.xmldb.company}company,该局部元素的名称属性值为employee,因而该局部元素的全局名字为{element}{http//org.xmldb.company}company/employee对于department,获取包含该局部元素的复杂类型的全局名字为{element}{http//org.xmldb.company}department,该局部元素的名称属性值为department,因而该局部元素的全局名字为{element}{http//org.xmldb.company}company/department对于manager,获取包含该局部元素的复杂类型的全局名字为{element}{http//org.xmldb.company}company/department,该局部元素的名称属性值为manager,因而该局部元素的全局名字为{element}{http//org.xmldb.company}company/department/manager对于rank,获取包含该局部元素的复杂类型的全局名字为{element}{http//org.xmldb.company}company/department/manager,该局部元素的名称属性值为rank,因而该局部元素的全局名字为{element}{http//org.xmldb.company}company/department/manager/rank
对于name,获取包含该局部元素的复杂类型的全局名字为{element}{http//org.xmldb.company}company/department,该局部元素的名称属性值为name,因而该局部元素的全局名字为{element}{http//org.xmldb.company}company/department/name最后,为该Schema定义的局部类型进行命名,该schema共定义了三个局部复杂类型,分别包含这三个局部复杂类型的父元素的全局名字分别为{element}{http//org.xmldb.company}company{element}{http//org.xmldb.company}company/department{element}{http//org.xmldb.company}company/department/manager因而,这三个局部复杂类型的全局名字分别为{element}{http//org.xmldb.company}company{element}{http//org.xmldb.company}company/department{element}{http//org.xmldb.company}company/department/manager以上所述仅是本发明可扩展标记语言元素和类型的全局命名方法的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明可扩展标记语言元素和类型的全局命名方法原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明可扩展标记语言元素和类型的全局命名方法的保护范围。
权利要求
1.一种可扩展标记语言元素和类型的全局命名方法,其特征在于,包括下述步骤10)将全局元素命名为“{element}{+目标名称空间+}+元素的名称属性值”;20)将全局复杂类型命名为“{type}{+目标名称空间+}+复杂类型的名称属性值”;30)将局部元素命名为“包含该局部元素的复杂类型的全局名字+“/”+该局部元素的名称属性值”;40)将局部复杂类型命名为该局部复杂类型的父元素的全局名字;50)将简单类型命名为其基础类型的全局名字。
2.如权利要求1所述的可扩展标记语言元素和类型的全局命名方法,其特征在于,所述步骤10)前还包括下述步骤1)获取可扩展标记语言模式文件定义的目标名称空间;2)读取模式文件中的全局元素的名称属性值。
3.如权利要求2所述的可扩展标记语言元素和类型的全局命名方法,其特征在于,所述步骤10)和步骤20)之间还包括以下步骤11)获取可扩展标记语言模式文件定义的目标名称空间;12)读取模式文件中的全局复杂类型的名称属性值。
4.如权利要求3所述的可扩展标记语言元素和类型的全局命名方法,其特征在于,所述步骤20)和步骤30)之间还包括以下步骤21)获取包含局部元素的复杂类型的全局名字;22)读取该局部元素的名称属性值。
5.如权利要求4所述的可扩展标记语言元素和类型的全局命名方法,其特征在于,所述步骤30)和步骤40)之间还包括步骤获取包含局部复杂类型的父元素的全局名字。
6.如权力要求5所述的可扩展标记语言元素和类型的全局命名方法,其特征在于,所述步骤40)和步骤50)之间还包括以下步骤获取简单类型的基础类型的全局名字。
全文摘要
本发明公开了一种可扩展标记语言元素和类型的全局命名方法,包括下述步骤10)将全局元素命名为“{element}{+目标名称空间+}+元素的名称属性值”;20)将全局复杂类型命名为“{type}{+目标名称空间+}+复杂类型的名称属性值”;30)将局部元素命名为“包含该局部元素的复杂类型的全局名字+“/”+该局部元素的名称属性值”;40)将局部复杂类型命名为该局部复杂类型的父元素的全局名字;50)将简单类型命名为其基础类型的全局名字。可以很方便的区分Schema不同的名称空间中定义的相同名字的元素和类型,同时在Schema引用别的Schema导致多个名字空间在同一XML文档中出现的情况下,也可以通过全局名字来唯一区分该元素和类型。
文档编号G06F17/21GK1632795SQ20041010262
公开日2005年6月29日 申请日期2004年12月27日 优先权日2004年12月27日
发明者李安渝, 严兵, 傅朝霞, 秦良娟, 丁蔚, 耿建光, 秦怀平, 董胜涛 申请人:中国科学院软件研究所, 神州数码软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1