|
形式没错,但是dataField由于在两个地方出现,所以无法显示
没用过VC里面的XML开发功能,不清楚。
但是上面的schema定义涉及到了一个比较常见的schema设计问题,就是元素的递归定义。
<xsd:complexType name="dataType">
<xsd:sequence>
<xsd:element ref="dataField" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="structure" type="dataType" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="type" type="xsd:string" />
</xsd:complexType>
<xsd:element name="data" type="dataType" />
不知道VC的报错和这个有没有关系,纯属猜测,见谅
一般来讲,是不推荐做递归的元素定义的,除非是非常泛化或者通用性要求很高的应用,比如xhtml,schema。其实可以看到上面的schema也没怎么用递归,而是通过complexType元素和element的ref属性实现了元素定义的扁平化。
不知道你毕业设计的要求,那个structure是不是还会再包含structure自身,不过如果不是一定要递归形式的定义的话,倒是有几种办法可以试试。
1、将structure定义为一个只包含datafield的单独元素
DTD看起来应该是这个样子的:
<!ELEMENT dataType (datafield*,structure*) >
<!ELEMENT structure (datafield*) >
2、修改dataType,使他不再包含直接包含datafield,定义一个只允许包含一个datafield的structure
DTD看起来应该是这个样子的:
<!ELEMENT dataType (singlestructure*,structure*) >
<!ELEMENT singlestructure (datafield?) >
<!ELEMENT structure (datafield*) >
3、修改dataType,使他不再包含直接包含datafield,修改structure的定义,增加一个count属性(其实编程检查也可以,就是不知道将来应用程序有没有解析器的具体要求,毕竟内存资源有限的时候,要求用dom方式获取子元素个数有资源不足的风险,尤其是datafield可能比较多的时候)。
DTD看起来应该是这个样子的:
<!ELEMENT dataType (structure*) >
<!ELEMENT structure (datafield*) >
<!ATTLIST structure count CDATA #IMPLIED> |
评分
-
1
查看全部评分
-
|