xmlschema(如何解析XML schema)

本文目录
如何解析XML schema
schema是控制XML文件的元素名称、类型、顺序的,为什么还要解析它呢?
使用XML Spy,它能马上生成满足schema条件的XML示例文件来。
如果硬要解析也不是不可以,但这不是Schema存在的目的哟。
XML和schema
你这个schema很怪,只能写一个人的记录,可以是以下三个中的任何一个,但不能组合到一起(注意元素的顺序不能变):
----------第1种,以contact为根元素----------------------------------------------------
《?xml version=“1.0“ encoding=“GB2312“?》
《Contact xsi:noNamespaceSchemaLocation=“ContactSchema.xsd“ xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“》
《name》jonh《/name》
《phonenumber》0998876554《/phonenumber》
《number》37《/number》
《street》champ sleey《/street》
《zipcode》80907《/zipcode》
《city》hkonima《/city》
《country》japan《/country》
《surname》toms《/surname》
《/Contact》
--------第2种,以person为根元素-------------------------------------------------------
代码同上,只不过把Contact改为person
--------第3种,以company为根元素-----------------------------------------------------
代码相似,改了根元素名,去掉surname
《?xml version=“1.0“ encoding=“GB2312“?》
《company xsi:noNamespaceSchemaLocation=“ContactSchema.xsd“ xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“》
《name》jonh《/name》
《phonenumber》0998876554《/phonenumber》
《number》37《/number》
《street》champ sleey《/street》
《zipcode》80907《/zipcode》
《city》hkonima《/city》
《country》japan《/country》
《/company》
XML中schema是什么意思
XML Schema定义(XML Schema Definition,XSD)是一套W3C标准,用于基于XML的称为XML Schema的类型系统。用于定义的语言是一种称为XML模式定义语言(XML Schema Definition Language)的XML语法。Web 服务使用XML作为表示消息和数据的底层格式。因此,XSD成为Web服务类型系统的自然选择。
XML文档必须有严格的形式规范,以适应各种具体的应用。首先,XML文档必须符合XML语法限制,术语称为“well-formed XML”;其次,为了使XML表示的数据有一定含义,还需要根据应用为其定义语义上的限制,术语称为“validating XML”。“well-formed XML”是容易验证的,而“validating XML”还需要另一个关联的文档来定义XML标记规范。以前使用的是DTD文档,现在使用的是Schema。
比如一个用来表示书对象的XML文档如下:
金庸
相关的DTD文档内容应为:
《!ELEMENT title(#PCDATA)》
如果使用Schema,文档内容则为:
>
《element name=’author’ type=’string’/>
《/complexType》
Schema文档相对于DTD文档有明显的好处,首先Schema文档本身就是“validating XML”,而DTD文档甚至不是“well-formed XML”,因此,可以使用相同的工具来出来Schema文档和XML文档,而处理DTD必须有专门的工具;Schema相对DTD,还有格式简单、容易理解、表达能力更强等优点,因此代替DTD已是大势所趋。
关于XML Schema的详细内容可参考:http://www.w3.org/TR/xmlschema-1/
xml的schema的错误
你的 xsd:element节点(哪怕是一个)在 xsd:complexType 下也不能直接出现。
需要作为《xsd:sequence》或者《xsd:choice》中的一个子节点出现在复杂类型元素(xsd:complexType)中。
***你的Schema中的错误***:
1. 《xsd:element name=“class“》直接作为《xsd:complexType》的子节点了。
2. 《xsd:element name=“student“》同样也是直接作为《xsd:complexType》的子节点了。
3.你希望class中可以出现多个student的问题,那么你需要将你对应的element节点加入 maxOccurs=“unbounded“ 的属性及其值。
例如:
《xsd:element name=“student“》
改为:
《xsd:element name=“student“ maxOccurs=“unbounded“》
(按照语境来说,grade下同样可以有多个class)
4.在复杂类型中《xsd:attribute》节点放在最后。
最终的正确Schema(*对你的稍加修改)
《?xml version=“1.0“?》
《xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema“》
《xsd:element name=“grade“》
《xsd:complexType》
《xsd:sequence》
《xsd:element name=“class“ maxOccurs=“unbounded“》
《xsd:complexType》
《xsd:sequence》
《xsd:element name=“student“ maxOccurs=“unbounded“》
《xsd:complexType》
《xsd:sequence》
《xsd:element name=“number“ type=“xsd:string“/》
《xsd:element name=“name“ type=“xsd:string“/》
《xsd:element name=“email“ type=“xsd:string“/》
《xsd:element name=“qq“ type=“xsd:string“/》
《xsd:element name=“address“》
《xsd:complexType》
《xsd:sequence》
《xsd:element name=“province“ type=“xsd:string“/》
《xsd:element name=“city“ type=“xsd:string“/》
《xsd:element name=“street“ type=“xsd:string“/》
《xsd:element name=“mailcode“ type=“xsd:string“/》
《/xsd:sequence》
《/xsd:complexType》
《/xsd:element》
《/xsd:sequence》
《/xsd:complexType》
《/xsd:element》
《/xsd:sequence》
《xsd:attribute name=“number“ type=“xsd:string“/》
《/xsd:complexType》
《/xsd:element》
《/xsd:sequence》
《xsd:attribute name=“year“ type=“xsd:string“/》
《/xsd:complexType》
《/xsd:element》
《/xsd:schema》
XML Schema可以定义四种复杂类型,分别是
1. 定义只包含子元素的复杂类型
《xs:element name=“person“》
《xs:complexType》
《xs:sequence》
《xs:element name=“firstname“ type=“xs:string“/》
《xs:element name=“lastname“ type=“xs:string“/》
《/xs:sequence》
《/xs:complexType》
《/xs:element》
2. 定义只包含属性的复杂类型
《xs:element name=“product“ type=“prodtype“/》
《xs:complexType name=“prodtype“》
《xs:attribute name=“prodid“ type=“xs:positiveInteger“/》
《/xs:complexType》
3. 定义只包含内容的复杂类型
《xs:element name=“shoesize“ type=“shoetype“/》
《xs:complexType name=“shoetype“》
《xs:simpleContent》
《xs:extension base=“xs:integer“》
《xs:attribute name=“country“ type=“xs:string“ /》
《/xs:extension》
《/xs:simpleContent》
《/xs:complexType》
4. 定义包含内容和子元素混合的复杂类型
《xs:element name=“letter“》
《xs:complexType mixed=“true“》
《xs:sequence》
《xs:element name=“name“ type=“xs:string“/》
《xs:element name=“orderid“ type=“xs:positiveInteger“/》
《xs:element name=“shipdate“ type=“xs:date“/》
《/xs:sequence》
《/xs:complexType》
《/xs:element》
以上定义对应的Xml
《letter》
Dear Mr.《name》John Smith《/name》.
Your order 《orderid》1032《/orderid》
will be shipped on 《shipdate》2001-07-13《/shipdate》.
《/letter》

更多文章:
another time(another time和other time的区别)
2026年10月11日 05:00







