java schema名_关于Schema的名字空间

基本的

XML Schema

的使用就是这样,下面我们要介绍

XML Schema

的另外一个核心的部分也是

Schema

最关键的一个部分,就是关于

Schema

的名字空间(

namespace

)的问题。在上面关于

XML Schema

的介绍中,为了把读者集中到对

XML Schema

的语法理解上,特意省略了关于名字空间

(namespace)

的介绍。

首先我们还是从简单的例子着手,见下面的一段代码:

xsd:schema

targetNamespace='http://www.SampleStore.com/Account'

xmlns:xsd

='http://www.w3.org/2000/08/xmlSchema'

xmlns:ACC

= 'http://www.SampleStore.com/Account'

xsd:element

name='

订单号码

' type='xsd:positiveInteger'/

xsd:element

name='

商品编号

' type='ACC:

商品编号类型

'/

xsd:simpleType

name='

商品编号类型

' base='xsd:string'

xsd:pattern

='[A-Z]{1}d{6}'/

!-

上面的一行代码表示商品编码的第一个字符应该为字母,后面跟六个阿拉伯数字

--

/xsd:simpleType

现在大家需要把注意力集中到开头几行的代码上来,如下:

xsd:schema

targetNamespace='http://www.SampleStore.com/Account'

xmlns:xsd

='http://www.w3.org/2000/08/xmlSchema'

xmlns:ACC

= 'http://www.SampleStore.com/Account'

实际上,一个给定的

XML Schema

定义了一系列的元素名称,类型名称,属性名称和属性组名称。比如上面的代码中的订单号码、商品编号、商品编号类型等。而这些名称都有它一定的作用范围,类似于

C++

中的局部变量的概念。而它们的作用范围是什么呢?就是在他们的目标名字空间(

target namespace

)中是有效的

,

在上面的代码中,我们可以看到它的目标名字空间为

http://www.SampleStore.com/Account

需要注意的是,目标名字空间的命名必须遵守

URL

的语义。同时需要注意的是,该目标名字空间并不是指一个具体的文件,仅仅是给它一个名字而已。实际上,在

Schema

中的定义和声明也可以引用其他的名字空间,我们可以把这种名字空间取名为源名字空间(

source namespaces

)。每一个

Schema

必须有一个目标名字空间,但是可以有多个源名字空间。

实际上,在一个给定的

Schema

中,每一个名称都是属于一个特定的名字空间的。名字空间的名称可能会很长(比如

http://www.SampleStore.com/Account

),但是它们可以用在

XML Schema

中的语义

xmlns

来进行简化。在上面的例子中,我们用

xsd

(取名为

xsd

是任意的,比如你可以取名为

kkk,tt,ppp,gh

都可以)来表示名字空间

'http://www.w3.org/2000/08/xmlSchema'

,用

ACC

来表示名字空间

http://www.SampleStore.com/Account

。同时我们把

http://www.w3.org/2000/08/xmlSchema

这个名字空间称为标准名字空间(

standard namespace

),因为它是定义

Schema

语法的标准地

在上面的代码中,目标名字空间(

targetNamespace

)包含了名字订单号码、商品编号、商品编号类型。而名字

schema,element,simpleType,pattern,string

positiveInteger

是属于标准名字空间

http://www.w3.org/2000/08/xmlSchema

的。也就是说,它们的意义是在

http://www.w3.org/2000/08/xmlSchema

中进行定义的。实际上,所有标准的

XML Schmea

语法、语义和数据结构都在

http://www.w3.org/2000/08/xmlSchema

中进行定义。这样解析器碰到一个名称

(

schema,element

等等

)

的时候,就知道应该在哪里去得到关于它的正确的语义的使用方法。

对于标准名字空间和目标名字空间,我们不需要指定它的

SchemaLocation

。因为对于目标名字空间来讲,

SchemaLocation

就是文档自己。对于标准名字空间来讲,它是众所周知的,也不需要指定。而对于源目标空间来讲,就需要指定它的

SchemaLocation

。见下面的例子:

