请XML高手帮忙啊
本人毕业设计要用到XML,但是自己就是个菜鸟,以前没接触过,所以不知道该怎么开始。一般创建XML文档的步骤和使用到的相关工具是怎么样的阿?
比如是写定义XML-schema,然后写XML-Dokument,最后写一段代码吗?
我现在在VC里面看到是可以创建XML-schema和XML-Dokument的,但是检验XML-Dokument时候总是说找不到相关的XML-schema,可是明明我在文档的开头就给了相关的路径了阿,这是怎么回事啊?
其实还有好多问题,就先问这些吧,以后有了新问题,再来讨教,望各位前辈们给与帮助,小女子在此感激不尽!!:( :( 还要补充一点,如果有相关资料什么的,也希望能沾点光,发到我邮箱里面,非常感谢!或者加我的MSN,大家一起讨论,共同进步啊:) zhoulifei88@hotmail.com 把XML贴上来可能更有助于解决问题。 一般情况下schema有两种方式指定,public和system。如果使用public,则一般是以url形式出现;而如果是system,则一般都是以具体文件名的形式出现,不跟路径名,这种情况下多要求schema文件本身位于应用程序的搜索路径内,只有这样才能最大限度的实现与public方式类似的灵活性,而不至于一旦schema发生移动就要修改所有的xml文件。 而为了解决public形式指定的schema无法指定本地文件存在的问题,相当一部分应用程序、应用服务器和xml数据库,采用了xml schema注册/映射/绑定的机制,使public id和本地资源对应起来,从而绕过了需要访问internet所可能引发的安全,性能甚至可行性问题。 最少先学一下最简单html,然后转入DTD 我现在是在用xml-schema来定义程序之间通讯的报文的结构,然后为每个程序写个XML-Dokument来描述他们的接口。
现在我在定义报文结构的时候遇到一个问题,在定义数据的时候,有可能数据只是单纯的struct,也有可能是简单类型的数据和struct并存,所以我做了以下的定义,可是在Visual studio里的XML-Dokument的转换到Daten形式的时候,说我的形式没错,但是dataField由于在两个地方出现,所以无法显示。这个应该怎么办啊?
这是我定义的内容:
<xsd:element name="dataField">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="valueMargin" type="xsd:string" />
<xsd:attribute name="Meaning" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<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" />
XML中:
<data type="AckDaten">
<dataField name="MsgType" type="ShortNat" valueMargin="0..60" meaning="message type" />
<structure type="tSboNdA1">
<dataField name="a1" type="short" valueMargin="0..60" meaning="a1" />
<dataField name="a2" type="short" valueMargin="0..60" meaning="a2" />
</structure>
</data>
形式没错,但是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>
我那个应该是structure里面还有可能除了简单数据类型之外还有structure的,这样怎么办啊 递归的元素定义并不是错误,只是不推荐而已,除了实现上可能遇到的问题,一些解析器和编辑器不能很好的解释递归元素定义也是一个原因。
XML-Tools in Visual Studio 2005
An Introduction to the XML Tools in Visual Studio 2005
Visual Studio 2005 XML tools - video demo
看来功能还是不错的,建议这样试一下,做一个具有多层structure嵌套的xml文件,使用反向推导功能,看看visual studio生成的schema是什么样子的。
可是在Visual studio里的XML-Dokument的转换到Daten形式的时候,说我的形式没错,但是dataField由于在两个地方出现,所以无法显示。
实在是没有办法想得出来这个错误是什么样子的,具体什么错误信息。$NO$ $NO$
页:
[1]
2