我对我看到的关于如何声明定义简单类型的不同例子有点不确定。从我在两个网站上看到的语法描述是一样的,但例子却不同。
在这两个网站上,我看到的语法描述都是一样的,但是例子不同。https:/www.w3schools.comxmlel_simpletype.asp 我明白了
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
但是在 https:/docs.microsoft.comen-usprevious-versionsdotnetnetframework-4.0ms256050(v%3Dvs.100) 他们使用的。
<xs:simpleType name="freezeboilrangeInteger">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
这两种方式有什么不同吗?如果是,有什么不同?如果它们是一样的,哪一种应该被使用是最好的实践?
第一个例子是一个xsd-元素,它以嵌入的方式包含了它的类型定义。
第二个例子只包含一个类型定义(xs:simpleType),没有引用它的元素。但是一个没有元素或属性引用的类型定义是没有真正意义的。
因此,为了使两个例子具有可比性(具有相同的结果),你需要在第二个例子中添加一个引用类型定义的元素。
<xs:element name="age" type="tns:freezeboilrangeInteger"/>
<xs:simpleType name="freezeboilrangeInteger">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
从这两个选项中(嵌入式或外部类型定义),后一个更可取,因为可以重复使用。
/更新 (由于评论)
我已经建立了一个XSD 此处,其中包含了这三种方法(嵌入类型定义、引用类型定义和引用元素),因为我觉得在网上玩玩这样的xsd2xml生成器是学习XSD的最好方法。出发点是mysequence。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="mytns" xmlns:tns="mytns">
<xs:element name="agetest">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="100" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:simpleType name="freezeboilrangeInteger">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="100" />
</xs:restriction>
</xs:simpleType>
<xs:element name="mysequence">
<xs:complexType>
<xs:sequence>
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="100" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="age2" type="tns:freezeboilrangeInteger" />
<xs:element name="age3" ref="tns:agetest" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
生成以下XML结果示例。
<?xml version="1.0" encoding="utf-8"?>
<mysequence xmlns="mytns">
<age>83</age>
<age2>86</age2>
<nsA:agetest xmlns:nsA="mytns">18</nsA:agetest>
</mysequence>