官方mondrianschema编写指南
- 格式:pdf
- 大小:1.08 MB
- 文档页数:41
mondrian源码分析1.概述 (1)1.1.若干概念 (1)1.2.架构 (2)2.静态类包分析 (3)2.1.包解释 (3)2.2.Schema manger部分 (4)2.3.包mondrian.calc (4)2.4.包mondrian.olap—接口 (5)2.4.1.mdx函数包 (5)2.4.2.funCall (5)2.4.3.Query类 (6)2.5.包mondrian.rolap—计算层 (6)2.5.1.成员读取包MemberReader (6)2.5.2.单元格读取CellReader (8)2.5.3.RolapResult类 (11)2.5.4.RolapEvaluator类 (12)2.5.5.关于排序 (12)2.6.聚集层Star layer (13)2.6.1.概述 (13)2.6.2.聚合装载过程 (13)2.6.3.segment详解 (14)2.6.4.缓存失效控制 (17)3.交互管理层 (18)3.1.初始化MondrianModel (18)3.2.获取结果集 (19)4.修改点 (22)4.1.mondrian角色参数化 (22)4.2.缓存失效控制 (22)4.3.connection创建参数优化 (23)4.4.维度成员排序 (23)4.5.对mondrian bug的修正 (24)4.6.to-do List (24)1.概述1.1. 若干概念成员(member):成员是代表维度中一次或多次数据出现的项。
度量值也可以算作一个维度,因此一个具体度量值项也可以作为一个成员。
元组(tuple):是向量,用于定义来自多维数据集的数据切片;它由来自一个或多个维度的单个成员的有序集合组成。
元组用于标识来自多维数据集的特定多维数据块;由来自多维数据集中各个维度的一个成员组成的元组完全描述单元值。
换言之,元组是一种成员向量。
例如:(时间.[下半年], 路线.非陆地.航空),由单个成员组成的元组也可括在圆括号内,但这不是必需的。
mongodb的schema管理MongoDB是一个schema-less(无模式)的数据库,也就是说不需要事先定义数据模式(或者数据库结构),可以自由地存储不同结构的文档。
这与传统的关系型数据库有着很大的区别,因为关系型数据库需要在创建表之前定义表的结构(即定义schema)。
尽管MongoDB本身是无模式的,但在实际的应用中,数据模式的管理仍然是非常重要的。
以下是一些MongoDB中对数据模式进行管理的方法:1. 强制定义数据模式:在应用中,可以定义一个数据模型(或者称为数据结构),并在应用程序中对数据进行强制性的验证,以确保数据的结构与预期一致。
这可以通过使用Mongoose、MongoDB的驱动程序或其他ORM(对象关系映射)工具来实现。
2. 使用验证器:MongoDB4.0及更高版本引入了验证器的概念,可以定义一个验证规则,以确保存储在集合中的数据满足特定的条件。
验证器可以在文档级别或字段级别上定义,并且可以包括数据类型、长度、范围等条件。
3. 使用索引:索引可以帮助提高查询性能,并且可以根据字段的特性来定义索引。
索引本身并不是数据模式的一部分,但可以通过选择正确的索引方式来影响数据访问模式。
4. 聚合管道:MongoDB提供了强大的聚合管道功能,可以在查询结果上执行多个操作,包括筛选、排序、分组、投影等。
聚合管道可以用于对数据进行处理和转换,从而实现类似关系型数据库的“视图”功能。
需要注意的是,由于MongoDB的无模式特性,对数据模式的管理在一定程度上是应用程序的工作。
MongoDB本身并不会像关系型数据库那样严格强制执行模式,因此在实际的应用中,需要在应用程序中对数据的结构进行验证和管理。
Mondrian入门介绍之schema manager1 olap基本概念联机分析处理(On Line Analytical Proccessing,简称OLAP) 概念最早由关系数据库之父E.F.Codd于1993年提出。
OLAP应用是目前数据仓库上的重要应用之一,是决策分析的关键。
作为数据仓库最重要的多维分析工具,OLAP利用存储在数据仓库中的数据完成各种分析操作,并以直观易懂的形式将分析结果返回给决策人员。
它的目标是满足决策支持或多维环境特定的查询和报表需求,技术核心是多维分析。
OLAP具有灵活的分析功能、直观的数据操作和分析结果可视化表示等突出优点,从而使用户对大量复杂数据的分析变得轻松而高效,以利于迅速做出正确的判断,辅助决策。
相比于传统的OLTP(联机事务处理),OLAP定义了多维模型的概念辅助分析操作:图 1如图1所示,这是由三个维度构成的一个OLAP立方体,立方体中包含了满足条件的cell(子立方)值,这些cell里面包含了要分析的数据,称之为度量值。
显而易见,一组三维坐标就唯一确定了一个子立方。
下面介绍一下多位模型的基本概念:立方体:由维度构建出来的多维空间,包含了所有要分析的基础数据,所有的聚合数据操作都在立方体上进行。
维度:就是观察数据的一种角度。
在这个例子中,路线,源,时间都是维度,这三个维度构成了一个立方体空间。
维度可以理解为立方体的一个轴。
要注意的是有一个特殊的维度,即度量值维度。
维度成员:构成维度的基本单位。
对于时间维,它的成员分别是:第一季度、第二季度、第三季度、第四季度。
层次:维度的层次结构,要注意的是存在两种层次:自然层次和用户自定义层次。
对于时间维而言,(年、月、日)是它的一个层次,(年、季度、月)是它的另一个层次,一个维可以有多个层次,层次可以理解为单位数据聚合的一种路径。
级别:级别组成层次。
对于时间维的一个层次(年、月、日)而言,年是一个级别,月是一个级别,日是一个级别,显然这些级别是有父子关系的。
OLAP 系统结构整个OLAP 系统为三层结构,最低层为存储层,一般分为两个部分1联机事务处理数据库.它是分析数据的来源;2 储存分析所用数据的数据仓库.该数据是从OLTP 数据库中提取和整理获得,通过这一层将OLAP 数据和OLTP 数据分离,这样就不会对原系统运行效率造成影响;第二层为应用层,它由OLAP 服务器与Web 服务器组成, OLAP 服务器是支持和管理多维数据结构的数据处理引擎,由它执行MDX 语句,从关系型数据库中读取数据,实现从关系型数据库到多维逻辑模型的映射,使数据以多维格式展示。
Web 服务器是专门用于向OLTP 服务器提交用户请求或向用户浏览器发送处理结果以供浏览。
顶层为前端浏览工具.采用Web 浏览页就可以实现对多维数据集的访问.并以表格或者图形的方式展现查询结果。
架构如图所示:存储层应用层表现层前台设计:1、表现层本层采用jpivot 作为表示层,Jpivot 是JSP 定制标志库,它呈现一个联机分析处理表格并让用户能够执行典型的联机分析处理导航操作,如上卷、下钻和旋转等。
它使用Mondrian 和XML/A 作为OLAP 引擎,使用WCF (Web Component Framework) 来支持使用XML 和XSLT 来创建UI 。
2、应用层本层中Web 服务器采用Tomcat,由Mondrian 作为 OLAP 引擎,Mondrian 是一个OpenSource 的基于关系数据库的分析服务器,遵循MDX 语言、XML/A 和JOLAP 标准。
它自定义了一种使用MDX 语言的客户端接口,可以通过执行MDX 语句,从关系型数据库中读取数据,实现从关系型数据库到多维逻辑模型的映射,使数据以多维格式展示。
存储层提供数据,由于mondrian被设计运行在关系数据库上,因此这里采用关系数据库实现,指向数据源的连接字符串格式如下:Provider=mondrian;Jdbc=jdbc:oracle:thin:placea/placea@192.168.90.18:1521:mps;JdbcDrive rs=oracle.jdbc.driver.OracleDriver; Catalog=/WEB-INF/queries/institute_type.xml 其中,Provider=mondrian定义了OLAP引擎,采用不同的存储数据库jdbc与jdbcDriver 的值也随之变化,这里采用了oracle数据库,Catalog指明了schema元模型的位置,mondrian 根据它到数据仓库中提取数据。
1 1: 222 Examples2 / 2 2: get_field ()3333 Examples33333 get_field () .34 3: 66 Examples6 / 6 - 6 4: 777 Examples777 5: ()9999Examples9 .910You can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: advanced-custom-fieldsIt is an unofficial and free advanced-custom-fields ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official advanced-custom-fields.The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners.Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to ********************1:advanced-custom-fields , .. .(SV) : 4.4.11 (10-23-2016)SV ., , , , , WYSIWYG , , , , , , / , , , , , , Google, , , , .(PRO) : 5.4.8 (10-17-2016)PRO SV ., , ,PRO SV . - SV PRO 100 % .Examples/WordPress . "Advanced Custom Fields" / . " " WordPress .ACF " " . WordPress . / active . " " WordPress . ACF (ACF " " ) WordPress > . ACF .: https:///ko/advanced-custom-fields/topic/7512/----2: get_field ()•get_field($field_name, $post_id, $format_value);get_field () the_field ()the_field () . get_field () . get_field () . Examples<?php echo get_field('my_field_name'); ?>"my_field_name" .<?php echo get_field('my_field_name', 123); ?>ID 123 "my_field_name" .<?php echo get_field('my_field_name', 'option'); ?>ACF "my_field_name" .<?php if( get_field('my_field_name') ){ ?><?php echo get_field('my_field_name'); ?><?php }; ?>(, ) .get_field () .(acf_form ()) get_field () . (XSS) .echo get_field_escaped('my_custom_field', $post_id, true); echo get_field('my_custom_field', $post_id, true);esc_html , .echo get_field_escaped('url', $post_id, true, 'esc_url');functions.php functions.php :/*** Helper function to get escaped field from ACF* and also normalize values.** @param $field_key* @param bool $post_id* @param bool $format_value* @param string $escape_method esc_html / esc_attr or NULL for none* @return array|bool|string*/function get_field_escaped($field_key, $post_id = false, $format_value = true, $escape_method= 'esc_html'){$field = get_field($field_key, $post_id, $format_value);/* Check for null and falsy values and always return space */if($field === NULL || $field === FALSE)$field = '';/* Handle arrays */if(is_array($field)){$field_escaped = array();foreach($field as $key => $value){$field_escaped[$key] = ($escape_method === NULL) ? $value :$escape_method($value);}return $field_escaped;}elsereturn ($escape_method === NULL) ? $field : $escape_method($field);}: https://snippets.khromov.se/sanitizing-and-securing-advanced-custom-fields-output/WordPress Codex : https:///Data_Validation#Output_SanitizationACF ( ) . <?php echo get_field('color_options'); ?><?php echo get_field('color_options'); > .<?php $option = get_field('color_options'); ?><?php if( $option == 'red' ){ ?><?php } else if( $option == 'blue' ){ ?><?php } else if( $option == 'green' ){ ?><?php } else if( $option == 'yellow' ){ ?><?php } ?>get_field () : https:///ko/advanced-custom-fields/topic/7515/get-field---( / / ) ( / / ) . [PHP date ()] [1] . , . [1] : /manual/en/function.date.phpExamples/( tour_date ).<p>Tour Date <?php the_field('tour_date');?></p>-( announcement ) .- . start_date end_date .<?php$DateNow = date('Y-m-d H:i:s');$DateStart = get_field('start_date', false, false); $DateEnd = get_field('end_date', false, false);if($DateNow > $DateStart && $DateNow < $DateEnd) {echo the_field('announcement');}>: https:///ko/advanced-custom-fields/topic/8354/--•acf_add_options_page ($ args);•acf_add_options_sub_page ($ );Examplesif( function_exists('acf_add_options_page') ) {acf_add_options_page();}functions.php 'Options' Wordpress . .if( function_exists('acf_add_options_page') ) {acf_add_options_page(array('page_title' => 'Theme General Settings','menu_title' => 'Theme Settings','menu_slug' => 'theme-general-settings','capability' => 'edit_posts','redirect' => false));acf_add_options_sub_page(array('page_title' => 'Theme Header Settings','menu_title' => 'Header','parent_slug' => 'theme-general-settings',));}functions.php Wordpress ' ' . 'Header' ...$args [or $page] = array(/* (string) The title displayed on the options page. Required. */'page_title' => 'Options',/* (string) The title displayed in the wp-admin sidebar. Defaults to page_title */'menu_title' => '',/* (string) The slug name to refer to this menu by (should be unique for this menu).Defaults to a url friendly version of menu_slug */'menu_slug' => '',/* (string) The capability required for this menu to be displayed to the user. Defaults to edit_posts.Read more about capability here: /Roles_and_Capabilities */'capability' => 'edit_posts',/* (int|string) The position in the menu order this menu should appear.WARNING: if two menu items use the same position attribute, one of the items may be overwritten so that only one item displays!Risk of conflict can be reduced by using decimal instead of integer values, e.g. '63.3' instead of 63 (must use quotes).Defaults to bottom of utility menu items */'position' => false,/* (string) The slug of another WP admin page. if set, this will become a child page. */'parent_slug' => '',/* (string) The icon class for this menu. Defaults to default WordPress gear.Read more about dashicons here: https:///resource/dashicons/ */'icon_url' => false,/* (boolean) If set to true, this options page will redirect to the first child page (if a child page exists).If set to false, this parent page will appear alongside any child pages. Defaults to true */'redirect' => true,/* (int|string) The '$post_id' to save/load data to/from. Can be set to a numeric post ID (123), or a string ('user_2').Defaults to 'options'. Added in v5.2.7 */'post_id' => 'options',/* (boolean) Whether to load the option (values saved from this options page) when WordPress starts up.Defaults to false. Added in v5.2.8. */'autoload' => false,);: https:///ko/advanced-custom-fields/topic/7531/---5: ()•the_field ($ field_name, $ post_id);get_field () . the_field () echo get_field($field_name);echo get_field($field_name); Examples.<?php if( get_field('text_field') ): ?><?php the_field('text_field'); ?><?php endif; ?>get_field () the_field () .() : https:///ko/advanced-custom-fields/topic/7525/--。
Mondrian操作介绍和调优配置操作前提介绍1、生成维度和指标MDX查询语句在页面里面制定对应的查询前需要配置对应的查询数据源,使用的是jpivot 标签。
有关jpivot的使用可以查看开源的项目jpivot。
如下面指定对应的oracle数据库连接数据源。
让mondrian可以连接到对应的数据库进行查询操作。
查询操作使用的sql是MDX。
类似于sql的语法,有关MDX的使用可以了解MDX语句。
<jp:mondrianQuery id="query01"jdbcDriver="oracle.jdbc.driver.OracleDriver"jdbcUrl="jdbc:oracle:thin:@10.45.49.21:1521:osstest"jdbcUser="bi71"jdbcPassword="smart"catalogUri="/WEB-INF/queries/Analysis.xml">select {[Measures].[Charge], [Measures].[CallTimes], [Measures].[Num of Subscriber], [Measures].[Duration], [Measures].[ARPU],[Measures].[MOU]} ON COLUMNS,{([AcctType].[AllAcctType],[Package].[AllPackage],[ProductState].[AllProdState],[PayLevel].[AllPayLevel],[ON-NetWorkDuration].[AllDuration],[SendDate].[AllSendDate])} ON ROWSfrom [SubsVoiceAnalysis]</jp:mondrianQuery>上面的MDX指定了六个维度:[Measures].[Charge], [Measures].[CallTimes], [Measures].[Num of Subscriber], [Measures].[Duration], [Measures].[ARPU], [Measures].[MOU]和六个指标:[AcctType].[AllAcctType],[Package].[AllPackage],[ProductState].[AllProdState],[PayLevel].[AllPayLevel],[ON-NetWorkDuration].[AllDuration],[SendDate].[AllSendDate]查询效果界面展示为:下面将从界面介绍mondrian的操作。
Developer Manual Developer Manual目录1.Database Connection (1)1.1特征 (1)1.2选择执行成员 (2)1.3Global Session (4)1.4约束事项 (6)1.5设置 (8)2.ODBC (9)2.1SUNDB ODBC Driver概述 (9)2.2数据源构成 (13)2.3GLOBAL CONNECTION (36)2.4目录函数 (48)2.5非标准数据类型 (54)2.6ODBC API References (69)2.7XA API References (580)3.JDBC (607)3.1概要 (607)3.1功能详情 (614)3.2JDBC API References (669)4.Embedded SQL (942)4.1Precompiler (942)4.2Embedded SQL (958)4.3Advanced Topic (1149)4.4Embedded SQL Reference (1214)Developer Manual 5.PDO (1252)5.1PDO概要 (1252)5.2安装/构成 (1252)5.3使用 (1256)5.4示例 (1256)6.PyDBC (1275)6.1SUNDB PyDBC (1275)6.2API Reference (1280)6.3Exception (1302)6.4Data Type (1304)7.Ruby (1309)7.1概要 (1309)7.2安装 (1309)7.3示例 (1311)7.4ActiveRecord的使用示例 (1316)8.Hibernate (1322)8.1概要 (1322)8.2联动 (1322)8.3示例 (1325)1.Database Connection1.1特征Figure30-1GLOBAL CONNECTIONGlobal connection功能是考虑到数据locality的事务性能优化方案通常connection连接一个成员而global connection连接所有成员使用global connection的应用程序执行查询访问的数据最多的成员的查询从而提高性能Global connection可用于hashrangelist sharding等所有方式此时不需要变更应用程序执行online scale-out时用户不需要追加考虑新的节点应用程序可自动访问新节点运行此节点Figure30-2GLOBAL CONNECTION HA(high availability)执行SQL时所选节点发生故障时通过其他组的其他节点执行SQL所选的组的所有节点发生故障时通过其他组执行SQL恢复发生故障的节点时在online状态下自动重新访问该节点不仅如此用户也可以使用以下语句使应用程序重新执行访问ALTER SYSTEM RECONNECT GLOBAL CONNECTION1.2选择执行成员执行成员按照事务为单位进行选择没有事务时首次执行DML查询时按照sharding key选择组组内的执行成员取决于LOCALITY_MEMBER_POLICY参数之后在COMMIT或ROLLBACK之前执行的所有查询在所选成员中执行如果首次查询未选择根据sharding key的合适的组时根据LOCALITY_GROUP_POLICY参数决定组Figure30-3选择成员上图中transaction1的UPDATE查询根据sharding key在group1执行因此后续COMMIT之间的所有查询均在group1执行Transaction2的UPDATE查询在group3执行即使后续查询不适合在group 3执行但在COMMIT之前所有查询均在group3执行在没有事务的情况下只读专用查询(SELECT)与其他查询相同根据sharding key选择执行成员但后续执行的查询未必在上一次选择的成员中执行即包含在事务的所有查询仅在一个成员中执行与事务无关的查询按照查询为单位选择成员1.3Global SessionFigure30-4从global connection衍生的cluster session与应用程序直接连接的会话叫做driver session从driver session到其他成员的会话叫做cluster sessionGlobal connection在所有成员中创建driver session根据所需向其他成员创建cluster session由于global connection的特征可在一个成员中创建多个cluster sessionFigure30-5Global sessionGlobal session是在global connection创建的cluster session共享一个会话并由此提高资源效率的功能Global connection不使用global session时根据组和成员的增加而增加cluster session相反使用global session时即使增加组和成员也不会增加cluster sessionGlobal session功能仅可在global connection使用普通connection无法使用1.4约束事项使用global connection时SQL语句无法使用拥有session dependenccy的对象(session dependent object)或语句(session dependent clause)或函数(session dependent function)另外访问多个集群节点的SQL存在于一个事务中时事务中的SQL共同使用第一个SQL的sharding key选择的集群节点Global connection中查询仅在以prepare execute执行时考虑数据locality以direct execute执行时在任意节点执行Session Dependent Object在SQL语句使用session dependent object时不支持global connection●Global temporary tableSession Dependent Clause在SQL语句使用session dependent clause时不支持global connection●所有@domain相关语句Session Dependent Function和Pseudo Column 在SQL语句使用session dependent信息时不支持global connection●CURRVAL(sequence),sequence.CURRVAL●UUID()●VERSION()●SESSION_ID()●SESSION_SERIAL()●USER_ID()●LAST_IDENTITY_VALUE()●STATEMENT_VIEW_SCN()●STATEMENT_VIEW_SCN_GCN()●STATEMENT_VIEW_SCN_DCN()●STATEMENT_VIEW_SCN_LCN()●LOCAL_GROUP_ID()●LOCAL_MEMBER_ID()●LOCAL_GROUP_NAME()●LOCAL_MEMBER_NAME()●CLUSTER_GROUP_ID●CLUSTER_GROUP_NAME●CLUSTER_MEMBER_ID●CLUSTER_MEMBER_NAME●CLUSTER_SHARD_ID使用Global Session功能的情况SQL语句不支持Data Definition Language(DDL) 1.5设置详细内容参考如下●ODBC Global Connection●JDBC Global Connection2.ODBC2.1SUNDB ODBC Driver概述SUNDB ODBC Driver的概念ODBC(开放数据库互连Open Database Connectivity)是数据库API(Application Programming Interface)的配置Microsoft ODBC3.0版本基于International Standards Organization/ International Electromechanical Commission(ISO/IEC)和X/open的分级调用接口(CLI)的推荐配置ODBC使用C libarary函数支持SQL语句应用程序通过调用该函数实现ODBC功能架构由执行以下功能的个要素组成组成要素功能应用程序调用与ODBC数据源通信的ODBC函数传递SQL语句后处理结果集驱动管理器管理应用程序以及应用程序中使用的所有ODBC驱动程序之间的通信驱动处理应用程序中的所有ODBC调用连接数据源并从应用程序将SQL语句传递至数据源后向应用程序返回结果必要时驱动将应用程序传递的ODBC SQL转换为数据源使用的基本SQL数据源包含驱动访问数据库数据时所需的所有信息使用ODBC应用程序可以执行以下操作●连接数据源●向数据源传输SQL语句●在数据源处理SQL语句的结果●错误及信息处理●断开与数据源的连接ODBC构成要素概要包含驱动管理器的SUNDB ODBC Driver以下为系统包含驱动管理器的软件架构此时应用程序需要链接到驱动管理器库Figure31-1包含驱动管理器的SUNDB ODBC driver不包含驱动管理器的SUNDB ODBC Driver下图为系统不包含驱动管理器并使用SUNDB ODBC driver的架构此时应用程序需要直接链接到SUNDB ODBC driver库Figure31-2不包含驱动管理器的SUNDB ODBC driverSUNDB ODBC Driver的使用头文件(header file)执行SUNDB ODBC driver需要有$SUNDB_HOME/include中设置的sundb.h文件此文件定义SUNDB ODBC driver的常数和类型提供SUNDB ODBC driver函数的原型库(Libraray)不使用驱动管理器的应用程序需要链接SUNDB ODBC driver库的静态或共享文件UNIX文件名说明libsundb.a包含DA与CS的库的静态版本libsundba.a DA专用库的静态版本libsundbas.so DA专用库的共享版本文件名说明libsundbc.a CS专用库的静态版本libsundbcs-ul32.so将SQLLEN识别为4字节的64Bit CS专用库的共享版本libsundbcs-ul64.so将SQLLEN识别为8字节的64Bit CS专用库的共享版本libsundbcs.so32Bit CS专用库的共享版本libsundbs.so包含DA与CS的库的共享版本Table31-1SUNDB UNIX ODBC driver库文件WindowsSUNDB Windows ODBC driver库只提供CS库文件文件名说明sundbcs-ul64.dll将SQLLEN识别为8字节的64Bit CS专用库的共享版本sundbcs.dll32Bit CS专用库的共享版本sundbsetup32.dll设置32Bit ODBC driver manager的库sundbsetup64.dll设置64Bit ODBC driver manager的库Table31-2SUNDB Windows ODBC driver库文件SUNDB数据库SQL手册2.2数据源构成UNIX中的DSN设置odbcinst.ini文件odbcinst.ini是已安装的ODBC驱动程序的配置文件●unixODBC%odbcinst-junixODBC2.3.4DRIVERS............:/etc/odbcinst.iniSYSTEM DATA SOURCES:/etc/odbc.iniFILE DATA SOURCES..:/etc/ODBCDataSourcesUSER DATA SOURCES..:/home/sundb/.odbc.iniSQLULEN Size.......:8SQLLEN Size........:8SQLSETPOSIROW Size.:8●iODBC%iodbc-config--odbcinstini/etc/odbcinst.iniODBC Driver配置odbcinst.ini文件的ODBC驱动程序配置部分描述驱动程序属性值和目录每个安装的驱动程序的驱动程序名称下有注册信息部分[driver_name]Description=driver_descriptionDriver=driver_library_pathSetup=setup_library_pathFileUsage=file_usage下表描述了驱动程序配置部分中的关键字关键字说明Description说明驱动程序的字符串Driver驱动library路径Setup安装library路径FileUsage显示基于文件的驱动在DSN中直接处理文件的方法的文字以下为查看SUNDB ODBC驱动配置相关信息的示例[SUNDB ODBC Driver]Description=SUNDB ODBC DriverDriver=/home/sundb/home/lib/libsundbcs-ul64.soSetup=/home/sundb/home/lib/libsundbcs-ul64.soFileUsage=0odbc.ini文件odbc.ini文件是应用程序连接的DSN的配置文件分为用户DSN与系统DSN通常用户DSN文件为~/.odbc.ini文件系统DSN文件为/etc/odbc.ini文件●unixODBC%odbcinst-junixODBC2.3.4DRIVERS............:/etc/odbcinst.iniSYSTEM DATA SOURCES:/etc/odbc.iniFILE DATA SOURCES..:/etc/ODBCDataSourcesUSER DATA SOURCES..:/home/sundb/.odbc.iniSQLULEN Size.......:8SQLLEN Size........:8SQLSETPOSIROW Size.:8●iODBC%iodbc-config--odbcini/etc/odbc.ini数据源配置odbc.ini文件的数据源配置部分中说明DSN[data_source_name]Driver=driver_namePROTOCOL={DA|TCP|IPC}CS_MODE={default|dedicated|shared}HOST=host_addressPORT=port_noPREFER_IPV6={0|1}CHARSET={SQL_ASCII|UTF8|UHC|GB18030}TCP_NODELAY={0|1}ALTERNATE_SERVERS=(HOST=ADDRESS1:PORT=PORT1,HOST=ADDRESS2:PORT=PORT2) CONNECTION_RETRY_COUNT=retry_countCONNECTION_RETRY_DELAY=retry_delayFAILOVER_TYPE={CONNECTION|SESSION}FAILOVER_GRANULARITY={0|1|2}FAILOVER_ROUTING_POLICY={0|1}DATE_FORMAT=date_format_stringTIME_FORMAT=time_format_stringTIME_WITH_TIME_ZONE_FORMAT=timetz_format_stringTIMESTAMP_FORMAT=timestamp_format_stringTIMESTAMP_WITH_TIME_ZONE_FORMAT=timestamptz_format_stringCHAR_LENGTH_UNITS={BYTE|OCTETS|CHAR|CHARACTERS}ENABLE_SQLDESCRIBEPARAM={0|1}ENABLE_SQLBINDPARAMETER_CONSISTENCY_CHECK={0|1}USE_TARGETTYPE={0|1|2}LOCATOR_DSN=locator_dsn_nameLOCATOR_SERVICE=locator_service_nameLOCALITY_AWARE_TRANSACTION={0|1}LOCALITY_GROUP_POLICY={0|1|2}LOCALITY_GROUP_PATH=group_name1,group_name2,group_name3LOCALITY_MEMBER_POLICY={0|1|2|3|4}LOCALITY_MEMBER_PATH=member_name1,member_name2,member_name3DB_HOME=database_home_pathPACKET_COMPRESSION_THRESHOLD=packet_compression_thresholdUSE_GLOBAL_SESSION={0|1}LOGIN_TIMEOUT=login_timeoutTRACE={0|1}TRACEFILE=file_path_nameTRACE_POLICY={DEFAULT|ERROR}INCLUDE_SYNONYMS={0|1}DOT_NET_FOR_ODBC={0|1}[locator_dsn_name]FILE=location_file_nameHOST=IP address(v4)PORT=locator_portCONNECTION_TIMEOUT=secondALTERNATE_LOCATORS=(HOST=ADDRESS1:PORT=PORT1,HOST=ADDRESS2:PORT=PORT2)下表为数据源配置部分的关键字属性说明data_source_name数据源section中指定的数据源Driver odbcinst.ini中安装的驱动名PROTOCOL与服务器连接的方式●DA:无额外的通讯直接连接●TCP:使用TCP socket进行通讯●IPC:使用共享内存进行通讯并且需要与server在相同设备上第一次连接时为了传输IPC信息会使用TCP连接所以需要设置HOST和PORT仅可使用Dedicated模式进行连接CS_MODE 设置以dedicated模式访问还是以shared模式连接如果不使用此设置模式取决于listener的configuration(DEFAULT_CS_MODE)HOST HOST IP地址或名称PORT连接端口号PREFER_IPV6HOST参数为HOST名时IP地址中优先IPv6 TCP_NODELAY socket TCP_NODELAY选项UID用户ID属性说明PWD用户密码CHARSET客户端字符集ALTERNATE_SERVERS 发生failover时尝试连接的服务器目录每个服务器以逗号","区分不使用failover功能时不设置ALTERNATE_SERVERSCONNECTION_RETRY_COUNT连接失败时尝试连接服务器的次数CONNECTION_RETRY_DELAY连接失败时尝试连接的服务器的时间间隔(单位:秒)FAILOVER_TYPE ●CONNECTION:连接失败时连接至ALTERNATE_SERVERS●SESSION:连接失败或处理statement过程中连接断开时连接至ALTERNATE_SERVERS后恢复statement如果断开连接时没有进行中的事务则failover后执行进行中的statementFAILOVER_GRANULARITY●0:进行failover的过程中发生错误也继续进行failover属性说明●1:进行failover的过程中发生除SQLExeceute()SQLExecDirect()外的错误时failover将失败●2:进行failover的过程中发生错误时failover将失败DATE_FORMAT DATE类型字符串TIME_FORMAT TIME类型字符串TIME_WITH_TIME_ZONE_FORMAT TIME WITH TIME ZONE类型字符串TIMESTAMP_FORMAT TIMESTAMP类型字符串TIMESTAMP_WITH_TIME_ZONE_FORMAT TIMESTAMP WITH TIME ZONE类型字符串CHAR_LENGTH_UNITS SQLBindParameter()中ParameterType为SQL_CHARSQL_VARCHAR时的ColumnSize的单位●BYTE,OCTETS:以byte为单位●CHAR,CHARACTERS:以字符为单位ENABLE_SQLDESCRIBEPARAM决定是否执行SQLDescribeParam()●0:不支持SQLDescribeParam()●1:对所有parameter返回属性说明SQL_VARCHARENABLE_SQLBINDPARAMETER_CONSISTENCY_CHECK决定是否检查SQLBindParameter()的ColumnSize和DecimalDigits●0:不检查ColumnSize和DecimalDigits ●1:检查ColumnSize和DecimalDigitsUSE_TARGETTYPE设置以通信接收column类型时同时接收的类型信息●0:仅接收column类型●1:接收column类型与column名称●2:接收column类型与column的所有信息LOCATOR_DSN指定Location信息的Data Source Name(DSN)LOCATOR_SERVICE从Service hintglocator获取访问信息LOCALITY_AWARE_TRANSACTION是否使用GLOBAL CONNECTION●0:不使用GLOBAL CONNECTION ●1:使用GLOBAL CONNECTION属性说明LOCALITY_GROUP_POLICY使用GLOBAL CONNECTION时没有可选择的群组或可以选择两个以上的群组时设置群组选择方法●0:任意选择●1:按照顺序选择LOCALITY_GROUP_PATH设置中的群组无法使用LOCALITY_GROUP_PATH的所有群组时选择任意群组●2:按照顺序选择每次按照驱动中连接的群组顺序选择LOCALITY_GROUP_PATH 使用GLOBAL CONNECTION时可选择的群组不是1个时指定选择的群组的目录各群组以逗号()区分例:G1G2G3LOCALITY_MEMBER_POLICY决定使用GLOBAL CONNECTION时所选的群组中的成员的选择方法●0:DML:MASTER/SELECT:MASTER ●1:DML:ANY/SELECT:ANY●2:DML:MASTER/SELECT:ANY●3:DML:MASTER/SELECT:SLAVE属性说明●4:按照LOCALITY_MEMBER_PATH设置中的成员的顺序进行选择无法使用LOCALITY_MEMBER_PATH中的所有成员时选择所选群组的MASTERLOCALITY_MEMBER_PATH 指定在使用GLOBAL CONNECTION时所选的群组中要使用的成员的目录各成员以逗号()区分例:G1N1,G2N1,G3N1,G1N2,G2N2,G3N2DB_HOME设置数据库的home目录默认值使用$SUNDB_HOME的环境变量PACKET_COMPRESSION_THRESHOLD 发送至服务器的通信数据的大小大于PACKET_COMPRESSION_THRESHOLD时压缩通信数据设定值的范围为32~2113929216USE_GLOBAL_SESSION是否使用GLOBAL SESSION●0:不使用GLOBAL SESSION ●1:使用GLOBAL SESSIONLOGIN_TIMEOUT等待完成login请求的时间(秒)TRACE是否在ODBC API使用trace属性说明●0:不使用trace●1:使用traceTRACEFILE Trace文件名输入在相对路径时执行程序的当前目录成为标准默认值为'odbc_trace.log'TRACE_POLICY Trace策略默认值为DEFAULT●DEFAULT:同时记录函数参数和结果●ERROR:函数失败时记录日志INCLUDE_SYNONYMS决定是否在SQLGetColumns()中包含synonym 个体.●0:不包含synonym个体●1:包含synonym个体DOT_NET_FOR_ODBC决定是否将ODBC用于.NET Framework用途●0:不改变用途●1:SQLGetDescField()和SQLColAttribute()中将SQL_DESC_BASE_COLUMN_NAME,属性说明SQL_DESC_NAME属性替换为SQL_DESC_LABEL Table31-3数据源配置部分的关键字关键字说明FILE Location file nameHOST glocator ip addressPORT glocator port number CONNECTION_TIMEOUT Connection timeout with glocator(second) ALTERNATE_LOCATORS未收到glocator的响应时使用ALTERNATE_LOCATORS获取访问信息Table31-4LocationNote:*LOCATOR_DSN中已设置FILE与HOSTPORT属性时优先适用FILE属性FILE相关详细内容参考Location File*通过LOCATOR_SERVICE属性可访问LOCATOR_SERVICE所属的服务器所访问的服务器以外的服务器为ALTERNATE_SERVERS+未设置FAILOVER_TYPE则FAILOVER_TYPE为session+未设置FAILOVER_GRANULARITY则FAILOVER_GRANULARITY为1+详细内容参考glocator与gloctlSUNDB的DSN配置如下[SUNDB]Driver=SUNDB ODBC DriverPROTOCOL=TCPCS_MODE=SHAREDHOST=192.168.0.10PORT=22581CHARSET=UTF8TCP_NODELAY=1ALTERNATE_SERVERS=(HOST=192.168.0.11:PORT=22581,HOST=192.168.0.12:PORT=22581) CONNECTION_RETRY_COUNT=3CONNECTION_RETRY_DELAY=1FAILOVER_TYPE=SESSIONFAILOVER_GRANULARITY=0FAILOVER_ROUTING_POLICY=0DATE_FORMAT=YYYY-MM-DDTIME_FORMAT=HH24:MI:SS.FF6TIME_WITH_TIME_ZONE_FORMAT=HH24:MI:SS.FF6TZH:TZMTIMESTAMP_FORMAT=YYYY-MM-DD HH24:MI:SS.FF6TIMESTAMP_WITH_TIME_ZONE_FORMAT=YYYY-MM-DD HH24:MI:SS.FF6TZH:TZM CHAR_LENGTH_UNITS=CHARACTERSENABLE_SQLDESCRIBEPARAM=1ENABLE_SQLBINDPARAMETER_CONSISTENCY_CHECK=1USE_TARGETTYPE=0INCLUDE_SYNONYMS=0PACKET_COMPRESSION_THRESHOLD=2113929216LOCALITY_AWARE_TRANSACTION=0LOCALITY_GROUP_POLICY=0LOCALITY_GROUP_PATH=G1,G2,G3LOCALITY_MEMBER_POLICY=0LOCALITY_MEMBER_PATH=G1N1,G2N1,G3N1,G1N2,G2N2,G3N2 USE_GLOBAL_SESSION=0LOGIN_TIMEOUT=0LOCATOR_DSN=LOCATORLOCATOR_SERVICE=S1TRACE=1TRACEFILE=/home/test/log/mytrace.logDOT_NET_FOR_ODBC=0[LOCATOR]FILE=/home/test/.location.iniHOST=127.0.0.1PORT=42581ALTERNATE_LOCATORS=(HOST=127.0.0.1:PORT=42582,HOST=127.0.0.1:PORT=42583) Windows中的DSN设置Windows中可通过ODBC数据源管理器添加或设置DSNFigure31-3Creating new data sourceFigure31-4ODBC driver configuration各项详细说明如下关键字说明DSN数据源名称HOST HOST IP地址或名称PORT连接端口号UID用户IDCS_MODE 设置以dedicated模式连接或以shared模式连接未设置时default模式取决于listener的configuration(DEFAULT_CS_MODE)ALTERNATE_SERVERS发生failover时尝试连接的服务器列表以逗号()区分不使用failover功能时ALTERNATE_SERVERS设置为空白CONNECTION_RETRY_COUNT连接失败时尝试重连服务器的次数CONNECTION_RETRY_DELAY连接失败时尝试重连的服务器时间间隔(单位:秒)FAILOVER_TYPE ●CONNECTION:连接失败时连接至ALTERNATE_SERVERS●SESSION:连接失败或语句执行中连接中断时连接至ALTERNATE_SERVERS后恢复语句断开连接时如没有进行中的事务failover后执行进行中的statement关键字说明FAILOVER_GRANULARITY ●Non-atomic:failover过程中即使报错也继续执行failover●Atomic:failover过程中报错则failover失败DATE_FORMAT DATE类型字符串TIME_FORMAT TIME类型字符串TIME_WITH_TIME_ZONE_FORMAT TIME WITH TIME ZONE类型字符串TIMESTAMP_FORMAT TIMESTAMP类型字符串TIMESTAMP_WITH_TIME_ZONE_FORMAT TIMESTAMP WITH TIME ZONE类型字符串CHAR_LENGTH_UNITS SQLBindParameter()中ParameterType为SQL_CHAR时的ColumnSize单位●BYTE,OCTETS:以byte为单位●CHAR,CHARACTERS:以字符为单位LOCALITY_AWARE_TRANSACTION GLOBAL CONNECTION使用与否●0:不使用GLOBAL CONNECTION ●1:使用GLOBAL CONNECTIONUSE_GLOBAL_SESSION GLOBAL SESSION使用与否关键字说明●0:不使用GLOBAL SESSION●1:使用GLOBAL SESSIONLOCALITY_GROUP_POLICY设置可使用GLOBAL CONNECTION时没有可选择的group或有两个以上可选择的group时选择哪个group●0:任意选择●1:依次选择LOCALITY_GROUP_PATH设置中的group无法使用所有LOCALITY_GROUP_PATH中的group时选择任意group●2:依次选择按照每次连接驱动的group顺序选择LOCALITY_GROUP_PATH 使用GLOBAL CONNECTION时可选择的group不是一个时指定选择的group的目录各个group以逗号()区分例:G1G2G3LOCALITY_MEMBER_POLICY使用GLOBAL CONNECTION时决定选择被选择地group中的成员的方法●0:DML:MASTER/SELECT:MASTER●1:DML:ANY/SELECT:ANY●2:DML:MASTER/SELECT:ANY●3:DML:MASTER/SELECT:SLAVE关键字说明●4:依次选择LOCALITY_MEMBER_PATH设置中的成员无法使用所有LOCALITY_MEMBER_PATH中的成员时选择被选择的group的MASTERLOCALITY_MEMBER_PATH 使用GLOBAL CONNECTION时在所选的group中指定要使用的成员的目录各个成员以逗号()区分例:G1N1,G2N1,G3N1,G1N2,G2N2,G3N2LOCATOR_HOST glocator ip address LOCATOR_PORT glocator port number LOCATOR_CONNECTION_TIMEOUT Connection timeout with glocator(second) ALTERNATE_LOCATORS无法从glocator获得响应时使用ALTERNATE_LOCATORS获取访问信息TRACE是否在ODBC API使用trace●0:不使用trace●1:使用traceTRACEFILE Trace文件名输入到相对路径时执行程序的当前目录成为标准默认值为'odbc_trace.log'TRACE_POLICY Trace策略默认值为DEFAULT关键字说明●DEFAULT:同时记录函数参数和结果●ERROR:函数失败时记录日志DOT_NET_FOR_ODBC决定是否将ODBC用于.NET Framework用途●0:不改变用途●1:SQLGetDescField()和SQLColAttribute()中将SQL_DESC_BASE_COLUMN_NAME,SQL_DESC_NAME属性替换为SQL_DESC_LABELTable31-5DSN配置关键字2.3GLOBAL CONNECTION集群环境支持应用程序可以选择符合处理查询的节点后执行的GLOBAL CONNECTION功能设置仅在PROTOCOL为TCP时才可使用GLOBAL CONNECTION此时需要在设置LOCALITY_AWARE_TRANSACTION属性值的同时设置LOCATOR文件或LOCATOR服务器使用global session时需要将USE_GLOBAL_SESSION属性值设置为1使用DSN时的.odbc.ini[SUNDB]PROTOCOL=TCPHOST=192.168.0.1PORT=22581UID=TESTPWD=testLOCALITY_AWARE_TRANSACTION=1LOCATOR_DSN=LOCATOR[LOCATOR]FILE=/home/sundb/.location.ini使用连接字符串时SQLDriverConnect(dbc,NULL,(SQLCHAR*)"PROTOCOL=TCP;HOST=192.168.0.1;PORT=22581;UID=TEST;PWD=test;LOCA LITY_AWARE_TRANSACTION=1;LOCATOR_HOST=192.168.0.2;LOCATOR_PORT=42581",SQL_NTS,NULL,0,NULL,SQL_DRIVER_NOPROMPT);GLOBAL CONNECTION的处理过程Figure31-5Basic steps of applying GLOBAL CONNECTION 1.SQLAllocHandle(DBC)分配connection handle连接用户输入服务器信息的服务器并获取集群系统的信息后通过LOCATOR文件或LOCATOR 服务器建立集群系统信息并连接集群系统的所有节点3.SQLAllocHandle(STMT)向连接的所有节点分配各个statement4.SQLPrepare在连接的所有节点准备执行SQL5.SQLExecute如未建立集群系统信息应用程序可通过LOCATOR文件或LOCATOR服务器建立集群系统信息并连接集群系统的所有节点在集群添加节点后访问新的节点时在该节点同样生成其他节点的所有statement并准备执行SQL如已建立sharding key信息应用程序使用sharding key信息选择合适的节点后执行查询如未建立sharding key信息应用程序从任意服务器建立该SQL的sharding key信息后选择合适的节点并执行查询所选节点发生故障时除该节点外再重新选择合适的节点后执行查询SQLExecute后sharding信息发生变更则删除已建立的sharding key信息SQLExecute后添加/删除集群节点等集群系统信息发生变更则删除已建立的集群系统信息6.SQLFetch从执行SQL的节点获取数据7.SQLCloseCursor在执行SQL的节点关闭游标8.SQLFreeHandle(STMT)在所有已连接的节点上解除statement解除与所有节点的连接10.SQLFreeHandle(DBC)解除connection handleGLOBAL CONNECTION异常处理使用GLOBAL CONNECTION时运行中所选节点发生故障时根据事务发生及SELECT进行与否如下进行操作●没有事务的情况没有事务的情况下所选节点发生故障时在ODBC内部选择其他节点并执行对应查询虽然所选节点发生了故障但由其他节点正常执行因此不向用户报错●有事务或SELECT进行时发生事务或SQLFetch()进行时所选节点发生故障时ODBC无法再进行当前操作因此返回19068(Retry the transactional operations)错误发生19068错误时用户需要重新执行对应事务或SELECTif(!SQL_SUCCEEDED(SQLPrepare(sStmt,(SQLCHAR*)"INSERT INTO T1VALUES(?)",SQL_NTS))){goto stmt_error;}trans_retry:if(!SQL_SUCCEEDED(SQLExecute(sStmt))) {SQLGetDiagRec(SQL_HANDLE_STMT,sStmt,1,sSQLState,&sNativeError,sMessageText,sizeof(sMessageText),&sTextLength);if(sNativeError==19068){goto trans_retry;}goto stmt_error;}if(!SQL_SUCCEEDED(SQLPrepare(sStmt,(SQLCHAR*)"SELECT*FROM T1WHERE C1=?",SQL_NTS))){goto stmt_error;}trans_begin:sReturn=SQLExecute(sStmt);if(sRetrun==SQL_ERROR){SQLGetDiagRec(SQL_HANDLE_STMT,sStmt,1,sSQLState,&sNativeError,sMessageText,sizeof(sMessageText),&sTextLength);if(sNativeError==19068){goto trans_retry;}goto stmt_error;}while(1){sReturn=SQLFetch(sStmt);if(sReturn==SQL_NO_DATA){SQLCloseCursor(sStmt);break;}else if(sReturn==SQL_ERROR){SQLGetDiagRec(SQL_HANDLE_STMT,sStmt,1,sSQLState,&sNativeError,sMessageText,sizeof(sMessageText),&sTextLength);if(sNativeError==19068){goto trans_retry;}goto stmt_error;}...}COMMIT或ROLLBACK事务时COMMIT事务时所选节点发生故障时ODBC通过其他节点查看事务是否在所选节点发生故障之前COMMIT如果所选节点发生了故障但事务正常COMMIT时不返回错误而且在事务未COMMIT的情况下所选节点发生故障时返回19068(Retry the transactional operations)错误发生19068错误时用户要重新执行该事务ROLLBACK事务时如果所选节点发生故障ODBC不报错因为由于节点故障该事务已经被ROLLBACKif(!SQL_SUCCEEDED(SQLSetConnectAttr(sDbc,SQL_AUTOCOMMIT,(SQLPOINTER)SQL_AUTOCOMMIT_OFF,0))){goto dbc_error;}if(!SQL_SUCCEEDED(SQLPrepare(sStmt,(SQLCHAR*)"INSERT INTO T1VALUES(?)",SQL_NTS))){goto stmt_error;}trans_retry:if(!SQL_SUCCEEDED(SQLExecute(sStmt))){SQLGetDiagRec(SQL_HANDLE_STMT,sStmt,1,sSQLState,&sNativeError,sMessageText,sizeof(sMessageText),&sTextLength);if(sNativeError==19068){goto trans_retry;}goto stmt_error;}if(!SQL_SUCCEEDED(SQLEndTran(SQL_HANDLE_DBC,sDbc,SQL_COMMIT))){SQLGetDiagRec(SQL_HANDLE_DBC,sDbc,1,sSQLState,&sNativeError,sMessageText,sizeof(sMessageText),&sTextLength);if(sNativeError==19068){goto trans_retry;}goto stmt_error;}GLOBAL CONNECTION约束事项●为了选择符合查询的节点需要使用SQLPrepare()和SQLExecute()使用GLOBAL CONNECTION查找符合查询的节点时需要使用SQLPrepare()和SQLExecute()SQLExecDirect()中没有查找符合查询的节点的信息因此选择节点取决于LOCALITY_GROUP_POLICY和LOCALITY_MEMBER_POLICY属性●COMMIT或ROLLBACK事务时要使用SQLEndTran()使用GLOBAL CONNECTION时通过SQL语句执行COMMIT或ROLLBACK则无法检测到事务状态变化COMMIT或ROLLBACK事务时必须使用SQLEndTran()●Global session不支持SQL语句中的Data Definition Language(DDL)。
Schema 教程XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML 文档的结构。
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
在此教程中,你将学习如何在应用程序中读取和创建 XML Schema 语言,XML Schema 为何比 DTD 更加强大,以及如何在您的应用程序中使用 XML Schema。
开始学习 XML Schema!XML Schema 参考手册在 W3School,我们提供完整的有效的 XML Schema 元素。
XML Schema 参考手册XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
您应当具备的基础知识在继续学习之前,您需要对下面的知识有基本的了解:∙HTML / XHTML∙XML 以及 XML 命名空间∙对 DTD 的基本了解如果您希望首先学习这些项目,请在首页访问这些教程。
什么是 XML Schema?XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
XML Schema:∙定义可出现在文档中的元素∙定义可出现在文档中的属性∙定义哪个元素是子元素∙定义子元素的次序∙定义子元素的数目∙定义元素是否为空,或者是否可包含文本∙定义元素和属性的数据类型∙定义元素和属性的默认值以及固定值XML Schema 是 DTD 的继任者我们认为 XML Schema 很快会在大部分网络应用程序中取代 DTD。
理由如下:∙XML Schema 可针对未来的需求进行扩展∙XML Schema 更完善,功能更强大∙XML Schema 基于 XML 编写∙XML Schema 支持数据类型∙XML Schema 支持命名空间XML Schema 是 W3C 标准XML Schema 在 2001 年 5 月 2 日成为 W3C 标准。
标准schema格式标准Schema格式。
在数据管理和数据交换领域,Schema是一种描述数据结构的方式,它定义了数据的组织结构、数据类型、约束条件等信息。
在实际应用中,标准的Schema格式对于数据的准确解析和处理至关重要。
本文将介绍标准Schema格式的基本要素和常见规范,帮助您更好地理解和应用Schema。
1. 数据类型定义。
在Schema中,数据类型定义是最基本的要素之一。
常见的数据类型包括整型、浮点型、字符串型、布尔型等。
在定义Schema时,需要明确定义每个字段的数据类型,并且保证数据类型的一致性和准确性。
例如:```。
{。
"name": "string",。
"age": "int",。
"is_student": "boolean"}。
```。
2. 字段约束条件。
除了数据类型外,字段的约束条件也是Schema中的重要内容。
约束条件可以包括字段是否允许为空、字段的取值范围、字段的唯一性等。
在定义Schema时,需要清晰地定义每个字段的约束条件,以保证数据的完整性和准确性。
例如:{。
"name": {。
"type": "string",。
"required": true。
},。
"age": {。
"type": "int",。
"min": 0,。
"max": 150。
},。
"id": {。
"type": "string",。
"unique": true。
}。
}。
```。
3. 嵌套结构定义。
在实际数据中,往往会存在复杂的嵌套结构。
如何设计KeenSu 苏玉Mondrain Schema修订日期是否发布修订人2009-6-6 否Keensu目录1 什么是Schema (1)2 Schema文件 (1)3 逻辑模型 (3)3.1 立方体Cube (4)3.2 度量值 Measures (4)3.3 Dimension 维度、Hierarchy层次、Level 级别 (5)3.3.1 把维度和层次映射到表上 (6)3.3.2 所有成员(All Members) (7)3.3.3 时间维度Time dimensions (7)3.3.4 级别的展现和顺序 (8)3.3.5 多层次 (8)3.3.6 退化维 (9)3.3.7 内置表 (10)3.3.8 成员属性(member properties)、格式化member formatter (11)KeenSu 苏玉3.3.9 近似的级别基数 (11)3.3.10 默认度量属性 (11)4 星形和雪花模型 (12)4.1 共享维度 (12)4.2 连接join的优化 (13)5 高级逻辑模型 (13)5.1 虚拟立方体 Virtual cubes (13)5.2 父子层次 (15)5.2.1 旋转父子层次 (15)5.2.2 Closure tables (16)5.2.3 填充 closure tables (17)5.3 成员属性 (18)5.4 计算成员 (19)5.5 命名集 (20)6 插件 (21)6.1 User-DefinedFunction (22)6.2 Memberreader (25)6.3 Cell Reader (26)6.4 Cell formatter (26)6.5 Member formatter (26)6.6 Property formatter (26)6.7 Schema processor (27)6.8 Data source change listener (27)6.9 Dynamic datasource Xmla servlet (29)7 国际化 Internationalization (29)7.1 Localizing schema processor (29)8 Aggregate table聚合表 (31)9 访问控制 (32)9.1 定义角色 (32)9.2 上卷策略 Rollup (33)9.3 Union roles (35)9.4 设置连接角色 (35)10 附录A:XML元素 (36)KeenSu 苏玉11什么是S c h e m a一个Schema 定义了一个多维的数据库,它包含逻辑模型,由立方体、层次、成员组成,通过把这些模型映射到物理模型上。
逻辑模型的结构组成有:立方体、维度、层次、级别和成员。
物理模型是数据源,它是通过逻辑模型来展现,典型的物理模型就是星形模型,它实际上就是关系数据库中一系列表,我们会在其他映射的例子中看到。
22S c h e m a文件Mondrian Schema是XML来表达,在Mondrian的发布的Deom中的demo/Foodmart.xml的例子中,该Shcema包含了我们这里讨论所有的结构。
当前,只能通过文本编辑器进行Schema文件的编写。
XML语法不是很复杂,因此听起来也不是很难,特别是你可以使用Foodmart Schema 作为向导例子。
XML文档的结果如下:<Schema><Cube>KeenSu 苏玉 <Table><AggName>aggElements<AggPattern>aggElements<Dimension><Hierarchy>relation<Closure/><Level><KeyExpression><SQL/><NameExpression><SQL/><CaptionExpression><SQL/><OrdinalExpression><SQL/><ParentExpression><SQL/><Property><PropertyExpression><SQL/><DimensionUsage><Measure><MeasureExpression><SQL/><CalculatedMemberProperty/><CalculatedMember><Formula/><CalculatedMemberProperty/><NamedSet><Formula/><VirtualCube><CubeUsages><CubeUsage><VirtualCubeDimension><VirtualCubeMeasure><Role><SchemaGrant><CubeGrant><HierarchyGrant><MemberGrant/><Union>KeenSu 苏玉<RoleUsage/><UserDefinedFunction/><Parameter/>relation ::=<Table><SQL/><View><SQL/><InlineTable><ColumnDefs><ColumnDef><Rows><Row><Value><Join>relationaggElement ::=<AggExclude><AggFactCount><AggIgnoreColumn><AggForeignKey><AggMeasure><AggLevel>注意:XML元素的顺序很重要,例如<UserDefinedFunction>元素必须出现在<Schema>的里面,在所有集合<Cube>,<VirtualCube>,<NamedSet>和<Role>的元素后面,如果出现第一个<Cube>元素之前,那么Schema其余的元素都会被忽略。
每个XML的元素的内容在附录A和XML Schema有详细的描述。
33逻辑模型Schema最重要的组成元素是立方体(cubes)、度量值(measures)和维度(dimensions):一个立方体(cube)是一个面向主题区域的维度和度量的集合。
一个维度(measure)就是我们实际需求中感兴趣的测量数据,例如产品的销售单价 unit sales 或是库存中产品成本价格等。
一个维度(dimension)是一个属性或是一系列属性,通过这些属性你可以把度量划分为更小的子类,例如你可能想通过颜色去分解产品的销售类别、客户的性别、或是通过商店去细分销售的产品等,颜色、性别、商店就是维度。
看下面XML定义的简单Schema的例子:<Schema><Cube name="Sales"><Table name="sales_fact_1997"/><Dimension name="Gender" foreignKey="customer_id"><Hierarchy hasAll="true" allMemberName="All Genders" primaryKey="customer_id"> KeenSu 苏玉<Table name="customer"/><Level name="Gender" column="gender" uniqueMembers="true"/></Hierarchy></Dimension><Dimension name="Time" foreignKey="time_id"><Hierarchy hasAll="false" primaryKey="time_id"><Table name="time_by_day"/><Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/><Level name="Quarter" column="quarter" uniqueMembers="false"/><Level name="Month" column="month_of_year" type="Numeric" uniqueMembers="false"/></Hierarchy></Dimension><Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="#,###"/><Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.##"/><Measure name="Store Cost" column="store_cost" aggregator="sum" formatString="#,###.00"/><CalculatedMember name="Profit" dimension="Measures" formula="[Measures].[Store Sales] -[Measures].[Store Cost]"><CalculatedMemberProperty name="FORMAT_STRING" value="$#,##0.00"/></CalculatedMember></Cube></Schema>这个Schema只包含了一个叫Sales立方体(cube),这个立方体有两个维度:time和Gender,和两个度量值:Unit Sales 、Store Sales。