Schema
Schema,是用于描述和规范XML文档的逻辑结构的一种语言,它最大的作用就是验证XML文件逻辑结构的正确性。可以理解成与DTD(文档类型定义)功能差不多,但是Schema在当前的WEB开发环境下优越很多。因为它本身就是一个有效的XML文档,因而可以更直观地了解XML的结构。除此之外,Schema支持命名空间,内置多种简单和复杂的数据类型,并支持自定义数据类型。由于存在这么多的优点,所以Schema渐渐成为XML应用的统一规范。
XML Schema XSD 元素[ ]
- all 规定子元素能够以任意顺序出现,每个子元素可出现零次或一次。
- annotation annotation 元素是一个顶层元素,规定 schema 的注释。
- any 使创作者可以通过未被 schema 规定的元素来扩展 XML 文档。
- anyAttribute 使创作者可以通过未被 schema 规定的属性来扩展 XML 文档。
- appInfo 规定 annotation 元素中应用程序要使用的信息。
- attribute 定义一个属性。
- attributeGroup 定义在复杂类型定义中使用的属性组。
- choice 仅允许在 <choice> 声明中包含一个元素出现在包含元素中。
- complexContent 定义对复杂类型(包含混合内容或仅包含元素)的扩展或限制。
- complexType 定义复杂类型。
- documentation 定义 schema 中的文本注释。
- element 定义元素。
- extension 扩展已有的 simpleType 或 complexType 元素。
- field 规定 XPath 表达式,该表达式规定用于定义标识约束的值。
- group 定义在复杂类型定义中使用的元素组。
- import 向一个文档添加带有不同目标命名空间的多个 schema。
- include 向一个文档添加带有相同目标命名空间的多个 schema。
- key 指定属性或元素值(或一组值)必须是指定范围内的键。
- keyref 规定属性或元素值(或一组值)对应指定的 key 或 unique 元素的值。
- list 把简单类型定义为指定数据类型的值的一个列表。
- notation 描述 XML 文档中非 XML 数据的格式。
- redefine 重新定义从外部架构文件中获取的简单和复杂类型、组和属性组。
- restriction 定义对 simpleType、simpleContent 或 complexContent 的约束。
- schema 定义 schema 的根元素。
- selector 指定 XPath 表达式,该表达式为标识约束选择一组元素。
- sequence 要求子元素必须按顺序出现。每个子元素可出现 0 到任意次数。
- simpleContent 包含对 complexType 元素的扩展或限制且不包含任何元素。
- simpleType 定义一个简单类型,规定约束以及关于属性或仅含文本的元素的值的信息。
- union 定义多个 simpleType 定义的集合。
- unique 指定属性或元素值(或者属性或元素值的组合)在指定范围内必须是唯一的。
Schema在数据库中的释义[ ]
官方定义如下:
A schema is a collection of database objects (used by a user.). schema objects are the logical structures that directly refer to the database’s data. A user is a name defined in the database that can connect to and access objects. schemas and users help database administrators manage database security.
1、从定义中可以看出schema是数据库对象的集合,为了区分各个集合,需要给这个集合起个名字,这些名字就是我们在企业管理器的方案下看到的许多类似用户名的节点,这些类似用户名的节点其实就是一个schema,schema里面包含了各种对象如:
- 1、tables
- 2、views
- 3、sequences
- 4、stored
- 5、procedures
- 6、synonyms
- 7、indexes
- 8、clusters
- 9、database links。
2、一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。这也就是我们在企业管理器的方案下看到schema名都为数据库用户名的原因。
3、oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决(oracle中虽然有create schema语句,但是它并不是用来创建一个schema的),在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。
4、就是说schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同,所有我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解一些。
5、一个用户有一个缺省的schema,其schema名就等于用户名,当然一个用户还可以使用其他的schema。如果我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的sheman名。
6、比如我们在访问数据库时,访问scott用户下的emp表,通过select from emp 其实,这sql语句的完整写法为select from scott.emp。在数据库中一个对象的完整名称为schema.object,而不属user.object。
7、类似如果在创建对象时不指定该对象的schema,在该对象的schema为用户的缺省schema。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,需要在创建对象时指定该对象的表空间。
下面这个查询就是我说将schema作为user的别名的依据。实际上在使用上,shcema与user完全一样,没有什么区别,在出现schema名的地方也可以出现user名:
sql> gruant dba to scott sql> create table test(name char(10)) table created. sql> create table system.test(name char(10)) table created. sql> insert into test values(' scott' ) 1 row created. sql> insert into system.test values(' system' ) 1 row created. sql> commit commit complete. sql> conn system/manager connected. sql> select from test name ---------- system sql> alter session set current_schema = scott --改变用户缺省schema名 session altered. sql> select from test name ---------- scott sql> select owner table_name from dba_tables where table_name=upper(' test' ) owner table_name ------------------------------ ------------------------------ scott test system test