`

XML 备忘

 
阅读更多

XML 备忘

 

1.XML命名空间

 

XML 命名空间(XML Namespaces) 

http://www.w3school.com.cn/xml/xml_namespaces.asp

 

XML学习笔记(一):XML中的命名空间  

http://www.cnblogs.com/martin-chen/archive/2011/02/24/xml-studynote-namespace.html

 

总结,xml命名空间可以出现在元素中,用于解决冲突,即,相同的元素,

如果属于不同的命名空间则可以表示不同含义,不存在冲突.

比如

<h:table xmlns:h="http://www.w3.org/TR/html4/">

   <h:tr>

   <h:td>Apples</h:td>

   <h:td>Bananas</h:td>

   </h:tr>

</h:table>

这里,使用了命名空间h,

<f:table xmlns:f="http://www.w3school.com.cn/furniture">

   <f:name>African Coffee Table</f:name>

   <f:width>80</f:width>

   <f:length>120</f:length>

</f:table>

这里使用了f,两个都是table,但是属性不同.

 

XML Namespace (xmlns) 属性

XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法:

xmlns:namespace-prefix="namespaceURI"

当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。

后面的namespaceURI只是用来表示唯一的,xml文档不会真的去访问这个uri.

 

一个元素可以定义一个默认的命名空间,这样该元素(及其所有子元素)的元素名称可以不写前缀.

默认的命名空间(Default Namespaces)

为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。

请使用下面的语法:

xmlns="namespaceURI"

这个 XML 文档携带着某个表格中的信息:

<table xmlns="http://www.w3.org/TR/html4/">

   <tr>

   <td>Apples</td>

   <td>Bananas</td>

   </tr>

</table>

这样table就可以不用写前缀了.

 

另外,一个元素里面可以有一个默认命名空间,和多个非默认命名空间

命名空间可以在任何元素中定义,通常在根元素中定义,这样定义一次所有

元素都可以使用命名空间了.

 

2. XML 的schema

参考:http://www.w3school.com.cn/schema/schema_schema.asp

 

XML 的schema 也是一种XML格式的文件,这种文件用来定义XML文档的结构,包括控制XML元素和元素的属性等.

XML的schema文件一般保存为.xsd文件,这种文件中,

元素的命名空间,元素类型等必须符合W3C规范的约束.

因为这种约束,XML 的schema可以看成是一种定义XML文档结构的语言了.

 

比如 <schema> 元素是每一个 XML Schema 的根元素:

<?xml version="1.0"?>

 

<xs:schema>

 

...

...

 

</xs:schema>

 

<schema> 元素可包含属性。一个 schema 声明往往看上去类似这样:

<?xml version="1.0"?>

 

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.w3school.com.cn"

xmlns="http://www.w3school.com.cn"

elementFormDefault="qualified">

 

...

...

</xs:schema>

代码解释:

下面的片断:

xmlns:xs="http://www.w3.org/2001/XMLSchema"

显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。

同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:

这个前缀可以定义为别的,不过一般默认就用xs:,不用修改.

 

这个片断:targetNamespace="http://www.w3school.com.cn" 

显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: "http://www.w3school.com.cn"

命名空间字符串只要唯一就行,不一定非要是网址的格式.

这个命名空间是引入该schema文件的xml中定义的,如何在xml文件中引入schema详见后文.

 

这个片断:xmlns="http://www.w3school.com.cn" 

指出本schema中,默认的命名空间是 "http://www.w3school.com.cn"。

 

这个片断:elementFormDefault="qualified" 

指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。

 

...

...

省略的部分表示具体定义的xml文档的结构,具体教程参考:

http://www.w3school.com.cn/schema/index.asp

 

下面是一个完整的.xsd文件定义的一个schema:

note.xsd

<?xml version="1.0"?>

<xs:schema 

  xmlns:xs="http://www.w3.org/2001/XMLSchema"

  targetNamespace="http://www.w3school.com.cn"

  xmlns="http://www.w3school.com.cn"

  elementFormDefault="qualified">

 

<xs:element name="note">

        <xs:complexType>

            <xs:sequence>

                <xs:element name="to" type="xs:string" />

                <xs:element name="from" type="xs:string" />

                <xs:element name="heading" type="xs:string" />

                <xs:element name="body" type="xs:string" />

            </xs:sequence>

        </xs:complexType>

    </xs:element>

</xs:schema>

 

下面是一个使用上面note.xsd来定义的xml文件,note.xml

<?xml version="1.0"?>

<qq:note

  xmlns:qq="http://www.w3school.com.cn"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

 

  <qq:to>George</qq:to>

  <qq:from>John</qq:from>

  <qq:heading>Reminder</qq:heading>

  <qq:body>Don't forget the meeting!</qq:body>

 

</qq:note>

注意,xmlns:qq="http://www.w3school.com.cn" 这里声明了一个命名空间,

和xsd文件中的targetNamespace是一致的.

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 这个是固定的,表示使用的验证规范

xsi:schemaLocation="http://www.w3school.com.cn note.xsd"

这个把这里定义的命名空间xmlns:qq的uri和xsd文件关联起来,以便引入定义好的note.xsd文件

来约束note.xml的文档结构.

 

下面代码用于检查xml文件是否符合引入的xsd文件约束.

需要导入dom4j包.

 

package test.dbtool.utils;

 

import org.dom4j.Document;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.SAXValidator;

import org.dom4j.io.XMLWriter;

import org.dom4j.util.XMLErrorHandler;

 

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import java.io.File;

 

/** 

* Java XML校验测试 

* @author leizhimin,2008-9-4 14:42:35 

*/

public class ValidataXMLTest

{

  public static void main(String[] args)

  {

    validateXMLByXSD();

    validateXMLByDTD();

 

  }

 

  /** 

   * 通过XSD(XML Schema)校验XML 

   */

  public static void validateXMLByXSD()

  {

    String xmlFileName = "D:\\E\\JSP\\Tool4DBJAXBDemo\\src\\note.xml";

    String xsdFileName = "D:\\E\\JSP\\Tool4DBJAXBDemo\\src\\note.xsd";

    try

    {

      // 创建默认的XML错误处理器

      XMLErrorHandler errorHandler = new XMLErrorHandler();

      // 获取基于 SAX 的解析器的实例

      SAXParserFactory factory = SAXParserFactory.newInstance();

      // 解析器在解析时验证 XML 内容。

      factory.setValidating(true);

      // 指定由此代码生成的解析器将提供对 XML 名称空间的支持。

      factory.setNamespaceAware(true);

      // 使用当前配置的工厂参数创建 SAXParser 的一个新实例。

      SAXParser parser = factory.newSAXParser();

      // 创建一个读取工具

      SAXReader xmlReader = new SAXReader();

      // 获取要校验xml文档实例

      Document xmlDocument = (Document) xmlReader.read(new File(xmlFileName));

      // 设置 XMLReader 的基础实现中的特定属性。核心功能和属性列表可以在 [url]http://sax.sourceforge.net/?selected=get-set[/url] 中找到。

      parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");

      parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", "file:" + xsdFileName);

      // 创建一个SAXValidator校验工具,并设置校验工具的属性

      SAXValidator validator = new SAXValidator(parser.getXMLReader());

      // 设置校验工具的错误处理器,当发生错误时,可以从处理器对象中得到错误信息。

      validator.setErrorHandler(errorHandler);

      // 校验

      validator.validate(xmlDocument);

 

      XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());

      // 如果错误信息不为空,说明校验失败,打印错误信息

      if (errorHandler.getErrors().hasContent())

      {

        System.out.println("XML文件通过XSD文件校验失败!");

        writer.write(errorHandler.getErrors());

      }

      else

      {

        System.out.println("Good! XML文件通过XSD文件校验成功!");

      }

    }

    catch (Exception ex)

    {

      System.out.println("XML文件: " + xmlFileName + " 通过XSD文件:" + xsdFileName + "检验失败。\n原因: " + ex.getMessage());

      ex.printStackTrace();

    }

  }

 

  /** 

   * 通过DTD校验XML 

   */

  public static void validateXMLByDTD()

  {

    // todo:暂时不用,以后再说吧

  }

}

 

 

分享到:
评论

相关推荐

    基于XML的简易联系人备忘录

    这是一个基于XML的简易联系人备忘录,将用户输入的数据,用XML的形式存储;没有使用数据库。

    Android_实战_备忘录

    本实例是android项目实战,关于备忘录的设计,包括里面的新建,删除,查看等详细功能的设计,对于布局界面和里面的存储数据都是数据库。

    android xml pull解析示例

    android xml pull解析示例,自己mark下,备忘

    xml_edit.rar_xml ed_xml edit_xml 编辑工具

    xml_edit:VC++实现的一个备忘录xml文件编译工具,可以编辑并保存xml文件。运行环境:VC6.0,Windows XP,并安装微软msxml.msi 4.0。

    记录或者备忘事件的工具

    这是一个可以记录自己的事情的工具。可以将信息导入到XML中,也可以从XML中读出数据。

    xml、xsd、javabean的互相转换

    作为备忘录,实现xml转换成xsd,然后由xsd转换到javabean,最后在xml和javabean之间互相转换。 说明网址:http://blog.csdn.net/beanjoy/article/details/38272051

    Swing实现的备忘录(桌面版)

    Java+XML实现日程管理,不错哦.能直接运行,同时提供源代码.

    基于SharedPreferences的安卓备忘录应用程序设计源码

    项目包含30个文件,其中包括13个XML文件、6个Java源文件、3个Gradle文件、2个Gitignore文件、2个属性文件、1个工程文件、1个JAR文件、1个gradlew文件和1个BAT文件。这个应用程序是一个安卓备忘录应用,使用...

    java_beiwanglu.rar_java抢票提醒_备忘录_提醒

    该提醒簿基于java语言和xml数据库结合开发.通过读写xml文件动态写入读取备忘录.,通过线程机制及时提醒您.提供多种提醒方式.操作方便,使用简单.是个很不错的提醒簿.

    基于java语言的提醒簿 - Java源码 - JAVA & XML

    该提醒簿采用java语言和xml数据库结合开发.通过读写xml文件动态写入读取备忘录.,通过线程机制及时提醒您.提供多种提醒方式.操作方便,使用简单.是个很不错的提醒簿.

    SimpleNote:简易备忘录

    这是一款安卓备忘录应用,大二时的课程设计。 如果有空或者感兴趣会继续更新完善功能。 Icon: 联系邮箱: 获取apk 目录说明 src/java/com.example.notes Activity 活动包 Adapter 适配器包 Dialog 对话框包 Manager ...

    vbscript 读取xml格式的配置文件

    最近一项目中,vbs脚本需要读取配置文件,本来考虑用ini来做配置文件,但是vbs里没有现成读写ini文件的支持,于是考虑用xml来做配置文件,使用xmldom来读取。写成个class使用起来应该方便一些。贴来备忘一下。

    D-calendar非常好用的桌面日程/备忘录小工具

    因工作需要自己写了一个,无需安装,直接运行,支持日常备忘录,支持月度周期性日程记录提醒,支持临时完成任务,可收缩展开;Xml保存数据,方便备份存档,简单易用,有需要的欢迎下载。

    基于SQLite的安卓剪切板、备忘录和文本复制功能设计源码

    本源码为基于SQLite的安卓剪切板、备忘录和文本复制功能设计,共包含50个文件,其中xml文件17个,png文件11个,java文件5个,gitignore文件3个,gradle文件3个,properties文件2个,name文件1个,LICENSE文件1个,md...

    asp.net Linq to Xml学习笔记

    以下是项目中某个底层的代码,记下做个备忘,如果能给新手学习Linq to Xml带来帮助,那就再好不过了 XML文件的格式: 代码如下: &lt;?xml version=”1.0″ encoding=”utf-8″?&gt; &lt;configuration&gt; ...

    emacs-cs:Emacs大备忘单(或备忘单或备忘单)

    emacs-cs:Emacs大备忘单(或备忘单或备忘单)

    synthmodes:适用于合成器模块的移动友好备忘单

    模块文档包括一个索引XML文件,该XML文件列出了带有图标和标签的页面以及单独HTML文件,每个备忘单的页面都有一个。 要添加模块: 在data /目录下为您的模块创建一个子目录 为您的模块创建一个“ module.xml”文件...

    idea插件 源码备忘录 备注记事本

    1、支持导出导入 ...7、支持生成xml和md 文件 8、支持拖动排序 9、支持范围选择和自动选择一行 10、支持java类中所有方法,并支持跳转 11、支持源码跳转 等等 支持一对一服务 价格合适,还支持定做

    Memo:Android平台的备忘录应用

    Memo 目标 Android平台最简洁好用的记事App 完全符合Android设计规范 完全开源且不断根据用户需求更新 建议的开发环境 Android studio JDK1.6 android SDK 编译版本: 20.0.0 代码可读性 请保持良好的代码规范,保证...

    AutoBib:自动备忘

    创建一个包含所有PDF的文件夹files/ (名为YYVenue.pdf,例如18CCS.pdf) 创建publications.xml在它所有的出版物(按照有所记载example.xml ) 创建适合您首页的template.html 。添加出版物将PDF放在files/文件夹中...

Global site tag (gtag.js) - Google Analytics