背景技术
RFID技术作为一种新兴技术,在商业领域特别是在物流领域中正得到快速应用。电子产品码全球(EPCglobal)组织作为RFID领域的标准组织,致力于推广RFID技术的广泛应用,其相继推出了RFID技术应用系统的标准框架、应用级别事件(ALE,Application Level Event)标准、EPCIS标准等,极大地推动了RFID技术的商业进程。
其中,EPCIS标准的目标是物联网上共享EPCIS数据。为了使数据提供者和使用者都能够理解这些EPCIS数据,就必须采用统一的、标准的数据格式来描述EPCIS数据。EPCIS标准采用可扩展标记语言(XML,Extensible Markup Language)模式(Schema)文档来描述数据模型,也采用XML来承载数据实体,并通过网络服务描述语言(WSDL,Web Service Description Language)的方式在数据提供者和数据使用者之间进行传递。
EPCIS标准中,有两类重要的抽象数据模型:事件模型和主数据模型。事件模型包括如下概念:事件类型、事件实体、事件域类型和事件域实体。主数据模型包括如下概念:主数据类型、主数据实体、词汇类型、词汇实体、词汇属性类型和词汇属性实体。为了理解这些概念,首先要理解信息模型与信息实体的概念。另外,由于EPCIS标准采用XML Schema文档来描述所有的数据模型,因此对于XML中的一些概念如:元素、属性、简单类型和复杂类型等请参见XML相关说明,这里不再赘述。以下介绍本文中涉及到的概念:
信息模型,指描述信息实体结构的数据信息。
信息实体,指依照某种信息模型,有具体取值的数据信息。
元数据,指描述信息模型的数据。
实体数据,指描述信息实体的数据。
事件类型,指描述事件实体结构的信息模型。
事件实体,指依照某种事件类型,有具体取值的信息实体,本文提到的事件等同于事件实体。
事件域类型,指描述事件域结构的信息模型;
事件域类型在XML schema文档中描述为一种元素,既然是元素,就有简单和复杂两种类型,如果是复杂类型的元素,则元素中还会含有子元素,也称为子事件域类型;并且,事件域类型还可以有自己的属性。
事件域实体,指依照某种事件域类型,有具体取值的信息实体;
事件域实体在XML Schema文档中也描述为一种元素,也有简单和复杂两种类型;并且,事件域实体还可以有自己的属性。
主数据类型,指描述主数据实体结构的信息模型。
主数据实体,指依照某种主数据类型,有具体取值的信息实体,本文提到的主数据等同于主数据实体。
词汇类型,指描述词汇实体结构的信息模型;
词汇类型在XML Schema文档中也描述为一种元素,但没有子词汇类型的说法,一种词汇类型含有多个词汇属性类型。
词汇实体,指依照某种词汇类型,有具体取值的信息实体;
词汇实体在XML Schema文档中也描述为一种元素,也有简单和复杂两种类型;并且,词汇实体还可以有自己的属性。
词汇属性类型,指描述词汇属性实体结构的信息模型;
词汇属性类型在XML schema文档中也描述为一种元素,与事件域类型一样,也有简单类型和复杂类型之分,因此也就有子词汇属性类型或子元素一说,并且,词汇属性类型还可以有自己的属性。
词汇属性实体:指依照某种词汇属性类型,有具体取值的信息实体。
其中,事件实体与事件域实体之间是整体与部分的关系,一个事件实体由多个事件域实体组成。主数据实体与词汇实体之间也是整体与部分的关系。另外,词汇实体与词汇属性实体之间也是整体与部分的关系,一个词汇实体除了有自己的通用资源标志符(URI,Unified Resource Identity)取值之外,还包含有多个词汇属性实体。事件实体与事件域实体之间的关系通过事件类型来体现;主数据实体与词汇实体之间的关系通过主数据类型来体现;词汇实体与词汇属性实体之间的关系通过词汇类型来体现。
另外,事件域类型与词汇类型之间还可以有对应关系,有些事件域类型就是某种词汇类型,其取值就是该词汇类型的某一词汇实体的URI。
EPCIS标准采用XML定义了这两类数据模型。EPCIS系统中存在大量事件和主数据需要分析处理,首先必须把这些事件和主数据存储到关系数据库中,因此需要设计基于数据库技术的XML存储和查询方案。当前商业系统中的存储方案基本都是把每个XML Schema文档中定义的每个实体对应地生成一张关系表,有多少种实体类型的定义就存在多少张这样的关系表;同时把标志索引(IDREF)引用、元素次序、映射关系等元数据存储到一张特殊关系表即文档类型定义(DTD)字典中,通过该DTD字典的结构来保证XML-关系映射的无损性。这种复杂结构的优点在于可以保证XML中的所有信息都保存到了关系数据库中,具有很好的通用性,但同时也有如下缺点:
1、EPCIS系统的表结构复杂,存储逻辑实现困难,效率低,这种问题在事件定义的层次结构很深的情况下,表现尤为突出。
2、数据冗余度大,每一类事件和主数据需要定义一个单独的存储表,实体中的域存在大量重复取值,相应的表中也就存在大量冗余数据;
例如:XML Schema片段中定义了三种事件类型:集合事件类型(AggregationEventType)、数量事件类型(QuantityEventType)和交易事件类型(TransactionEventType),若采用当前商业系统通用的存储方法,则将至少在关系数据库中定义三张关系表:集合事件表(AggregationEventTable)、数量事件表(QuantityEventTable)和交易事件表(TransactionEventTable),每张关系表用来保存对应的EPCIS事件,不同类型的EPCIS事件中取值相同的事件域实体,将分别被存储到三张关系表中,因而导致在关系数据库中出现多份冗余数据;如果进一步增加新的事件类型,就需要定义新的关系表,这样冗余数据会越来越多。
3、DTD字典设计复杂,维护、扩充也比较困难。
发明内容
有鉴于此,本发明的主要目的在于提供一种表结构简单、且表之间的关系清晰明了的EPCIS数据的存储方法及装置。
为达到上述目的,本发明的技术方案是这样实现的:
一种EPCIS数据的存储方法,包括:
在EPCIS系统的数据库中设置元素表、属性表、元素属性关系表、事件表及主数据表;
接收EPCIS数据;
初始化数据库连接,并判断EPCIS数据的类型,如果EPCIS数据为事件,则执行过程A将事件存储到数据库中;否则,如果EPCIS数据为主数据,则执行过程B将主数据存储到数据库中;
过程A:
获取组成事件的所有事件域实体;
将各事件域实体的名称和取值成对地存储到元素表中,且对应每对存储的事件域实体的名称和取值,在元素表中生成表示该事件域实体的名称和取值对应关系的元素标志;
将各事件域实体的所有属性的名称和取值成对地存储到属性表中,且对应每对存储的事件域实体的属性的名称和取值,在属性表中生成表示该事件域实体的属性的名称和取值对应关系的属性标志;
将元素表中与事件域实体对应的元素标志以及属性表中与事件域实体的属性对应的属性标志成对地存储到元素属性关系表中;
将各事件域实体的路径以及元素表中与事件域实体对应的元素标志成对地存储到事件表中;
过程B:
获取组成主数据的所有词汇实体;
将各词汇实体的名称和取值成对地存储到元素表中,且对应每对存储的词汇实体的名称和取值,在元素表中生成表示该词汇实体的名称和取值对应关系的元素标志;
将各词汇实体的所有属性的名称和取值成对地存储到属性表中,且对应每对存储的词汇实体的属性的名称和取值,在属性表中生成表示该词汇实体的属性的名称和取值对应关系的属性标志;
将元素表中与词汇实体对应的元素标志以及属性表中与词汇实体的属性对应的属性标志成对地存储到元素属性关系表中;
将各词汇实体的路径以及元素表中与词汇实体对应的元素标志成对地存储到主数据表中。
其中,所述将事件域实体的名称和取值成对地存储到元素表中之前,所述存储方法还包括以下步骤:
查找元素表中是否存在该对事件域实体的名称和取值的记录,如果存在,则不再存储该对事件域实体的名称和取值;否则,将该事件域实体的名称和取值成对地存储到元素表中。
其中,所述将事件域实体的属性的名称和取值成对地存储到属性表中之前,所述存储方法还包括以下步骤:
查找属性表中是否存在该对事件域实体的属性的名称和取值的记录,如果存在,则不再存储该对事件域实体的属性的名称和取值;否则,将该事件域实体的属性的名称和取值成对地存储到属性表中。
其中,所述将词汇实体的名称和取值成对地存储到元素表中之前,所述存储方法还包括以下步骤:
查找元素表中是否存在该对词汇实体的名称和取值的记录,如果存在,则不再存储该对词汇实体的名称和取值;否则,将该词汇实体的名称和取值成对地存储到元素表中。
其中,所述将词汇实体的属性的名称和取值成对地存储到属性表中之前,所述存储方法还包括以下步骤:
查找属性表中是否存在该对词汇实体的属性的名称和取值的记录,如果存在,则不再存储该对词汇实体的属性的名称和取值;否则,将该词汇实体的属性的名称和取值成对地存储到属性表中。
其中,所述初始化数据库连接之前,所述存储方法还包括以下步骤:
对收到的EPCIS数据进行语法分析,如果存在语法错误,则结束对当前EPCIS数据的处理并继续接收EPCIS数据;否则,初始化数据库连接。
一种EPCIS数据的存储装置,包括:数据表设置模块、EPCIS数据接收模块、EPCIS数据类型判断模块、事件存储模块及主数据存储模块;其中,
数据表设置模块,用于在EPCIS系统的数据库中设置元素表、属性表、元素属性关系表、事件表及主数据表;
EPCIS数据接收模块,用于接收EPCIS数据;
EPCIS数据类型判断模块,用于在初始化数据连接之后,判断EPCIS数据为事件还是主数据;
事件存储模块,用于当EPCIS数据为事件时,将事件存储到数据库中;
主数据存储模块,用于当EPCIS数据为主数据时,将主数据存储到数据库中;
其中,事件存储模块包括:事件域实体获取模块、事件域实体存储模块、事件域实体的属性存储模块、事件域实体及其属性关系存储模块及事件域实体路径存储模块;
事件域实体获取模块,用于获取组成事件的所有事件域实体;
事件域实体存储模块,用于将各事件域实体的名称和取值成对地存储到元素表中,且对应每对存储的事件域实体的名称和取值,在元素表中生成表示该事件域实体的名称和取值对应关系的元素标志;
事件域实体的属性存储模块,用于将各事件域实体的所有属性的名称和取值成对地存储到属性表中,且对应每对存储的事件域实体的属性的名称和取值,在属性表中生成表示该事件域实体的属性的名称和取值对应关系的属性标志;
事件域实体及其属性关系存储模块,用于将元素表中与事件域实体对应的元素标志以及属性表中与事件域实体的属性对应的属性标志成对地存储到元素属性关系表中;
事件域实体路径存储模块,用于将各事件域实体的路径以及元素表中与事件域实体对应的元素标志成对地存储到事件表中;
其中,主数据存储模块包括:词汇实体获取模块、词汇实体存储模块、词汇实体的属性存储模块、词汇实体及其属性关系存储模块及词汇实体路径存储模块;
词汇实体获取模块,用于获取组成主数据的所有词汇实体;
词汇实体存储模块,用于将各词汇实体的名称和取值成对地存储到元素表中,且对应每对存储的词汇实体的名称和取值,在元素表中生成表示该词汇实体的名称和取值对应关系的元素标志;
词汇实体的属性存储模块,用于将各词汇实体的所有属性的名称和取值成对地存储到属性表中,且对应每对存储的词汇实体的属性的名称和取值,在属性表中生成表示该词汇实体的属性的名称和取值对应关系的属性标志;
词汇实体及其属性关系存储模块,用于将元素表中与词汇实体对应的元素标志以及属性表中与词汇实体的属性对应的属性标志成对地存储到元素属性关系表中;
词汇实体路径存储模块,用于将各词汇实体的路径以及元素表中与词汇实体对应的元素标志成对地存储到主数据表中。
其中,所述事件存储模块还包括:事件域实体查找模块、或事件域实体的属性查找模块,或这二者的组合;其中,
事件域实体查找模块,用于将事件域实体的名称和取值成对地存储到元素表中之前,查找元素表中是否存在该对事件域实体的名称和取值的记录,如果存在,则不再存储该对事件域实体的名称和取值;否则,利用事件域实体存储模块将该事件域实体的名称和取值成对地存储到元素表中;
事件域实体的属性查找模块,用于将事件域实体的属性的名称和取值成对地存储到元素表中之前,查找元素表中是否存在该对事件域实体的属性的名称和取值的记录,如果存在,则不再存储该对事件域实体的名称和取值;否则,利用事件域实体的属性存储模块将该事件域实体的名称和取值成对地存储到元素表中。
其中,所述主数据存储模块还包括:词汇实体查找模块,或词汇实体的属性查找模块,或这两者的组合;其中,
词汇实体查找模块,用于将词汇实体的名称和取值成对地存储到元素表中之前,查找元素表中是否存在该对词汇实体的名称和取值的记录,如果存在,则不再存储该对词汇实体的名称和取值;否则,利用词汇实体存储模块将该词汇实体的名称和取值成对地存储到元素表中;
词汇实体的属性查找模块,用于将词汇实体的属性的名称和取值成对地存储到属性表中之前,查找属性表中是否存在该对词汇实体的属性的名称和取值的记录,如果存在,则不再存储该对词汇实体的属性的名称和取值;否则,利用词汇实体的属性存储模块将该词汇实体的属性的名称和取值成对地存储到属性表中。
其中,所述存储装置还包括:EPCIS数据处理模块,用于对收到的EPCIS数据进行语法分析,如果存在语法错误,则结束对当前EPCIS数据的处理并继续接收EPCIS数据;否则,初始化数据库连接。
由以上技术方案可以看出,本发明仅用五张表即事件表、主数据表、元素表、属性表及元素属性关系表就能存储所有的事件和主数据,表的结构简单清楚;并且,通过事件表和主数据表分别存储元素表中相应的标志以及元素属性关系表存储元素及其属性的关系就能将所有的表关联起来,使得表之间的关系清晰明了,进而使已存储的数据读取起来也很方便。进一步地,本发明对于名称相同、取值也相同的元素在元素表中仅记录一次,对于名称相同、取值也相同的属性在属性表中也仅记录一次,这样就解决了元素和属性存储时的冗余问题。
具体实施方式
以下对本发明作进一步详细的说明。
本发明中事件和主数据仍采用XML格式进行定义。在数据库中首先定义元素表(ElementTable)、属性表(AttributeTable)及元素属性关系表(ElemAttriRelationTable),再在这三个表的基础上定义出事件表(EventTable)和主数据表(MasterDataTable)。
如图1所示,本发明存储EPCIS数据的数据库包括事件表1、主数据表2、元素表3、属性表4及元素属性关系表5。
事件表1由标志(ID)、元素路径(ElementPath)和元素ID(ElementID)组成。
其中,ElementPath表示事件域实体在事件实体层次结构中的路径,元素路径记录的格式为“x,y”,“x”表示第“x”层的子元素,“y”表示第“x”层的第“y”个子元素;ElementID是事件表1的外键(FK),存储元素表3中的ID,需要说明的是,事件表1并不存储元素表3中所有的ID,而是仅存储元素为事件域实体时对应的ID;每存储一对ElementPath和ElementID,就生成一个表示ElementPath和ElementID对应关系的唯一ID,ID是事件表1中的主键(PK)。为了区分各个数据表中的ID,将事件表1中的ID称为事件ID,将元素表3中的ID称为元素ID。
主数据表2由ID、ElementPath和ElementID组成。
其中,ElementPath表示词汇实体在主数据实体层次结构中的路径,元素路径记录的格式为“x,y”,“x”表示第“x”层的子元素,“y”表示第“x”层的第“y”个子元素;ElementID是主数据表2的FK,记录元素表3中的ID,需要说明的是,主数据表1并不存储元素表3中所有的ID,而是仅存储元素为词汇实体时对应的ID;每存储一对ElementPath和ElementID,就生成一个表示ElementPath和ElementID对应关系的唯一ID,ID是主数据表2中的PK。同样,将主数据表2中的ID称为主数据ID。
元素表3由ID、元素名称(ElementName)、元素取值(ElementValue)组成。
在这里首先需要说明的是,本发明中涉及的元素仅指组成事件实体的事件域实体或组成主数据实体的词汇实体。因此,元素表3中存储的ElementName指事件域实体的名称或词汇实体的名称,ElementValue指事件域实体的取值或词汇实体的取值。元素表3中每存储一对ElementName和ElementValue,就生成一个表示ElementName和ElementValue对应关系的唯一ID,ID是元素表3中的PK。上文已提到将元素表3中的ID称为元素ID。
当元素为复杂元素时,则ElementValue取值为空,当元素为简单元素时,则直接记录元素的值。对于名称相同、取值也相同的元素,在元素表3中只记录一次;同时,在元素属性关系表5中只需存储该记录对应的元素表3中的ID即可,并且,如果该元素为事件域实体,则在事件表1中只需存储该记录对应的元素表3中的ID即可;如果该元素为词汇实体,则在主数据表2中只需存储该记录对应的元素表3中的ID即可,这样就解决了元素存储时的冗余问题。
属性表4由ID、属性名称(AttributeName)和属性取值(AttributeValue)组成。
属性表4中存储的AttributeName指事件域实体的属性的名称或词汇实体的属性的名称,AttributeValue指事件域实体的属性的取值或词汇实体的属性的取值,属性表4中每存储一对AttributeName和AttributeValue,就生成一个表示AttributeName和AttributeValue对应关系的唯一ID,ID是属性表4中的PK。同样,将属性表4中的ID称为属性ID。
对于名称相同、取值也相同的属性,在属性表4中只记录一次;并且,在元素属性关系表5中只需存储该记录对应的属性表4中的ID即可,这样就解决了属性存储时的冗余问题。
元素属性关系表5由ID、ElementID、属性ID(AttributeID)组成。
ElementID表示存储元素表3中的元素ID,AttributeID表示存储与ELmentID对应的属性表4中的属性ID,ElementID与AttributeID均为元素属性关系表5中的FK。元素属性关系表5中每存储一对ElementID和AttributeID,就生成一个表示ElementID和AttributeID对应关系的唯一ID,ID是元素属性关系表5中的PK。同样,将元素属性关系表5中的ID称为关系ID。
除了事件和主数据外,EPCIS系统中还存在其他类型的XML数据,如果业务需要还需存储这些其他类型的XML数据,则可以参照事件表和主数据表的方式来定义其他的XML数据表,用于存储其他类型的EPCIS数据实体。
根据具体项目开发的需求,本发明数据库中的这些表可以在EPCIS系统构建过程中创建,也可以在EPCIS系统运行过程中创建,但优选后者,因为后者可以给EPCIS系统运行过程中替换数据库提供更大的便利。
以下结合图2说明本发明根据存储EPCIS数据的算法(EPCISToDB)存储EPCIS数据的方法,该方法包括以下步骤:
步骤201,在EPCIS系统的数据库中设置元素表、属性表、元素属性关系表、事件表及主数据表。
步骤202~203,启动EPCIS系统,接收EPCIS数据。
其中,接收EPCIS数据是由消息监听模块实现的,具体为消息监听模块自动监听EPCIS消息并从EPCIS消息中获取EPCIS数据。
步骤204,对收到的EPCIS数据进行语法分析,如果存在语法错误,则结束对当前EPCIS数据的处理,并返回步骤203,继续接收下一个EPCIS数据;否则,执行步骤205。
其中,进行语法分析采用的标准语法分析器包括用于XML的简单应用程序接口(SAX,Simple API for XML)、微软XML核心服务(MSXML)、Java文档对象模型(JDOM)等。
步骤205,初始化数据库连接。
步骤206~208,判断EPCIS数据的类型,如果EPCIS数据为事件,则调用过程A根据存储事件的算法(EventToDB)将事件存储到数据库中;否则,如果EPCIS数据为主数据,则调用过程B根据存储主数据的算法(MasterDataToDB)将主数据存储到数据库中。
步骤209,存储完当前EPCIS数据之后,关闭数据库连接,并返回步骤203,继续接收下一个EPCIS数据。
如果不再接收EPCIS数据,则退出EPCIS系统。
其中,如图3所示,调用过程A根据存储事件的算法(EventToDB)存储事件的流程包括以下步骤:
步骤301,由语法分析获取组成事件的所有事件域实体,将各事件域实体的名称(ElementName)和取值(ElementName)成对地存储到元素表中,相应地,每存储一对ElementName和ElementValue,就在元素表中生成一个表示ElementName和ElementValue对应关系的元素ID。
由于本发明的事件采用XML格式进行定义,因此此处的事件域实体也称为Element。
步骤302,将各事件域实体的所有属性的名称(AttributeName)和取值(AttributeValue)成对地存储到属性表中,相应地,每存储一对AttributeName和AttributeValue,就在属性表中生成一个表示AttributeName和AttributeValue对应关系的属性ID。
步骤303,将各事件域实体和其属性的关系存储到元素属性关系表中。
具体是将元素表中与事件域实体对应的元素ID和属性表中与事件域实体的属性对应的属性ID成对地存储到元素属性关系表中,相应地,每存储一对ElementID和AttributeID,就在元素属性关系表中生成一个表示ElementID和AttributeID对应关系的关系ID。
例如,存在一个元素且该元素包含两个属性,假设将该元素的名称和取值表示为(a,1);将该元素的属性的名称和取值分别表示为(a1,2)、(a2,3);元素表中对应(a,1)的元素ID为IDa,属性表中对应(a1,2)、(a2,3)的属性ID分别为IDa1和IDa2;则在元素属性关系表中分别存储(IDa,IDa1)、(IDa、IDa2),并对应(IDa,IDa1)、(IDa、IDa2)分别生成ID1和ID2。
步骤304,将各事件域实体的路径(ElementPath)和元素表中与事件域实体对应的元素ID成对地存储到事件表中,相应地,每存储一对ElementPath和ElementID,就在事件表中生成一个表示ElementPath和ElementID对应关系的事件ID。
其中,为了解决事件域实体存储时的冗余问题,在将事件域实体的名称和取值成对地存储到元素表中之前,首先查找元素表中是否存在该对事件域实体的名称和取值的记录,如果存在,则不再存储该对事件域实体的名称和取值,然后只将该事件域实体的路径以及元素表中与该事件域实体对应的元素ID成对地存储到事件表中,并只将元素表中与该事件域实体对应的元素ID以及属性表中与该事件域实体的属性对应的属性ID成对地存储到元素属性关系表中。
同理,为了解决事件域实体的属性存储时的冗余问题,在将事件域实体的属性的名称和取值成对地存储到元素表中之前,首先查找属性表中是否存在该对事件域实体的属性的名称和取值的记录,如果存在,则不再存储该对事件域实体的属性的名称和取值,并只将属性表中与该事件域实体的属性对应的属性ID存储到元素属性关系表中。
本发明存储主数据的流程与存储事件的流程基本相同,如图4所示,根据存储主数据的算法(MasterDataToDB)存储主数据的过程包括以下步骤:
步骤401,由语法分析获取组成主数据的所有词汇实体,将各词汇实体的名称(ElementName)和取值(ElementValue)成对地存储到元素表中,相应地,每存储一对ElementName和ElementValue,就在元素表中生成表示一个ElementName和ElementValue对应关系的元素ID。
由于本发明的主数据采用XML格式进行定义,因此此处的词汇实体也称为Element。
步骤402,将各词汇实体的所有属性的名称(AttributeName)和取值(AttributeValue)成对地存储到属性表中,相应地,每存储一对AttributeName和AttributeValue,就在属性表中生成一个表示AttributeName和AttributeValue对应关系的属性ID。
步骤403,将各词汇实体和其属性的关系存储到元素属性关系表中。
具体是将元素表中与词汇实体对应的元素ID和属性表中与词汇实体的属性对应的属性ID成对地存储到元素属性关系表中,相应地,每存储一对ElementID和AttributeID,就在元素属性关系表中生成一个表示ElementID和AttributeID对应关系的关系ID。
步骤404,将各词汇实体的路径和元素表中与词汇实体对应的元素ID成对地存储到主数据表中,相应地,每存储一对ElementPath和ElementID,就在主数据表中生成一个表示ElementPath和ElementID对应关系的主数据ID。
其中,为了解决词汇实体存储时的冗余问题,在将词汇实体的名称和取值成对地存储到元素表中之前,首先查找元素表中是否存在该对词汇实体的名称和取值的记录,如果存在,则不再存储该对词汇实体的名称和取值,然后只将该词汇实体的路径以及元素表中与该词汇实体对应的元素ID成对地存储到主数据表中,并只将元素表中与该词汇实体对应的元素ID以及属性表中与该词汇实体的属性对应的属性ID成对地存储到元素属性关系表中。
同理,为了解决词汇实体的属性存储时的冗余问题,在将词汇实体的属性的名称和取值成对地存储到元素表中之前,首先查找属性表中是否存在该对词汇实体的属性的名称和取值的记录,如果存在,则不再存储该对词汇实体的属性的名称和取值,并只将属性表中与该词汇实体的属性对应的属性ID存储到元素属性关系表中。
为实现EPCIS数据的存储方法,本发明相应提供一种EPCIS数据的存储装置。如图5所示,该存储装置包括:数据表设置模块501、EPCIS数据接收模块502、EPCIS数据类型判断模块504、事件存储模块505及主数据存储模块506;其中,
数据表设置模块501,用于在EPCIS系统的数据库中设置元素表、属性表、元素属性关系表、事件表及主数据表;
EPCIS数据接收模块502,用于在EPCIS系统启动后,接收EPCIS数据;
EPCIS数据类型判断模块504,用于在初始化数据连接之后,判断EPCIS数据为事件还是主数据;
事件存储模块505,用于当EPCIS数据为事件时,将事件存储到数据库中;
主数据存储模块506,用于当EPCIS数据为主数据时,将主数据存储到数据库中;
其中,事件存储模块505包括:事件域实体获取模块515、事件域实体存储模块525、事件域实体的属性存储模块535、事件域实体及其属性关系存储模块545及事件域实体路径存储模块555;
事件域实体获取模块515,用于获取组成事件的所有事件域实体;
事件域实体存储模块525,用于将各事件域实体的名称和取值成对地存储到元素表中,且对应每对存储的事件域实体的名称和取值,在元素表中生成表示该事件域实体的名称和取值对应关系的元素标志;
事件域实体的属性存储模块535,用于将各事件域实体的所有属性的名称和取值成对地存储到属性表中,且对应每对存储的事件域实体的属性的名称和取值,在属性表中生成表示该事件域实体的属性的名称和取值对应关系的属性标志;
事件域实体及其属性关系存储模块545,用于将元素表中与事件域实体对应的元素标志以及属性表中与事件域实体的属性对应的属性标志成对地存储到元素属性关系表中;
事件域实体路径存储模块555,用于将各事件域实体的路径以及元素表中与事件域实体对应的元素标志成对地存储到事件表中;
其中,主数据存储模块506包括:词汇实体获取模块516、词汇实体存储模块526、词汇实体的属性存储模块536、词汇实体及其属性关系存储模块546及词汇实体路径存储模块556;
词汇实体获取模块516,用于获取组成主数据的所有词汇实体;
词汇实体存储模块526,用于将各词汇实体的名称和取值成对地存储到元素表中,且对应每对存储的词汇实体的名称和取值,在元素表中生成表示该词汇实体的名称和取值对应关系的元素标志;
词汇实体的属性存储模块536,用于将各词汇实体的所有属性的名称和取值成对地存储到属性表中,且对应每对存储的词汇实体的属性的名称和取值,在属性表中生成表示该词汇实体的属性的名称和取值对应关系的属性标志;
词汇实体及其属性关系存储模块546,用于将元素表中与词汇实体对应的元素标志以及属性表中与词汇实体的属性对应的属性标志成对地存储到元素属性关系表中;
词汇实体路径存储模块556,用于将各词汇实体的路径以及元素表中与词汇实体对应的元素标志成对地存储到主数据表中。
进一步地,为了解决事件域实体及其属性存储时的冗余问题,事件存储模块505还包括事件域实体查找模块及事件域实体的属性查找模块(图中未示出);其中,
事件域实体查找模块,用于将事件域实体的名称和取值成对地存储到元素表中之前,查找元素表中是否存在该对事件域实体的名称和取值的记录,如果存在,则不再存储该对事件域实体的名称和取值;否则,利用事件域实体存储模块将该事件域实体的名称和取值成对地存储到元素表中;
事件域实体的属性查找模块,用于将事件域实体的属性的名称和取值成对地存储到元素表中之前,查找元素表中是否存在该对事件域实体的属性的名称和取值的记录,如果存在,则不再存储该对事件域实体的名称和取值;否则,利用事件域实体的属性存储模块将该事件域实体的名称和取值成对地存储到元素表中。
进一步地,为了解决词汇实体及其属性存储时的冗余问题,主数据存储模块506还包括:词汇实体查找模块及词汇实体的属性查找模块(图中未示出),其中,
词汇实体查找模块,用于将词汇实体的名称和取值成对地存储到元素表中之前,查找元素表中是否存在该对词汇实体的名称和取值的记录,如果存在,则不再存储该对词汇实体的名称和取值;否则,利用词汇实体存储模块将该词汇实体的名称和取值成对地存储到元素表中;
词汇实体的属性查找模块,用于将词汇实体的属性的名称和取值成对地存储到属性表中之前,查找属性表中是否存在该对词汇实体的属性的名称和取值的记录,如果存在,则不再存储该对词汇实体的属性的名称和取值;否则,利用词汇实体的属性存储模块将该词汇实体的属性的名称和取值成对地存储到属性表中。
此外,EPCIS数据的存储装置还包括EPCIS数据处理模块503,用于对收到的EPCIS数据进行语法分析,如果存在语法错误,则结束对当前EPCIS数据的处理并继续接收EPCIS数据;否则,初始化数据库连接。
本发明在存储事件或主数据的具体过程中,存储流程的先后顺序可以根据需要改变,例如可以先存储元素的属性再存储元素。
当然,本发明还可以有多种实施例,数据库中的表名和具体字段名都可以改变,存储流程的先后顺序也可以根据需要改变,但是数据库中表的整体结构及表之间的关系不应改变。此外,只要存储的数据是XML数据本发明都可以处理,不限于Event和MasterData。EPCIS系统中若需要保存其他XML数据,则也可以建立结构与EventTable/MasterTable相类似的数据表来存储这些XML数据。在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明做出各种相应的改变和变形,但是只要用来保存XML数据的表的结构和关系与本发明相同,则这些相应的改变和变形都应属于本发明所附权利要求的保护范围中。