以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  [原创]刚刚写的一个Schema但是有点错  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=22761)


--  作者:hujingang
--  发布时间:10/5/2005 3:11:00 PM

--  [原创]刚刚写的一个Schema但是有点错


刚刚写的一个Schema但是有点错
在XMLSPY2005中说是有错但是可以用IE打开,也没有什么错误,帮忙看看是怎么回事
谢谢!

--  作者:孔南
--  发布时间:10/22/2005 7:34:00 PM

--  
如果想让大家帮帮助您, 最好把代码直接贴出来.
当然, 贴出来以后还提供下载就更好了... :)

简述: 错误在 xml 里面, 而非在 schema 里面.
1. 从 Schema/WSDL 结构图中可以看到, onerecording 后面跟了一个"队列", 里面的元素是不可缺少的, 所以, 您要为您第一个出错的地方加上 <comment />, 下文已标明.
2. 从 Schema/WSDL Facets Enumeration 中可以看到, media 是一个"枚举", 里面的元素是不可逾越的, 所以, 您要在您第二个出错的地方把多出来的空格去掉, 下文已标明.

我是新手, 但我想说您几句:
错误很基本, 看图很明了! 拿着 xmlspy 却没好好研究, altova 很遗憾!


<?xml version="1.0" encoding="UTF-8"?>
<recordings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="recording.xsd">
    <recording media="CD" quality="8">
        <title>Pandit Ravi Shankar</title>
        <performers>
            <performer>Ravi Shankar</performer>
            <performer>jin</performer>
        </performers>
        <comments>老弟,忘了我不是?不加 comments 是不行Di~~~</comments>
    </recording>
    <!--还有后面这行的 LP 要短一点啦~你原来有空格-->
    <recording media="LP" quality="6">
        <title>The title Bach Book</title>
        <performers>
            <performer>SoftGuard</performer>
        </performers>
        <comments>
        There in s scratch at the beginning os side 2.
    </comments>
    </recording>
    <recording media="tape" quality="5">
        <title>Bach English</title>
        <performers>
            <performer>Jingang</performer>
        </performers>
        <comments>An  exceptionally good performance</comments>
    </recording>
</recordings>


--  作者:孔南
--  发布时间:10/22/2005 7:44:00 PM

--  
反之, 如果您保留您原有的 xml,
而想修改 schema 以适应 xml,
则这样做:
1. 修改 comments 元素, 添加 minOccurs="0" 以标明 <comments /> 可有可无.
2. 修改 attrmedia 简单类型的枚举, 将 "IP" 修改为 "IP " [注意后者后面还有个空格].

成品预览!
以下内容为程序代码:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="recordings" type="recordinglist"/>
    <xs:simpleType name="attrmedia">
        <xs:restriction base="xs:string">
            <xs:enumeration value="CD"/>
            <!--下一行的 LP 被我添加了一个空格, 就能适应您的 xml 啦!-->
            <xs:enumeration value="LP "/>
            <xs:enumeration value="tape"/>
            <!--这里定义的是media属性的类型-->
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="attrquality">
        <xs:restriction base="xs:integer">
            <xs:minInclusive value="0"/>
            <xs:maxInclusive value="10"/>
        </xs:restriction>
        <!--这里定义的是quality属性的类型-->
    </xs:simpleType>
    <xs:complexType name="performerlist">
        <xs:sequence>
            <xs:element name="performer" type="xs:string" maxOccurs="unbounded"/>
        </xs:sequence>
        <!--这里定义的是performer元素的复杂类型-->
    </xs:complexType>
    <xs:complexType name="onerecording">
        <xs:sequence>
            <xs:element name="title" type="xs:string"/>
            <xs:element name="performers" type="performerlist"/>
            <!--下一行的 comments 被我改啦! 添个 minOccurs="0" 就好啦!-->
            <xs:element name="comments" type="xs:string" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="media" type="attrmedia" use="required"/>
        <xs:attribute name="quality" type="attrquality" use="required"/>
        <!--这里定义的是cording元素的复杂类型-->
    </xs:complexType>
    <xs:complexType name="recordinglist">
        <xs:sequence>
            <xs:element name="recording" type="onerecording" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <!-- 这里定义XML文件的root元素-->
    </xs:complexType>
</xs:schema>


--  作者:孔南
--  发布时间:10/22/2005 7:48:00 PM

--  
最后再次声明: 我是新手, 今天刚开始学 schema,
若说的有什么不对的, 或不完善的, 还请大家不吝赐教,
在下万分感谢!
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
3,355.469ms