schema targetNamespace='http://www.SampleStore.com/Account'

xmlns

='http://www.w3.org/1999/xmlSchema'

xmlns:ACC

= 'http://www.SampleStore.com/Account'

xmlns:PART

= 'http://www.PartnerStore.com/PartsCatalog'

import namespace='http://www.PartnerStore.com/PartsCatalog'

schemaLocation='http://www.ProductStandards.org/repository/alpha.xsd'/

element name='

订单号码

' type='positiveInteger'/

element name='

商品编号

' type='ACC:

商品编号类型

'/

simpleType

name='

商品编号类型

' base='string'

pattern ='[A-Z]{1}d{6}'/

/simpleType

element name='

手表

' type='PART:

手表类型

'/

在谈关于源目标空间的

schemaLocation

之前,我们先看一下这行代码:

xmlns='http://www.w3.org/1999/xmlSchema'

它表示什么呢?它表示在文档中所有的名字前面如果没有前缀的,就是由

http://www.w3.org/1999/xmlSchema

进行定义和解析的。这样无疑是很合理的。因为事实上,我们

XML Schema

中的很多名称

(

比如

schema,element,simpleType,pattern

等等

)

都是来自这个标准名字空间的,反复往前面加前缀,你烦不烦呀?所以干脆把它定义成默认的,所以如果一个名称前面没有前缀,就认定它是由

http://www.w3.org/1999/xmlSchema

进行处理的。

好,接下来我们来注意

import namespace='http://www.PartnerStore.com/PartsCatalog'

schemaLocation='http://www.ProductStandards.org/repository/alpha.xsd'/

这段代码,因为

http://www.PartnerStore.com/PartsCatalog

是一个源名字空间,所以必须指定它的

schemaLocation

,采用关键字

import

来引入这个

schemaLocation

注意到下面这行代码

element name='

手表

' type='PART:

手表类型

'/

它表示元素手表的类型(

type

)手表类型是在

http://www.PartnerStore.com/PartsCatalog

中进行定义的。解析器如果要寻找关于手表类型的定义,需要在名字空间

http://www.PartnerStore.com/PartsCatalog

下进行寻找。

到此为止,你应该对名字空间有了一个比较感性的理解。

posted on 2007-01-19 00:11 苦笑枯 阅读(160) 评论(0)  编辑  收藏 所属分类: Xml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

404问题

、配置Tomcat 启动测试! 可能遇到的问题:访问出现404,排查步骤: 查看控制台输出,看一下是不是缺少了什么jar包。如果jar包存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖&…

@Valid注解的使用---SpringMvc中的校验框架@valid和@validation的概念及相关使用

https://www.cnblogs.com/charlypage/p/9385146.html 第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析 关于spring中的validate注解后台校验的解析 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节。比如参数不能为null&…

如何设计java线程安全类_如何设计线程安全的Java程序

什么是线程安全的(thread-safe)?在java中,线程安全的指的是代码可以在并发的或者多线程的环境下安全的使用或者共享,并且它们都将按照期望的方式运行。任何代码,类或者对象,如果它们在并发的环境中运行表现出的行为与在…

java中的AIO

转载自 java中的AIO简介jdk7中新增了一些与文件(网络)I/O相关的一些api。这些API被称为NIO.2,或称为AIO(Asynchronous I/O)。AIO最大的一个特性就是异步能力,这种能力对socket与文件I/O都起作用。AIO其实是一种在读写操作结束之前允许进行其他操作的I/O…

Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)

最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据库:MyS…

细说ASP.NET Core静态文件的缓存方式

一、前言 我们在优化Web服务的时候,对于静态的资源文件,通常都是通过客户端缓存、服务器缓存、CDN缓存,这三种方式来缓解客户端对于Web服务器的连接请求压力的。 本文指在这三个方面,在ASP.NET Core中静态文件的实现过程和使用方法…

金田项目的总结

一个搜索框对手机、姓名、内容进行搜索 <select id"list" parameterType"java.lang.String" resultMap"BaseResultMap">select<include refid"Base_Column_List"/>from user_backstagewhere 11 and is_deletedN<if te…

