以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  xsd定义的问题,向高手请教  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=74529)


--  作者:kingge168
--  发布时间:4/27/2009 12:07:00 PM

--  xsd定义的问题,向高手请教
我定义了一个XSD文件如下:ForMeXMLSchema.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ForMeXMLSchema"
    targetNamespace="http://tempuri.org/ForMeXMLSchema.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/ForMeXMLSchema.xsd"
    xmlns:mstns="http://tempuri.org/ForMeXMLSchema.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:element name="school">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="students">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="student" minOccurs="1" maxOccurs="unbounded"></xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="courses">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="course" minOccurs="1" maxOccurs="unbounded"></xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="sces">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="sc" minOccurs ="1" maxOccurs="unbounded"></xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
    <xs:key name="studentID">
      <xs:selector xpath="students/student"></xs:selector>
      <xs:field xpath="sno"></xs:field>
    </xs:key>
    <xs:key name="courseID">
      <xs:selector xpath="courses/course"></xs:selector>
      <xs:field xpath="cno"></xs:field>
    </xs:key>
    <xs:keyref name="courseRefID" refer="courseID">
      <xs:selector xpath="courses/course"></xs:selector>
      <xs:field xpath="cpno"></xs:field>
    </xs:keyref>
    <xs:key name="scID">
      <xs:selector xpath="sces/sc"></xs:selector>
      <xs:field xpath="sno"></xs:field>
      <xs:field xpath="cno"></xs:field>
    </xs:key>
    <xs:keyref name="scRefKey1" refer="studentID">
      <xs:selector xpath="sces/sc"></xs:selector>
      <xs:field xpath="sno"></xs:field>
    </xs:keyref>
    <xs:keyref name="scRefKey2" refer="courseID">
      <xs:selector xpath="sces/sc"></xs:selector>
      <xs:field xpath="cno"></xs:field>
    </xs:keyref>
  </xs:element>


  <xs:element name="sno">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[0-9]{8}"></xs:pattern>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

  <xs:element name="sname" type="xs:string"></xs:element>

  <xs:element name="ssex">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="男|女"></xs:pattern>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

  <xs:element name="sage">
    <xs:simpleType>
      <xs:restriction base="xs:integer">
        <xs:maxInclusive value="28"></xs:maxInclusive>
        <xs:minInclusive value="12"></xs:minInclusive>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

  <xs:element name="ssdept" type="xs:string"></xs:element>

  <xs:element name="cno">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[0-9]{5}"></xs:pattern>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

  <xs:element name="cname" type="xs:string"></xs:element>
  <xs:element name="cpno">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[0-9]{5}"></xs:pattern>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

  <xs:element name="ccredit">
    <xs:simpleType>
      <xs:restriction base="xs:integer">
        <xs:maxInclusive value="8"></xs:maxInclusive>
        <xs:minInclusive value="1"></xs:minInclusive>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="grade">
    <xs:simpleType>
      <xs:restriction base="xs:integer">
        <xs:maxInclusive value="100"></xs:maxInclusive>
        <xs:minInclusive value="0"></xs:minInclusive>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

  <xs:element name="student">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="sno"></xs:element>
        <xs:element ref="sname"></xs:element>
        <xs:element ref="ssex"></xs:element>
        <xs:element ref="sage"></xs:element>
        <xs:element ref="ssdept"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="course">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="cno"></xs:element>
        <xs:element ref="cname"></xs:element>
        <xs:element ref="cpno" minOccurs="0"></xs:element>
        <xs:element ref="ccredit"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="sc">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="sno"></xs:element>
        <xs:element ref="cno"></xs:element>
        <xs:element ref="grade"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
我的xml文件:school.xml
<?xml version="1.0" encoding="utf-8" ?>
<school xmlns="http://tempuri.org/ForMeXMLSchema.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema"
>
  <students>
    <student>
      <sno>05138001</sno>
      <sname>A</sname>
      <ssex>男</ssex>
      <sage>20</sage>
      <ssdept>IS</ssdept>
    </student>
    <student>
      <sno>05108001</sno>
      <sname>B</sname>
      <ssex>女</ssex>
      <sage>21</sage>
      <ssdept>IS</ssdept>
    </student>
    <student>
      <sno>05138003</sno>
      <sname>C</sname>
      <ssex>女</ssex>
      <sage>22</sage>
      <ssdept>CH</ssdept>
    </student>
  </students>
  <courses>
    <course>
      <cno>00001</cno>
      <cname> 数据库</cname>
      <ccredit>4</ccredit>
    </course>
  </courses>
  <sces>
    <sc>
      <sno>05138001</sno>
      <cno>00001</cno>
      <grade>80</grade>
    </sc>
  </sces>
</school>
为什么我定义的键值没验证?也就是说为什么可以出现2个sno为05138001的student同时存在呢?我想实现的功能是这样的功能如下:
             student主键是sno
             course主键是cno
             course外键cpno
             sc联合主键(sno,cno)
             sc外键sno和cno
请问我上面的xsd应该如何修改?


--  作者:hexun831012
--  发布时间:4/28/2009 6:42:00 PM

--  
呵呵
一看你的文档就知道是用VS生成的~~~
难道楼主不知道主键是MS特有的,而非标准的
所以标准的解析器毫无疑问会忽略该特性,.NET也不例外
--  作者:kingge168
--  发布时间:4/28/2009 10:22:00 PM

--  你的想法有问题
你去http://www.w3school.com.cnl看看吧,不支持你的发言!
--  作者:hexun831012
--  发布时间:4/28/2009 10:43:00 PM

--  
http://www.w3school.com.cn
为什么不是http://www.w3schools.com/
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
57.617ms