以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  [求助]xs:id 问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=39855)


--  作者:liaoco
--  发布时间:11/9/2006 8:06:00 PM

--  [求助]xs:id 问题
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <!--科目分数定义-->
 <xs:complexType name="subject">
  <xs:simpleContent>
   <xs:extension base="score">
    <xs:attribute name="名称" type="subname" use="required"/>
   </xs:extension>
  </xs:simpleContent>
 </xs:complexType>
 <!-- 科目名称约束 -->
 <xs:simpleType name="subname">
  <xs:restriction base="xs:id">
   <xs:enumeration value="语文"/>
   <xs:enumeration value="数学"/>
   <xs:enumeration value="英语"/>
  </xs:restriction>
 </xs:simpleType>

 <xs:simpleType name="subname">
  <xs:restriction base="xs:id">
   <xs:enumeration value="语文"/>
   <xs:enumeration value="数学"/>
   <xs:enumeration value="英语"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:element name="科目" type="subject"/>
 <!-- 分数定义 -->
 <xs:simpleType name="score">
  <xs:restriction base="xs:integer">
   <xs:maxInclusive value="150"/>
   <xs:minInclusive value="0"/>
  </xs:restriction>
 </xs:simpleType>
 <!-- 成绩定义 -->
 <xs:complexType name="grade">
  <xs:sequence minOccurs="3" maxOccurs="3">
   <xs:element ref="科目"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="成绩" type="grade"/>
 <!-- 性别定义 -->
 <xs:simpleType name="gender">
  <xs:restriction base="xs:string">
   <xs:enumeration value="男"/>
   <xs:enumeration value="女"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:element name="性别" type="gender"/>
 <!-- 年龄定义 -->
 <xs:simpleType name="age">
  <xs:restriction base="xs:integer">
   <xs:minInclusive value="7"/>
   <xs:maxInclusive value="40"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:element name="年龄" type="age"/>
 <!--学生定义 -->
 <xs:complexType name="student">
  <xs:sequence>
   <xs:element name="姓名" type="xs:string"/>
   <xs:element ref="性别"/>
   <xs:element ref="年龄"/>
   <xs:element ref="成绩"/>
  </xs:sequence>
  <xs:attribute name="学号" type="xs:ID" use="required"/>
 </xs:complexType>
 <xs:element name="学生" type="student"/>
 <!-- 学生列表 -->
 <xs:complexType name="students">
  <xs:sequence maxOccurs="unbounded">
   <xs:element ref="学生"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="学生资料" type="students"/>
</xs:schema>



这时是在安装 xmlspy 2005 下可通过,  可达到这里科目的属性 名称不会重复

<学生资料 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="students.xsd">
 <学生 学号="st001">
  <姓名>黄完善</姓名>
  <性别>女</性别>
  <年龄>20</年龄> 
  <成绩>
   <科目 名称="语文">70</科目>
   <科目 名称="数学">55</科目>
   <科目 名称="英语">30</科目>
  </成绩>
 </学生>
 <学生 学号="st002">
  <姓名>黄完善</姓名>
  <性别>女</性别>
  <年龄>20</年龄> 
  <成绩>
   <科目 名称="语文">70</科目>
   <科目 名称="数学">55</科目>
   <科目 名称="英语">30</科目>
  </成绩>
 </学生>
</学生资料>
但是在 xmlspy2006 中 xs:id 用 xs:ID代替后
在第二个学生的的成绩--<科目 名称="语文">70</科目> 这里会提示重复出现了,

有没什么内置类型可以代替啊?


--  作者:gemingke
--  发布时间:11/10/2006 12:02:00 PM

--  
试试token
--  作者:liaoco
--  发布时间:11/11/2006 8:22:00 PM

--  
<xs:simpleType name="subname">
  <xs:restriction base="xs:id">
   <xs:enumeration value="语文"/>
   <xs:enumeration value="数学"/>
   <xs:enumeration value="英语"/>
  </xs:restriction>
</xs:simpleType>

在xmlspy5中 是正确的, 可以达到我需要的目的, 一个学生会有多门成绩, 且 成绩的子元素<科目 中的 名称不会重复.

xmlSPY5 中, xs:id 应该是该结点的父结点中只能出现一次 就象下面的成绩结点中只能有一个名称为"英语" 的科目结点. 但另一个学生中也可以有一个名称为"英语" 的科目结点.
<学生 学号="st002">
  <姓名>黄完善</姓名>
  <性别>女</性别>
  <年龄>20</年龄>
  <成绩>
   <科目 名称="语文">70</科目>
   <科目 名称="数学">55</科目>
   <科目 名称="英语">30</科目>
  </成绩>
</学生>
但是在xmlSPY 2005以上版本中. xs:id 必须实用xs:ID 代替, 且意义成为了在整个文档中
<科目 名称="英语">30</科目> 名称为"英语"的科目元素只能出现一次.


有内置的类型可以满足上面提到的 xs:id 在xmlspy2004中的功能??


--  作者:liaoco
--  发布时间:11/11/2006 8:26:00 PM

--  
以下是引用gemingke在2006-11-10 12:02:00的发言:
试试token


token 应该达不到这效果..
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
5,419.922ms