CN111695002B - 一种基于xml语句的数据库无关的查询方法 - Google Patents
一种基于xml语句的数据库无关的查询方法 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 17
- 230000014509 gene expression Effects 0.000 claims description 20
- 230000006870 function Effects 0.000 claims description 13
- 238000002347 injection Methods 0.000 claims description 5
- 239000007924 injection Substances 0.000 claims description 5
- 230000002776 aggregation Effects 0.000 claims description 4
- 238000004220 aggregation Methods 0.000 claims description 4
- 238000006243 chemical reaction Methods 0.000 claims description 4
- 230000008571 general function Effects 0.000 claims description 4
- 230000018109 developmental process Effects 0.000 description 8
- 239000000243 solution Substances 0.000 description 3
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008140 language development Effects 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9032—Query 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
技术领域
本发明属于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语句。
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)
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101561817A (zh) * | 2009-06-02 | 2009-10-21 | 天津大学 | 一种XQuery到SQL查询语言的转换算法及关系数据的查询方法 |
Family Cites Families (1)
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 |
-
2020
- 2020-06-05 CN CN202010508232.3A patent/CN111695002B/zh active Active
Patent Citations (1)
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 |