XML与xml schema 之间的问题

delphi_10001 2005-01-14 10:16:19
正确的XML 文件如下
<?xml version="1.0" encoding="Big5" standalone="no" ?>
<book xmlns="x-schema:ex7_s1.xml">
<書名 出版日期="2002-01-11">一起玩OfficeXP</書名>
<定價 最低折扣="0.7">aa3</定價>
<作者>3333</作者>
<作者>江高舉</作者>
<本書網址>www.163.com</本書網址>
</book>
XML Scheam 文件如下

<?xml version="1.0" encoding="Big5" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<AttributeType name="出版日期">
<datatype dt:type="date" />
</AttributeType>
<AttributeType name="最低折扣">
<datatype dt:type="float" />
</AttributeType>
<ElementType name="book" content="eltOnly" order="seq">
<element type="書名" />
<element type="定價" />
<element type="作者" />
<element type="本書網址" />
</ElementType>
<ElementType name="書名" content="textOnly">
<attribute type="出版日期" />
</ElementType>
<ElementType name="定價" content="textOnly">
<datatype dt:type="int" />
<attribute type="最低折扣" />
</ElementType>
<ElementType name="作者" content="textOnly">
<datatype dt:type="string" />
</ElementType>
<ElementType name="本書網址" content="textOnly">
<datatype dt:type="uri" />
</ElementType>
</Schema>

数据类型有误的XML文件如下
<?xml version="1.0" encoding="Big5" standalone="no" ?>
<book xmlns="x-schema:ex7_s1.xml">
<書名 出版日期="20334">一起玩OfficeXP</書名>
<定價 最低折扣="aaa0.7a2">aa3</定價>
<作者>3333</作者>
<TEL 區域號碼="02">2522222</TEL>
<作者>江高舉</作者>
<本書網址>waaaaaaaaaawm</本書網址>
</book>
执行正确和错误的XML文件时结果都是一样不会出现错误
提示这是怎么回事.???
...全文
140 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kv4000 2005-01-16
  • 打赏
  • 举报
回复
摘录的文档,希望对楼主有帮助!

三、从Xml文档内部引用Xml Schema验证


  在创建了一个Xml Schema文档之后,就可以用它来验证xml文档的有效性了。做起来很简单,只需要在xml文档根元素内引用该schema文件就可以了。不过,根据xml schema文档是否包含targetNamespace属性,xml文档内的引用有以下两种方式:

  1、使用noNamespceSchemaLocation属性引用schema文件

  当xml schema文档不包括targetNamespace属性时,应当通过xml文档根元素的noNamespaceSchemaLocation属性及W3C的schmea实例命名空间(xmlns:xsi="http://www.w3.org/2001/XMLScheam-instance";)来引用名xml schema文件。下面的例子引用不包含"targetNamespace"属性的名为"noTargetNS.xsd"的架构文件:

<?xml version="1.0" encoding="utf-8" ?>
<Employees Xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
"xsi:noNamespaceSchemaLocation="noTargetNS.xsd">
<Name>LinY</Name>
<Age>42</Age>
</Employees>


  2、使用schemaLocation属性引用schema文件

  然而,如果xml schmea文件包含了一个targetNamespace 属性,在xml文档中就将通过schemaLocation属性而不是noNamespaceSchemaLocation属性来引用schema文档。而且,这个属性所指定的值必须是完整的。它需要包含以空格分开的两部分,前一部分是Uri,这个Uri与schema文档的targetNamespace属性内部引用的Uri是一致的;后一部分是schema文件完整路径及名称。另外,Xml文档的根元素也必须声明schema实例名字空间(xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";),下面的例子引用包含"targetNamespace"属性的名为yesTargetNS.xsd架构文件:

<?Xml version="1.0" encoding="utf-8" ?>
<Employees Xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://www.tuha.net ;yesTargetNS.xsd"
Xmlns="http://www.tuha.net";>
<Name>XiaoM</Name>
<Age>25</Age>
</Employees>


  在xml文档内部正确地引用schema文件之后,在解析xml文档时将执行验证。

四、在Visual Studio.Net IDE中使用Xml Schmea验证

  Visual Studio.Net IDE为使用xml架构提供了丰富的支持。其集成的xml架构设计器,能够以组件拖放的方式创建xml架构文档;集成的xml文档设计器,能够基于现有xml文档创建xml架构。这之后,你可以关联xml文档和xml架构文件并执行xml文档的正确性及有效性验证操作。这样做时,你只需要作简单的代码修改甚至不用手写一行代码就能完整文档验证的所有工作。

  1、创建xml架构

  可以通过任何文本编辑器创建xml架构文件,显然,这样做比较麻烦的,你必须熟知架构文档的规范。作为补充,Visual Studio.Net IDE中提供了好几种创建Xml架构文档的简单方式。使用Xml 架构设计器,从工具箱中拖入你需要的节点元素组件,就可以完成xml架构文档创建的绝大部分工作(如果你不需要修改节点数据类型的话,这也是创建xml架构文件的全部工作)。特别地,如果你已经创建了xml文档,你可以基于现有 XML 文件创建架构,通过简单的操作,就可以生成此xml文档应遵循的xml架构文件:

    1.将Xml源文档(.xml 文件)加载到"Xml设计器"中。

    2.从IDE菜单栏中选择"XML"菜单项并单击"创建架构"。

  就这么简单,查看项目"所有文件",你会发现,与xml文档同名的 XML 架构(.xsd 文件)生成了。

  不过,以这种方法产生xml架构时,所有数据类型都被默认设置为 xsd:string类型,因此,可能需要修改它们以符合 Xml文档的需要。

  2、关联xml文档和xml架构文件

  如果已经创建了xml源文件和Xml架构文件,要使该xml架构文件对xml文档发生作用,必须将xml源文件和xml架构文件关联起来。在Visual Studio.Net IDE(集成开发环境)中,实现这一关联非常简单,通过定义Xml文件的targetSchema属性就可以完成:

    1.将Xml 文件加载到"Xml 设计器"中。

    2.切换到"Xml"视图模式。

    3.在属性窗口中,从"targetSchema"属性的下拉列表中选择与名字空间相关联的的架构文件。

  这时你应该会注意到,targetSchema属性的下拉框将列出该项目包括的所有xml架构及一些建议的规范,包括相应的名字空间。这同时也告诉我们,如果所需要的xml架构并不包含在该项目中,你将需要在这里键入将用于验证 XML 文档的架构的统一资源标识符 (URI)。

完成这几步后,返回查看你的xml源文件,会发现,在根元素内,xml架构以默认名字空间被引用。

  附带说明一下,清除targetSchema属性的内容就可以移除xml文档与xml架构间的关联。

  3、执行验证操作

  将xml架构文件与 Xml源文件关联后,"Xml 设计器"的验证功能可以检查Xml文件是否有效:

    1.将要检查的 XML 文件加载到"XML 设计器"中。

    2.从"XML"菜单选择"验证 Xml 数据"。

  这时,执行验证操作。这一过程也同时检查xml文档的正确性,如果发现错误,状态栏将予以指示。如果发生有效性错误,系统将提示"发现验证错误"并在"任务列表"中提供详细说明,否则,系统提示"未找到验证错误"而通过验证。

byu801 2005-01-15
  • 打赏
  • 举报
回复
用XML SPY工具可验证,要在XML中添加对SCHEMA的引用
delphi_10001 2005-01-14
  • 打赏
  • 举报
回复
有请高手入内.或着有一个XML 和Schema的验证整个例子吗??
请一
一刺教.

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