CN111695002B - 一种基于xml语句的数据库无关的查询方法 - Google Patents

一种基于xml语句的数据库无关的查询方法 Download PDF

Info

Publication number
CN111695002B
CN111695002B CN202010508232.3A CN202010508232A CN111695002B CN 111695002 B CN111695002 B CN 111695002B CN 202010508232 A CN202010508232 A CN 202010508232A CN 111695002 B CN111695002 B CN 111695002B
Authority
CN
China
Prior art keywords
fetchxml
node
grammar
query
xml
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.)
Active
Application number
CN202010508232.3A
Other languages
English (en)
Other versions
CN111695002A (zh
Inventor
宋军超
刘标勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Ruiyun Information Technology Co ltd
Original Assignee
Suzhou Ruiyun Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Ruiyun Information Technology Co ltd filed Critical Suzhou Ruiyun Information Technology Co ltd
Priority to CN202010508232.3A priority Critical patent/CN111695002B/zh
Publication of CN111695002A publication Critical patent/CN111695002A/zh
Application granted granted Critical
Publication of CN111695002B publication Critical patent/CN111695002B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/9032Query formulation

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于XML语句的数据库无关的查询方法,所述XML语句为基础的数据库查询的中间层语言包括FetchXML语法定义器,FetchXML解析器、FetchXML语法分析器、FetchXML安全过滤器、FetchXML到标准SQL的转换器、方言翻译器,该种基于XML语句的数据库可大幅度降低开发成本,可精简开发人员的语言学习量,同时本开发系统天生可以适配多种不同的关系型数据库,客户方可以选择使用SQL Server、Oracle、MySQL、Postgresql等多种数据库中一种,来完成开发任务,且该开发系统,可以屏蔽掉SQL语言开发中的安全风险,可以完全杜绝SQL注入的风险,且基于业内标准的XML和SQL开发的一种新的查询语言,可以降低人员的学习成本,相比EntityFramework等开发模式可以大幅降低人员的学习难度。

Description

一种基于XML语句的数据库无关的查询方法
技术领域
本发明属于NET数据库开发相关技术领域,具体涉及一种基于XML语句的数据库无关的查询方法。
背景技术
现有的关系型数据库的统一查询语言为国际标准的SQL语言,此语言最初为IBM发明,存在SQL92和SQL99等标准,同时针对标准的SQL语言又有很多不同的厂商实现了自己产品,如微软的SQL Server数据库的TSQL,Oracle数据库的PL/SQL,MySQL数据库、PostgreSQL等。
现有的原生SQL方式进行开发存在以下问题:
1、如果要开发适配不同的数据库产品时,往往需要针对各个数据库(SQL Server,Oracle,MySQL)的特点撰写不同的SQL,导致同样的业务逻辑存在大量的相似代码问题。
2、如果针对某一个单一的数据库系统进行开发(比如MySQL),若客户方要选择其他不同的数据,则需要花费大量开发成本进行迁移适配。
3、.NET平台也存在一些其他的方案解决多个数据库的适配问题,比如EntityFramework等,但是这种方案需要的.NET版本较高,并且需要对现有的代码进行大量的改造。
4.直接使用原生的SQL语句还存在SQL注入的安全风险问题。
发明内容
本发明的目的在于提供一种基于XML语句的数据库无关的查询方法,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:
一种基于XML语句的数据库无关的查询方法,所述XML语句为基础的数据库查询的中间层语言包括FetchXML语法定义器,FetchXML解析器、FetchXML语法分析器、FetchXML安全过滤器、FetchXML到标准SQL的转换器、方言翻译器(包括SQL Server、Oracle、MySQL、Postgresql数据库的方言翻译器)。
优选的,所述FetchXML语法定义器的操作流程如下:
步骤一:定义查询语言的关键语法部分,包括语言的关键字、表达式的定义和函数定义;
步骤二:关键字类用于定义查询语言包含如select和join等关键字,而where和on节点则用于定义原的查询条件语句部分;
步骤三:表达式节点用于定义通用表达式,如相等判断表达式,范围判断表达式;
步骤四:函数节点用于定义通用的函数,如大小写转换、聚合函数;
优选的,所述FetchXML解析器的操作流程如下:
步骤一:将用户输入的查询语言解析成语言的各个组件节点;
步骤二:先读取整个的XML查询字符串到内存中;
步骤三:将原始的字符串解析成标准的XML Node;
步骤四:根据语法定义器的类定义,分析各个Node类型,并且指定类型;
步骤五:将整个语言解析成一个语法分析树;
优选的,所述FetchXML语法分析器的操作流程如下:
步骤一:读取解析器生成的XML节点树;
步骤二:从顶级节点开始逐层的向下遍历;
步骤三:分析每个用户输入的每个节点是否是语法定义器定义的节点,如果不是,则反馈给用户;
步骤四:如果所有的节点语法撰写正确,则将标准的XML Node转换成一个FetchXML 特有的语法树;
优选的,所述FetchXML安全过滤器的操作流程如下:
步骤一:读取系统内置的安全规则列表,如delete关键字、truncate关键字等危险操作字符串;
步骤二:检查用户输入的内容中是否包含这些关键字;
优选的,所述FetchXML到标准SQL的转换器操作流程如下:
步骤一:判断用户数据的字符串中是否包含SQL注入关键字;
步骤二:判断用户输入的字符串是否满足SQLMap的标准安全规范;
优选的,所述方言翻译器的操作流程如下:
步骤一:根据各个数据库方言的特点,将FetchXML转换后的SQL语句,翻译成各个数据库特定的方言SQL语句;
步骤二:系统内置定义所有支持的数据库的方言的差异清单;
步骤三:根据标准方言差异清单,将标注的FetchXML定义的查询语句翻译成对应的方言的SQL语句;
与现有技术相比,本发明提供了一种基于XML语句的数据库无关的查询方法,具备以下有益效果:
本发明相较于原生SQL开发模式,具有无需针对每种不同的数据库撰写特殊的SQL,该种基于XML语句的数据库可大幅度降低开发成本,可精简开发人员的语言学习量,同时本开发系统天生可以适配多种不同的关系型数据库,客户方可以选择使用SQL Server、Oracle、MySQL、Postgresql等多种数据库中一种,来完成开发任务,且该开发系统,可以屏蔽掉SQL语言开发中的安全风险,可以完全杜绝SQL注入的风险,且基于业内标准的XML和SQL开发的一种新的查询语言,可以降低人员的学习成本,相比EntityFramework等开发模式可以大幅降低人员的学习难度。
实施方式
基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供一种基于XML语句的数据库无关的查询方法技术方案:
一种基于XML语句的数据库无关的查询方法,包括XML语句为基础的数据库查询的中间层语言包括FetchXML语法定义器,FetchXML解析器、FetchXML语法分析器、FetchXML安全过滤器、FetchXML到标准SQL的转换器、方言翻译器(包括SQL Server、Oracle、MySQL、Postgresql数据库的方言翻译器)。
一种基于XML语句的数据库无关的查询方法,包括FetchXML语法定义器的操作流程如下:
步骤一:定义查询语言的关键语法部分,包括语言的关键字、表达式的定义和函数定义;
步骤二:关键字类用于定义查询语言包含如select和join等关键字,而where和on节点则用于定义原的查询条件语句部分;
步骤三:表达式节点用于定义通用表达式,如相等判断表达式,范围判断表达式;
步骤四:函数节点用于定义通用的函数,如大小写转换、聚合函数;
一种基于XML语句的数据库无关的查询方法,包括FetchXML解析器的操作流程如下:
步骤一:将用户输入的查询语言解析成语言的各个组件节点;
步骤二:先读取整个的XML查询字符串到内存中;
步骤三:将原始的字符串解析成标准的XML Node;
步骤四:根据语法定义器的类定义,分析各个Node类型,并且指定类型;
步骤五:将整个语言解析成一个语法分析树;
一种基于XML语句的数据库无关的查询方法,包括FetchXML语法分析器的操作流程如下:
步骤一:读取解析器生成的XML节点树;
步骤二:从顶级节点开始逐层的向下遍历;
步骤三:分析每个用户输入的每个节点是否是语法定义器定义的节点,如果不是,则反馈给用户;
步骤四:如果所有的节点语法撰写正确,则将标准的XML Node转换成一个FetchXML 特有的语法树;
一种基于XML语句的数据库无关的查询方法,包括FetchXML安全过滤器的操作流程如下:
步骤一:读取系统内置的安全规则列表,如delete关键字、truncate关键字等危险操作字符串;
步骤二:检查用户输入的内容中是否包含这些关键字;
一种基于XML语句的数据库无关的查询方法,包括FetchXML到标准SQL的转换器操作流程如下:
步骤一:判断用户数据的字符串中是否包含SQL注入关键字;
步骤二:判断用户输入的字符串是否满足SQLMap的标准安全规范;
一种基于XML语句的数据库无关的查询方法,包括方言翻译器的操作流程如下:
步骤一:根据各个数据库方言的特点,将FetchXML转换后的SQL语句,翻译成各个数据库特定的方言SQL语句;
步骤二:系统内置定义所有支持的数据库的方言的差异清单;
步骤三:根据标准方言差异清单,将标注的FetchXML定义的查询语句翻译成对应的方言的SQL语句;
本发明的工作原理:定义查询语言的关键语法部分,包括语言的关键字、表达式的定义和函数定义(关键字类用于定义查询语言包含如select和join等关键字,而where和on节点则用于定义原的查询条件语句部分;表达式节点用于定义通用表达式,如相等判断表达式,范围判断表达式;函数节点用于定义通用的函数,如大小写转换、聚合函数),其后将用户输入的查询语言解析成语言的各个组件节点,先读取整个的XML查询字符串到内存中,其后将原始的字符串解析成标准的XML Node,在根据语法定义器的类定义,分析各个Node类型,并且指定类型,将整个语言解析成一个语法分析树,其后读取解析器生成的XML节点树,从顶级节点开始逐层的向下遍历,分析每个用户输入的每个节点是否是语法定义器定义的节点,如果不是,则反馈给用户,如果所有的节点语法撰写正确,则将标准的XML Node转换成一个FetchXML特有的语法树,其后读取系统内置的安全规则列表,如delete关键字、truncate关键字等危险操作字符串,检查用户输入的内容中是否包含这些关键字,判断用户数据的字符串中是否包含SQL注入关键字,判断用户输入的字符串是否满足SQLMap的标准安全规范,再者根据各个数据库方言的特点,将FetchXML转换后的SQL语句,翻译成各个数据库特定的方言SQL语句。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

Claims (1)

1.一种基于XML语句的数据库无关的查询方法,其特征在于:所述XML语句为基础的数据库查询的中间层语言,利用FetchXML语法定义器,FetchXML解析器、FetchXML语法分析器、FetchXML安全过滤器、FetchXML到标准SQL的转换器以及方言翻译器进行查询,方言翻译器包括SQL Server、Oracle、MySQL、Postgresql数据库的方言翻译器;所述FetchXML语法定义器的操作流程如下:
步骤一:定义查询语言的关键语法部分,包括语言的关键字、表达式的定义和函数定义;
步骤二:关键字类用于定义查询语言包含select和join关键字,而where和on节点则用于定义原的查询条件语句部分;
步骤三:表达式节点用于定义通用表达式,相等判断表达式,范围判断表达式;
步骤四:函数节点用于定义通用的函数,大小写转换、聚合函数;
所述FetchXML解析器的操作流程如下:
步骤一:将用户输入的查询语言解析成语言的各个组件节点;
步骤二:先读取整个的XML查询字符串到内存中;
步骤三:将原始的字符串解析成标准的XML Node;
步骤四:根据语法定义器的类定义,分析各个Node类型,并且指定类型;
步骤五:将整个语言解析成一个语法分析树;
所述FetchXML语法分析器的操作流程如下:
步骤一:读取解析器生成的XML节点树;
步骤二:从顶级节点开始逐层的向下遍历;
步骤三:分析每个用户输入的每个节点是否是语法定义器定义的节点,如果不是,则反馈给用户;
步骤四:如果所有的节点语法撰写正确,则将标准的XML Node转换成一个FetchXML 特有的语法树;
所述FetchXML安全过滤器的操作流程如下:
步骤一:读取系统内置的安全规则列表,delete关键字、truncate关键字危险操作字符串;
步骤二:检查用户输入的内容中是否包含这些关键字;
所述FetchXML到标准SQL的转换器操作流程如下:
步骤一:判断用户数据的字符串中是否包含SQL注入关键字;
步骤二:判断用户输入的字符串是否满足SQLMap的标准安全规范;
所述方言翻译器的操作流程如下:
步骤一:根据各个数据库方言的特点,将FetchXML转换后的SQL语句,翻译成各个数据库的方言SQL语句;
步骤二:系统内置定义所有支持的数据库的方言的差异清单;
步骤三:根据标准方言差异清单,将标注的FetchXML定义的查询语句翻译成对应的方言的SQL语句。
CN202010508232.3A 2020-06-05 2020-06-05 一种基于xml语句的数据库无关的查询方法 Active CN111695002B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010508232.3A CN111695002B (zh) 2020-06-05 2020-06-05 一种基于xml语句的数据库无关的查询方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010508232.3A CN111695002B (zh) 2020-06-05 2020-06-05 一种基于xml语句的数据库无关的查询方法

Publications (2)

Publication Number Publication Date
CN111695002A CN111695002A (zh) 2020-09-22
CN111695002B true CN111695002B (zh) 2024-01-02

Family

ID=72479610

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010508232.3A Active CN111695002B (zh) 2020-06-05 2020-06-05 一种基于xml语句的数据库无关的查询方法

Country Status (1)

Country Link
CN (1) CN111695002B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112100200A (zh) * 2020-09-27 2020-12-18 四川长虹电器股份有限公司 一种基于维度模型自动化生成sql语句的方法
CN113296754B (zh) * 2021-07-28 2021-11-12 北京蔚领时代科技有限公司 基于xml的脚本语言转换方法、编辑器、设备及存储介质
CN113535758B (zh) * 2021-09-09 2021-12-24 浩鲸云计算科技股份有限公司 一种把传统数据库脚本批量转换上云的大数据系统和方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101561817A (zh) * 2009-06-02 2009-10-21 天津大学 一种XQuery到SQL查询语言的转换算法及关系数据的查询方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7103611B2 (en) * 2003-05-01 2006-09-05 Oracle International Corporation Techniques for retaining hierarchical information in mapping between XML documents and relational data

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101561817A (zh) * 2009-06-02 2009-10-21 天津大学 一种XQuery到SQL查询语言的转换算法及关系数据的查询方法

Also Published As

Publication number Publication date
CN111695002A (zh) 2020-09-22

Similar Documents

Publication Publication Date Title
CN111695002B (zh) 一种基于xml语句的数据库无关的查询方法
CN104657439B (zh) 用于自然语言精准检索的结构化查询语句生成系统及方法
CN105868204B (zh) 一种转换Oracle脚本语言SQL的方法及装置
US7454413B2 (en) Query expressions and interactions with metadata
US6523172B1 (en) Parser translator system and method
US20070143321A1 (en) Converting recursive hierarchical data to relational data
CN111309757B (zh) 一种HBase的SQL解释器和优化方法
CN109840256B (zh) 一种基于业务实体的查询实现方法
US8762131B1 (en) Systems and methods for managing a complex lexicon comprising multiword expressions and multiword inflection templates
US10614126B2 (en) Textual query editor for graph databases that performs semantic analysis using extracted information
CN108766507B (zh) 一种基于CQL与标准信息模型openEHR的临床质量指标计算方法
CN117093599A (zh) 面向异构数据源的统一sql查询方法
CN113609838A (zh) 文档信息抽取及图谱化方法和系统
CN114528846A (zh) 一种用于人工智能的概念网络及其生成方法
WO2022174356A1 (en) Methods and systems for controlled modeling and optimization of a natural language database interface
CN110717014B (zh) 一种本体知识库动态构建方法
CN112506488A (zh) 一种基于sql创建语句生成编程语言类的方法
CN114003231B (zh) 一种sql语法解析树优化方法及系统
CN112099764B (zh) 基于形式化转换规则的航电领域需求的规范化方法
CN115345153A (zh) 一种基于概念网络的自然语言生成方法
US10929106B1 (en) Semantic analyzer with grammatical-number enforcement within a namespace
Kedwan NLQ into SQL translation using computational linguistics
Alam et al. Towards a semantic web stack applicable for both RDF and topic maps: a survey
Rajan et al. Welding Natural Language Queries to Analytics IRs with LLMs.
Chaochaisit et al. CSV-X: A Linked Data Enabled Schema Language, Model, and Processing Engine for Non-Uniform CSV

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant