html浏览xsd,那点你不知道的XHtml(Xml+Html)语法知识(DTD、XSD)

什么是XHtml:

摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML。

XHtml可当模板引擎应用:

CYQ.Data 框架里有一套XHtmlAction模板引擎, 应用在QBlog开源博客里。

简单说,把Html当Xml进行Load加载,再使用常规的Xml语法就可以对模板进行增删改查等操作。

为啥不是Html,而是XHtml?

Html的语法约束不严格,任你标签不闭合,或者标签错乱,也能被浏览器解析,或忽略,或错位,或XX;

如果直接解析使用Html,没约束意味着无规则,存在万一的可能性,操作起来复杂度或考虑的因素过多,成本是相当高的。

而使用XHtml,由于语法上归属Xml,所以可以直接使用使用XmlDocument对象操纵,直接方便。

XHtml注意事项:

我们写Html时,经常会有:

或者:xx.gif

而XHtml受xml语法约束时:

1:单独标签必须有"/>"闭合;

2:属性只能用双引号,不能用单引号,同样要标签闭合。

对于模板来说,让制作生成Html模板的人,注意下这个事项,也是可控的小事。

用XmlDocument操作Html必然会遇到的难题:

DTD(Document Type Definition)?

我用通俗的流程讲,如果我用XmlDocument.Load(Html) 去加载一个Html模板,如果这个Html带有&nsb;等实体符号,那么加载就会失败抛异常如下:

b7464d34661ec710e972292d37ddac93.png

DTD就常在你眼前,只是你视而不见:

当我们新建一个Html的时候,我们在第一行就可以看见DTD的引用标签:

html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

无标题页

可以看见,默认都是W3组织提供的,地址也是一个远程地址,对于浏览器而言,它要解析实体,也要引用DTD。

只是浏览器通常会把DTD在本地集成,不会每次都去远程下载。

同样的,而我们需要操作Html时,需要引入这个DTD文件。

XmlDocument如何引用DTD:

只要设置XmlDocument的属性XmlResolver=new XmlUrlResolver();即可。

当我们Load(Html)时,默认若有dtd地址(指向远程w3服务器的),如果每次都从服务器读取,势必是不可取的,加载速度会也会因网络卡一卡。

DTD引用的优化,同样下载DTD到本地:

为了提升解析速度,所以把DTD文件下载到本地是不二的做法,所以你如果看见QBlog的源码项目里,也会有这样一个目录:

f80516f27d91b3eb5c577f0ec646a86d.png

同样的,为了修改远程路径为本地路径,我们实现自己的XmlUrlResolver类:下面是CYQ.Data里的实现代码:

19c3a62b3a74b78236c45497d6f69677.png

其实就是一个继承,重写URI路径指向本地文件。

在QBlog的历史任务中,攻克DTD是一个相当沉重的课题

对于DTD的问题,相关的信息少之又少,而使用XmlDocument加载Html所遇到的DTD引用问题,更是几乎找不到答案,加上那些年,知识所限,所以不得不谓之课题沉重。

更奇怪的是,在.NET的整个领域教学或教学书里,没怎么见着有关DTD的相关信息:

教你Html的老师,从不讲第一行为何物?

教你XML的老师,从不讲命名空间及DTD?

那么DTD是什么呢?

如果想看官方长篇描述的,请自行搜索关键字”dtd“。

个人理解简单的说:就是对xml的一种语法约束(折腾个游戏规则给你让你玩)。

由于Html也基于xml后的一种扩展,所以同样适用于Html。

以Html的Table元素示例了解下DTD:

对于html的table,正常我们的都知道它的常见子节点有tr、tbody。

那它能不能有个txx,tmdxx或tmdxxx?

答案是你可以乱加,但那是无效的,浏览器是会忽略的,因为dtd里没有定义。

如果你下载DTD到本地,可以搜到对table的语法有这么一行:

大语就是元素table的子级只能有"caption,(col、colgroup)、 thread、tfoot、(tbody,tr)“

而?*+ |就是正则里的0或1次;0或N次,1或N次,x或Y。

那么Table表格都能有什么属性呢?

%attrs;

summary     %Text;         #IMPLIED

width       %Length;       #IMPLIED

border      %Pixels;       #IMPLIED

frame       %TFrame;       #IMPLIED

rules       %TRules;       #IMPLIED

cellspacing %Length;       #IMPLIED

cellpadding %Length;       #IMPLIED

align       %TAlign;       #IMPLIED

bgcolor     %Color;        #IMPLIED

>

语法读起来,基本就是:

summary 文字 默认(可选的)

width    长度   默认(可选的)

%Text,这里的%是个变量,往上可找一个定义:

语法基本上就是:CData是指字符串数据,然后把它定义为 % Text,然后其它地方引用就用%Text表示CData就是字符串了。

Html之所以为Html,那是因为有一个w3标准,用dtd给定义了所有的Html标签的元素及属性,所以A元素才有的href,Img元素有了src。

我们再回望:

html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

意思是引入DTD文档,html指文档对html根元素开始生效,然后Public按字面意思理解,接着双引号的内容是一个随意起的名称,之后是一个DTD的路径。

以上说了这么多,大伙对DTD应该有一些了解了。

XSD(XML Schemas Definition)又出来了

上面刚说完,怎么又扯上XSD了,话说某组织觉的DTD在数据类型的约束上不够细腻,只有字符类型,而没有int,float,bool,date等,于是整出了另一个约束规范,就叫XSD了。

在哪可见XSD:

1: VS新建项时,可见:

db5a03dc62b42be229354df66eaf6b72.png

2:Web.config的约束文件: DotNetConfig.xsd

对于web.config,一开始我以为采用dtd约束,找了三分钟才发现,微软就采用了xsd来约束,而不是dtd。

路径就在:C:\Program Files (安装目录)\Microsoft Visual Studio 8\Xml\Schemas\DotNetConfig.xsd

若打开就是又一堆Xml语法了:

4add6bcf84599734ee991d07b578bbb9.png

xsd架构的约束语法,是Web.config最最权威的指南,如果看的懂:什么web.config详解文章的,都是浮云了;如果看不懂,还是去看浮云方便些。

当然,想学的话,搜索关键字”xsd 语法“。

总结:

本文不是百科全书,所以只写我脑里存档的那点知识,力求点到为止,更全的语法知识,还请自行搜索相关关键字。

XHtml(Xml+Html)语法知识(DTD、XSD)

那点你不知道的XHtml(Xml+Html)语法知识(DTD.XSD) 什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ ...

JSP的学习(3)——语法知识二之page指令

本篇接上一篇,继续来学习JSP的语法.本文主要从JSP指令中的page指令,对其各个属性进行详细的学习: JSP指令: JSP指令是为JSP引擎而设计的 ...

xml语法、DTD约束xml、Schema约束xml、DOM解析xml

今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

关于xml的一些知识,DTD,XSD

DTD 文档类型定义(Document Type Definition)是一套关于标记符的语法规则.它是标准通用标记语言和 可扩展标记语言1.0版规格的一部分,是文档的验证机制.文档类型定义是一种保证 ...

JSP的学习(5)——语法知识三之include指令

本篇继续来对JSP语法中的JSP指令进行学习,在中,已经介绍了JSP指令的书写格式和page指令的详细信息,所以在这一篇中我们会对JSP指 ...

JSP的学习(2)——语法知识一

上一篇讲述了JSP的一些基础知识和底层原理,本篇将来学习JSP所需掌握的语法知识等. JSP的语法主要包括以下几个部分的内容: 1)         JSP模板元素 2)  ...

thinkPHP 模板中的语法知识 详细介绍(十二)

原文:thinkPHP 模板中的语法知识 详细介绍(十二) 本章节:介绍模板中的语法,详细的语法介绍 一.导入CSS和JS文件    ==>记住常量的是大写 1.css link .js  sc ...

随机推荐

PHP 调试

$log_path = '/data0/www/html/hejungw/static/log/uploadlog/'; $log = $log_path . date('Y-m-d') . '.lo ...

idea使用maven搭建springmvc

最近学着搭建springmvc,写此博客记录一下 idea版本:2016.3.1maven: apache-maven-3.3.9tomcat:apache-tomcat-8.5.8 1.New Pr ...

thinkphp实现分页

public function zhanshi(){ $cate = M('cate'); //实例化数据表 $count = $cate->count(); //获取总的记录数 $Page = ...

windows系统port监听

通常情况下.假设想发现全部已经使用的和正在监听的port,我们能够使用netstat命令. netstat并不是一个port扫描工具.假设你想扫描计算机开放了哪些port的话.建议使用本文介绍的方法. ...

tls session resumption

http://stackoverflow.com/questions/12318325/resume-tls-connection-in-java As long as you use the sam ...

【重点突破】——two.js模拟绘制太阳月亮地球转动

一.引言 自学two.js第三方绘图工具库,认识到这是一个非常强大的类似转换器的工具,提供一套固定的接口,可用在各种技术下,包括:Canvas.Svg.WebGL,极大的简化了应用的开发.这里,我使用 ...

近期写js库中遇到的一个判别的问题

最近在写一个自己的js库,正写到数组包,在里面定义了一个排序,只对纯数字数据进行排序的方法,但是在测试的时候发现一个很诡异的问题,那就是传入一个对象的时候,它没有返回erroemsg而是返回了对象,上 ...

6-12 varchar和char 枚举类型enum 集合set

1       字符类型char和varchar #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参 ...

Navicat 连接MySQL时出现1251错误的解决方案

我用的MySQL版本是8.0.11,比较新的MySQL版本中采用的加密方式与旧的不同,从而导致1251错误. 解决方案:打开终端连接上数据库,执行以下语句,问题解决.(自己遇到过的坑,亲测有效) US ...

【转】异步编程 In .NET

概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值