`

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(Extensible Markup Language)是一种可扩展标记语言,常用于数据交换、配置文件存储以及结构化数据的表示。在这个基于XML的简易联系人备忘录中,XML被用来作为数据存储的格式,...

    Android 备忘录源码.rar

    通常,开发者会使用XML布局文件来定义界面元素,如EditText用于输入文本,Button用于执行操作,以及ListView或RecyclerView用于显示备忘录列表。 2. **SQLite数据库**:Android内置了SQLite数据库,用于存储应用...

    简易安卓备忘录

    关于用户界面,Android使用XML布局文件来定义视图元素,如TextView(文本显示)、EditText(文本输入)和Button(按钮)。开发者会将这些元素组合起来,形成用户可以与之交互的界面。在备忘录应用中,可能会有一个...

    记录或者备忘事件的工具

    总的来说,一个能记录或备忘事件的工具结合了用户友好的界面和强大的XML数据处理能力,使得信息管理变得更加高效和灵活。无论是日常的待办事项,还是项目进度跟踪,这样的工具都能提供极大的便利,帮助我们在繁忙的...

    android studio 简单备忘录

    9. **权限管理**:如果备忘录应用需要读写外部存储,记得在AndroidManifest.xml中添加相应的权限声明,如`&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;`。 10. **测试与调试**:...

    Android程序研发源码Android 备忘录源码.zip

    1. **AndroidManifest.xml**: 这是每个Android应用的核心配置文件,用于声明应用的组件(Activity、Service等)、权限、Intent过滤器等。在备忘录应用中,可能会声明主Activity和可能存在的其他辅助Activity。 2. *...

    Android课程设计--便捷备忘录

    **Android课程设计--便捷备忘录** 在移动应用开发领域,Android系统因其开源特性与广泛的应用,成为开发者的重要平台。本项目"Android课程设计--便捷备忘录"旨在教授学生如何利用Android Studio进行应用程序开发,...

    android 作业 备忘录

    在Android平台上,开发一款备忘录应用是一项常见的学习任务,旨在帮助用户记录日常生活中的重要事项。这个"android作业 备忘录"项目可能是为学生或初学者设计的一个实践练习,以便他们更好地理解和掌握Android应用...

    安卓备忘录源码zip格式

    【标题】"安卓备忘录源码zip格式"所涉及的知识点主要集中在移动应用开发领域,特别是针对Android操作系统。在Android平台上开发应用程序,通常使用Java或Kotlin编程语言,配合Android Studio集成开发环境进行。本...

    Android_实战_备忘录

    在Android平台上,开发一款备忘录应用是一项常见的实践任务,旨在帮助用户记录日常生活中的重要事项。这个名为"Android_实战_备忘录"的实例详细展示了如何构建这样一个应用,涵盖了从设计用户界面到实现数据库存储的...

    用android studio写的一个备忘录

    这个“用android studio写的一个备忘录”项目,显然是一款基于Android Studio构建的备忘录应用,旨在帮助用户记录日常生活或工作中的重要事项。下面将详细介绍Android Studio、Android开发以及备忘录应用的相关知识...

    备忘录JAVA代码

    为了持久化数据,Java的IO流或者更高级的序列化技术,如JSON或XML,可以用来将备忘录数据写入文件。 当用户再次点击同一日期时,程序需要能读取并显示之前保存的备忘录。这需要熟练掌握文件读取操作,如使用...

    安卓备忘录

    8. **权限管理**:在AndroidManifest.xml中,需要声明应用所需的权限,例如读写外部存储(用于保存备忘录文件)和接收广播(用于闹钟提醒)等。 9. **版本适配**:由于Android设备众多,开发者需要考虑不同版本和...

    桌面widget备忘录

    在这个目录下,我们可以找到AndroidManifest.xml(应用配置文件)、布局文件(如XML文件定义的小部件视图)、Java或Kotlin源代码(实现AppWidgetProvider、BroadcastReceiver等功能的类)以及其他必要的资源和配置...

    Android备忘录源码

    【Android备忘录源码】是一个适用于Android平台的软件开发项目,主要功能是实现一个备忘录应用。这个源码可以作为一个学习资源,用于Android课程设计或者毕业设计,为开发者提供了一个实际操作的实例,帮助他们理解...

    DELPHI个人备忘录

    2. **数据存储**:备忘录中的数据需要持久化存储,通常可以使用本地文件(如文本文件、XML或JSON)或者数据库。DELPHI支持多种数据库接口,如BDE(Borland Database Engine)、ADO(ActiveX Data Objects)等,你...

    android备忘录实现

    在Android平台上,开发一个备忘录应用程序涉及到多个关键知识点,这些知识点构成了Android应用的基础结构以及特定功能的实现。以下是对"android备忘录实现"这一主题的详细解析: 1. **Android开发环境**:首先,`....

    备忘录闹钟源码

    - **权限管理**:Android应用需要获取“WRITE_EXTERNAL_STORAGE”或“INTERNET”等相关权限才能正常运行,需要在AndroidManifest.xml中声明。 - **生命周期管理**:理解和处理Activity和Fragment的生命周期,确保...

    android备忘录源码

    1. 用户界面(UI):负责展示备忘录列表和详情,通常由Activity和Fragment组成,使用XML布局文件定义视图元素。 2. 数据存储:用于保存备忘录数据,可能采用SQLite数据库、SharedPreferences或云同步服务。 3. 数据...

    asp在线备忘录系统

    前端主要依赖于AJAX(Asynchronous JavaScript and XML)技术和jQuery库,提供无刷新用户体验。AJAX允许页面在不重新加载整个网页的情况下,与服务器交换数据并更新部分网页内容,提高了用户体验。jQuery则是一个轻...

Global site tag (gtag.js) - Google Analytics