18000 6c java_面向ISO18000-6C协议的无源超高频射频识别标签芯片设计

摘要&#xff1a;This paper presents a new fully integrated wide-range UHF passive RFID tag chip design that is compatible with the ISO18000-6C protocol. In order to reduce the die area, an ultra-low power CMOS voltage regulator without resistors and an are…

Vue异步组件

转载自 Vue异步组件 在大型应用中&#xff0c;我们可能需要将应用分割成小一些的代码块&#xff0c;并且只在需要的时候才从服务器加载一个模块。为了简化&#xff0c;Vue 允许你以一个工厂函数的方式定义你的组件&#xff0c;这个工厂函数会异步解析你的组件定义。Vue 只有在…

文章中文字乱码问题解决办法集合

乱码问题 测试步骤&#xff1a; 1、我们可以在首页编写一个提交的表单 <form action"/e/t" method"post"><input type"text" name"name"><input type"submit"> </form>2、后台编写对应的处理类 …

.NET开源两年之后社区贡献如何

微软在 2014 年开源了 .NET 核心框架&#xff0c;欢迎社区贡献代码。2015 年&#xff0c;一位 .NET 开发者分析了开源一年之后的社区贡献。2016 年年底又到了&#xff0c;这位开发者再次发表文章&#xff0c;分析了 .NET 开源两年之后的情况。 这一次他分析了 15 个 .NET 开源项…

java把控件跑挂了_Java代码动态修改 ConstraintLayout 内控件布局的辅助类

##上图ConstraintUtil.javaimport android.support.annotation.IdRes;import android.support.constraint.ConstraintLayout;import android.support.constraint.ConstraintSet;import android.transition.TransitionManager;/*** Created by xiaolei on 2017/9/8.*/public cla…

json vs obj

var obj {a: Hello, b: World}; //这是一个对象&#xff0c;注意键名也是可以使用引号包裹的 var json {"a": "Hello", "b": "World"}; //这是一个 JSON 字符串&#xff0c;本质是一个字符串在 JavaScript 语言中&#xff0c;一切都…

Vue动态组件

转载自 Vue动态组件 在动态组件上使用 keep-alive 我们之前曾经在一个多标签的界面中使用 is 特性来切换不同的组件&#xff1a; <component v-bind:is"currentTabComponent"></component> 当在这些组件之间切换的时候&#xff0c;你有时会想保持这些组…

ASP.NET Core Kestrel部署HTTPS

ASP.NET Core配置 Kestrel部署HTTPS。现在大部分网站已经部署HTTPS&#xff0c;大家对于安全越来越重视。 今天简单介绍一下ASP.NET Core 部署HTTPS&#xff0c;直接通过配置Kestrel。大家也可以通过前置Nginx来部署HTTPS。 下面直接进入正题。 新建项目并添加引用 新建一个ASP…

Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)

package cn.bdqn.mhouse.util;import java.util.ArrayList; import java.util.List;import cn.bdqn.mhouse.entity.House;/*** * * 项目名称&#xff1a;mhouse * 类名称&#xff1a;Page * 类描述&#xff1a; 分页的工具类 * 创建人&#xff1a;Mu Xiongxiong …

JSON 和 JavaScript 对象互转

JSON 和 JavaScript 对象互转 要实现从JSON字符串转换为JavaScript 对象&#xff0c;使用 JSON.parse() 方法&#xff1a; var obj JSON.parse({"a": "Hello", "b": "World"}); //结果是 {a: Hello, b: World}要实现从JavaScript 对…

java 时钟 算法分析_java实现时钟方法汇总

import java.awt.Dimension;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;//第一种比较推荐&…

Java IO: 网络

转载自 Java IO: 网络译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) 校对&#xff1a;方腾飞 Java中网络的内容或多或少的超出了Java IO的范畴。关于Java网络更多的是在我的Java网络教程中探讨。但是既然网络是一个常见的数据来源以及数据流目的地&#xf…