`

xsd

 
阅读更多

(作者wxb_nudt,首发于中国XML论坛http://bbs.xml.org.cn/list.asp?boardid=28

关于XML Schema中的key和unique的概念很多Schema教程里面讲过,可惜网上大部分教程里面的例子是错误的,而且并没有给出完整清晰的解释,我查找了Schema的规范并写出了相应了例子,理清了这两个概念,希望对大家有所帮助。XML Schema规范来自于
http://www.w3.org/TR/xmlschema-0/

1.unique的定义和例子
规范中对于unique是这样定义的:XML Schema enables us to indicate that any attribute or element value must be unique within a certain scope. To indicate that one particular attribute or element value is unique, we use the unique element first to "select" a set of elements, and then to identify the attribute or element "field" relative to each selected element that has to be unique within the scope of the set of selected elements.
译文:XML Schema允许我们指出任意的属性或者元素值在某个范围内是唯一的。为了指出这个属性或者元素值的唯一性,我们使用了unique元素,它首先“选择”一组元素,然后指出这个属性或者元素的“域”在上一步所选择出的元素集合中是唯一的。
例子Schema:UniqueTest.xsd
<?xml version="1.0" encoding="GB2312"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="Person">
  <xs:annotation>
   <xs:documentation>Comment describing your root element</xs:documentation>
  </xs:annotation>
  <xs:complexType>
   <xs:sequence>
    <xs:element name="Name" type="xs:string" maxOccurs="unbounded"/>
    <xs:element name="Id" type="xs:integer" maxOccurs="unbounded">
    </xs:element>
   </xs:sequence>
  </xs:complexType>
  <xs:unique name="IdUnique">
   <xs:selector xpath=".//Id"/>
   <xs:field xpath="."/>
  </xs:unique>
 </xs:element>
</xs:schema>

例子XML:UniqueTest.xml
<?xml version="1.0" encoding="GB2312"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="UniqueTest.xsd">
<Name>wxb_nudt</Name>
 <Id>1001</Id>
 <Id>1002</Id>
 <Id>1001</Id> <!--这儿就会报错,因为它的值和第一个Id重复了,并不是唯一的-->
 <Id>1004</Id>
</Person>

2.key的定义和例子
规范中是通过一个较长的例子来说明key和keyref的定义,归纳起来可以做如下定义:XML Schema可以通过将一个元素或者属性定义为一个key,这个key必须是unique的,这个key可以在XML文档中的其他部分通过keyref进行引用,keyref的值一定取自于key的某一个值。key的概念很类似于数据库中的外键。
key的具体定义方法很类似于unique的定义方法,首先“选择”一组元素,然后指出某个属性或者元素的“域”就是一个key。
而keyref与key的定义完全相似,唯一的区别是加了一个refer属性,这个refer属性指出了key的名字,具体例子如下:
例子schema:KeyExam.xsd
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by wxb (nudt) -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xsd:element name="rootElement">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="elementOne" maxOccurs="unbounded">
     <xsd:complexType>
      <xsd:attribute name="elementOneKey" type="xsd:integer"/>
      <xsd:attribute name="elementOneDesc" type="xsd:string"/>
     </xsd:complexType>
    </xsd:element>
    <xsd:element name="elementTwo" maxOccurs="unbounded">
     <xsd:complexType>
      <xsd:attribute name="elementTwoKey" type="xsd:integer"/>
      <xsd:attribute name="elementOneKey" type="xsd:string"/>
      <xsd:attribute name="elementTwoDesc" type="xsd:string"/>
     </xsd:complexType>
    </xsd:element>
   </xsd:sequence>
  </xsd:complexType>
  <xsd:key name="elementOnePK">
   <xsd:selector xpath=".//elementOne"/>
   <xsd:field xpath="@elementOneDesc"/>
  </xsd:key>
  <xsd:keyref name="elementOneFK" refer="elementOnePK">
   <xsd:selector xpath=".//elementTwo"/>
   <xsd:field xpath="@elementTwoDesc"/>
  </xsd:keyref>
  <xsd:unique name="EOneKeyU" xsi:type="xsd:integer">
   <xsd:selector xpath=".//elementOne"/>
   <xsd:field xpath="@elementOneKey"/>
  </xsd:unique>
 </xsd:element>
</xsd:schema>

例子xml:KeyExam.xml
<?xml version="1.0" encoding="UTF-8"?>
<rootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="KeyExam.xsd">
 <elementOne elementOneKey="1" elementOneDesc="a"/>
 <elementOne elementOneKey="2" elementOneDesc="b"/>
 <elementOne elementOneKey="3" elementOneDesc="c"/>
 <elementOne elementOneKey="4" elementOneDesc="d"/>
 <elementTwo elementOneKey="5" elementTwoDesc="e" elementTwoKey="78"/>
 <!--上面的elementTwoDesc作为elementOneDesc的一个keyref,它必须取值于上面的4个key值之一,这里它的值"e"因为不是取值于"a","b","c","d",所以会报错-->
</rootElement>

分享到:
评论

相关推荐

    xsd文件 xsd1.4,xsd2.0,xsd3.0

    XML Schema Definition (XSD) 文件是用于定义XML文档结构和数据类型的规范。XSD1.4、XSD2.0 和 XSD3.0 是XML Schema语言的不同版本,它们为XML文档提供了严谨的验证框架,确保数据的一致性和正确性。 ### XSD1.4 ...

    XML生成XSD的方法

    ### XML生成XSD的方法 #### 一、引言 在处理结构化数据时,XML(可扩展标记语言)因其灵活性而被广泛采用。为了确保XML文档遵循特定的格式和规则,通常会用到XSD(XML Schema Definition)来定义XML文档的结构。...

    xsd生成xml工具

    在IT行业中,XML(eXtensible Markup Language)是一种用于标记数据的标准格式,而XSD(XML Schema Definition)则是用于定义XML文档结构和数据类型的规范。"xsd生成xml工具"是一个实用程序,它允许开发者根据XSD...

    java生成xsd,xml示例

    在Java开发中,XML(可扩展标记语言)和XSD(XML Schema定义)是常见的数据交换格式和技术。XML用于结构化数据的存储和传输,而XSD则为XML文档提供了语义验证的规则。本教程将详细介绍如何在Java环境中生成XML和XSD...

    dubbo xsd的支持

    "dubbo.xsd"文件是Dubbo框架中用于XML配置文件解析的重要组成部分,本文将深入探讨其作用和相关知识点。 首先,xsd(XML Schema Definition)文件是XML的一种规范,用于定义XML文档的结构和数据类型。在Java世界中...

    dubbo的.xsd文件分享

    《Dubbo的.xsd文件详解》 Dubbo作为一款高性能、轻量级的Java开源服务框架,其在设计和实现过程中广泛使用了XML Schema(简称XSD)来定义服务接口和配置规范。XSD文件是XML文档的模式定义,它为XML提供了结构约束和...

    XSD使用dom4j校验XML

    在IT行业中,XML(eXtensible Markup Language)是一种用于数据交换的标准格式,而XSD(XML Schema Definition)则是用于定义XML文档结构和数据类型的规范。DOM4J是Java环境中一个强大、灵活的XML处理库,它提供了...

    xsd解析实例创建表结构

    在IT行业中,XML Schema Definition(XSD)是一种用于定义XML文档结构和数据类型的规范。它为XML文件提供了严格的语法规则,确保了数据的一致性和有效性。本篇将深入探讨如何利用XSD解析实例来创建数据库表结构。 ...

    自动生成xsd所需的jar包

    XSD(XML Schema Definition)则是用来规范和验证XML文档结构的一种语言,确保XML文件的数据符合特定的规则。XSD文件通过定义元素、属性、数据类型等来约束XML文档,确保数据的准确性和一致性。 标题提到的“自动...

    cxf.apache.org/schemas/(jaxrs.xsd、jaxrs.xsd、core.xsd)文件下载

    在描述中提到的`jaxrs.xsd`、`jaxrs.xsd`和`core.xsd`是XML Schema Definition (XSD)文件,它们定义了CXF中JAX-RS相关元素的结构和约束。这些XSD文件对于理解CXF配置文件的结构至关重要,因为它们包含了所有可用的...

    xml文件转xsd文件

    XSD(XML Schema Definition)文件则是一种规范,用于定义XML文档的结构和数据类型,为XML提供了形式化的语法规则。将XML文件转换为XSD文件,主要是为了更好地管理和验证XML文档的结构,确保数据的一致性和准确性,...

    根据xsd批量生成java类

    根据xsd批量生成java类,觉得很方便也很酷。但是有时候xsd生成的java类中含有汉字,结果总是有些问题。 可是xjc命令参数又没有encoding参数之类的。在网上搜了一通,忽然发现了一个好东东:xjc是由...

    JAXB 利用xsd文件生成java类

    在Java开发中,JAXB提供了一种方便的方式,允许开发者通过XML Schema (XSD) 文件来生成对应的Java类,从而简化XML处理的工作流程。 1. **XML Schema (XSD) 文件**: - XML Schema是一种W3C标准,用于定义XML文档的...

    castor1.4 xsd生成java

    在XML Schema(XSD)广泛应用于定义XML数据结构的今天,Castor提供了一个方便的方法,将XSD文件自动转化为Java类,使得开发者能够更轻松地处理XML数据。以下是关于"Castor 1.4 xsd生成java"的相关知识点: 1. **...

    spring-beans-3.0.xsd

    《Spring框架中的beans配置文件详解——以spring-beans-3.0.xsd和3.1.xsd为例》 在Spring框架中,`spring-beans`是核心组件之一,它负责管理对象的生命周期和依赖关系。`spring-beans`的配置文件通常以`.xsd`为后缀...

    onvif网站下载的原wsdl和xsd文件

    该标准主要基于Web服务(Web Services)技术,其中WS-DL(Web Services Description Language)和XSD(XML Schema Definition)文件扮演着核心角色。 **WS-DL(Web Services Description Language)** WS-DL是一种...

    IEC61131-10 XSD

    《IEC61131-10 XSD:工业自动化领域的编程标准解析》 IEC 61131-10 Ed1.0 是国际电工委员会(IEC)制定的一项标准,它规范了工业控制系统的编程语言,旨在提高编程的互操作性和可移植性。XSD(XML Schema ...

    spring3.0的xsd文件.rar

    XSD(XML Schema Definition)文件在Spring框架中扮演着核心角色,它们定义了Spring配置文件的结构和规则,使得XML配置更加规范和易于理解。在这个压缩包中,我们很可能是找到了Spring 3.0版本相关的XSD文件集合,...

    dubbo.xsd文件

    &lt;xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:tool="http://www.springframework.org/schema/tool" targetNamespace=...

    xsd可视化操作

    XML Schema Definition (XSD) 是一种用于定义XML文档结构的语言,它规范了XML文档的元素、属性、数据类型以及它们之间的关系。XSD可视化操作是将这些复杂的XSD定义通过图形化界面展示出来,以便于开发者更好地理解和...

Global site tag (gtag.js) - Google Analytics