• xsd


    XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。

    XML Schema描述了XML文档结构。可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求。文档设计者可以通过XML Schema指定一个XML文档所允许的结构和内容,并可据此检查一个XML文档是否是有效的。XML Schema本身是一个XML文档,它符合XML语法结构。可以用通用的XML解析器解析它。
        一个XML Schema会定义:文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值。
        XSD是DTD替代者的原因,一是据将来的条件可扩展,二是比DTD丰富和有用,三是用XML书写,四是支持数据类型,五是支持命名空间。
        XSD文件的后缀名为.xsd。

    WW中在ConfigurationLoader中使用了xsd进行配置文件的验证。

    参见public static World Load(string filename, Cache cache)方法中的代码段54-76行:

     1   WorldWindSettings settings = finfo.GetValue(null) as WorldWindSettings;
     2 
     3             XmlReaderSettings readerSettings = new XmlReaderSettings();
     4 
     5             if (settings.ValidateXML)
     6             {
     7                 Log.Write(Log.Levels.Debug, "CONF", "validating " + filename + " against WorldXmlDescriptor.xsd and LayerSet.xsd");
     8                 readerSettings.ValidationType = ValidationType.Schema;
     9                 /* load the schema to validate against instead of hoping for an inline schema reference */
    10                 XmlSchemaSet schemas = new XmlSchemaSet();
    11                 schemas.Add(null, settings.ConfigPath + "/WorldXmlDescriptor.xsd");
    12                 schemas.Add(null, settings.ConfigPath + "/Earth/LayerSet.xsd");
    13 
    14 
    15                 readerSettings.Schemas = schemas;
    16                 readerSettings.ValidationEventHandler += new ValidationEventHandler(XMLValidationCallback);
    17                 readerSettings.ValidationFlags |= System.Xml.Schema.XmlSchemaValidationFlags.ReportValidationWarnings;
    18             }
    19             else
    20             {
    21                 Log.Write(Log.Levels.Debug, "CONF", "loading " + filename + " without validation");
    22                 readerSettings.ValidationType = ValidationType.None;
    23             }

    事件方法:

     1 public static void XMLValidationCallback(object sender, ValidationEventArgs args)
     2         {
     3             string file = "(unknown)";
     4             XmlReader reader = sender as XmlReader;
     5             if (reader != null)
     6                 file = reader.BaseURI;
     7 
     8             if (args.Severity == XmlSeverityType.Warning)
     9             {
    10                 Log.Write(Log.Levels.Warning, "CONF", "Warning: " + args.Message);
    11                 Log.Write(Log.Levels.Warning, "CONF", "  in " + file);
    12             }
    13             else
    14             {
    15                 Log.Write(Log.Levels.Error, "CONF", "Error: " + args.Message);
    16                 Log.Write(Log.Levels.Error, "CONF", "  in " + file);
    17                 //throw args.Exception;
    18             }
    19         }

    参考文献:

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

    http://wenku.baidu.com/view/1721f56f1eb91a37f1115c62.html###

    http://www.cnblogs.com/chenqingwei/archive/2010/05/10/1731743.html

     

  • 相关阅读:
    [C#][Log4Net] 配置
    C# 浅拷贝与深拷贝(复制)
    AJAX学习
    Web应用程序与Web网站在IIS中部署
    hexo配置主题发表文章
    【JQuery】学习
    Hexo博客网站再配置
    win7安装和配置IIS7
    常见正则表达式
    【HTML】id与name的用法
  • 原文地址:https://www.cnblogs.com/yhlx125/p/3199462.html
Copyright © 2020-2023  润新知