XML Schema


<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:group name="myGroup">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
<xs:element name="age" type="xs:integer"/>
</xs:sequence>
</xs:group>

<xs:element name="person">
<xs:complexType>
<xs:group ref="myGroup"/>
</xs:complexType>
</xs:element>
</xs:schema>
以上定义了一个组叫myGroup,myGroup中有sequence表示它下面的元素要按照顺序出现。
sequence下面定义了三个元素name birthday age
接着定义了一个element叫person person是一个复合类型 complexType引用了myGroup
那么对应有效的xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\BEYOND\Downloads\test1.xsd">
<name>test</name>
<birthday>1988-03-02</birthday>
<age>26</age>
</person>



<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:attribute name="interest" type="xs:integer"></xs:attribute>

<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="hello" type="xs:string"/>
<xs:element name="world" type="xs:string"/>
</xs:sequence>
<xs:attribute ref="interest"/>
</xs:complexType>
</xs:element>

</xs:schema>
对应的xml是这样:
在缺省的情况下,属性是可选的。
所以说用XMLSpy根据上面的schema生成xml的时候没有interest属性
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\BEYOND\Downloads\test2.xsd" interest="20">
<hello/>
<world/>
</person>



<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:attributeGroup name="myAttributeGroup">
<xs:attribute name="hello" type="xs:string" use="required"/>
<xs:attribute name="world" type="xs:string" use="required"/>
</xs:attributeGroup>

<xs:element name="abcd">
<xs:complexType>
<xs:attributeGroup ref="myAttributeGroup"/>
</xs:complexType>
</xs:element>
</xs:schema>
对应有效的xml:
在缺省的情况下,属性是可选的。
如需规定属性为必选,请使用 "use" 属性 required是必须的意思
<?xml version="1.0" encoding="UTF-8"?>
<abcd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\BEYOND\Downloads\test3.xsd" hello="" world=""/>



<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:simpleType name="myType">
<xs:restriction base="xs:integer">
<xs:enumeration value="5"/>
<xs:enumeration value="7"/>
<xs:enumeration value="9"/>
</xs:restriction>
</xs:simpleType>

<xs:element name="hello" type="myType"/>

</xs:schema>
对应的xml:
<?xml version="1.0" encoding="UTF-8"?>
<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\BEYOND\Downloads\test4.xsd">
5
</hello>

XML SchemaXML模式,是一种基于XML语法的用于定义XML文档结构和数据类型的机制。 ### 语法规则 XML Schema的语法基于XML,需要遵循XML的基本规则。例如一个简单的XML Schema示例如下: ```xml <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="age" type="xs:integer"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> ``` 此示例定义了一个名为`person`的元素,它包含`name`(字符串类型)和`age`(整数类型)两个子元素 [^2]。 ### 与DTD对比优势 在数据类型支持方面,尽管DTD在早期XML应用中发挥了重要作用,但随着XML技术的发展,XML Schema逐渐成为数据类型定义的首选。XSD的强大功能和灵活性使得它能够在广泛的业务场景中满足复杂的数据处理需求 [^3]。 ### 局限性 XML Schema 1.0没有提供任何支持共同约束的功能。在将XML文档加载到内存后,用户有时必须编写Java™或C代码来进行检查,这会损害可维护性,并使架构的互操作性降低。一些用户从其他XML验证语言(例如Schematron和Relax NG)寻求帮助,以获取共约束支持,这使他们本来基于XSD的体系结构变得复杂 [^4]。 ### 使用意义 在实际开发中,理解并熟练应用XML Schema和JAXB,可以极大地提高数据处理的效率和质量。同时,合格XML的使用习惯也能避免在数据交换中可能出现的混淆和错误 [^1]。 ### 使用方法 使用XML Schema时,首先要编写符合其语法规则的模式文件,然后在XML文档中引用该模式文件,以验证XML文档是否符合模式定义。例如在XML文档中可以通过`xsi:schemaLocation`属性来引用对应的Schema文件。 ### 应用场景 XML Schema适用于需要精确控制XML文档结构和数据类型的场景,如企业级应用的数据交换、Web服务的数据传输等,能够确保数据的准确性和一致性,满足复杂的数据处理需求 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值