请问一个schema怎么写 (200分)

  • 主题发起人 主题发起人 hyzou
  • 开始时间 开始时间
H

hyzou

Unregistered / Unconfirmed
GUEST, unregistred user!
xml局部如下:
<printObject objtype="point">
<xStart>100</xStart>
<yStart>100</yStart>
</printObject>
<printObject objtype="retangle">
<xStart>100</xStart>
<yStart>100</yStart>
<width>100</width>
<height>100</height>
</printObject>
<printObject objtype="circle">
<xStart>100</xStart>
<yStart>100</yStart>
<r>50</r>
</printObject>
所有节点名称是一样的-printObject,但根据属性objtype的不同,每个printObject的
内部结构也不同,请问这个schema该怎么写?
 
使用NameSpace
 
跟没说一样,只会说废话
 
你可以考虑这样写:
<schema xmlns="http://www.w3c.org/2001/SCHema">
<element name="printObject" type="printObjectType"/>
<complexType name="printObjectType">
<element name="xStart" type="positveinteger"/>
<element name="yStart" type="positveinteger"/>
<element name="width" type="positveinteger" minOccurs="0"/>
<element name="height" type="positveinteger" minOccurs="0"/>
<element name="r" type="positveinteger" minOccurs="0"/>
<attributename name="objtype" type="string"/>
</complexType>
</schema>
抛砖引玉啦!
 
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="height" type="xs:positiveInteger"/>
<xs:element name="object">
<xs:complexType>
<xs:sequence>
<xs:element ref="printObject" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="printObject">
<xs:complexType>
<xs:sequence>
<xs:element ref="xStart"/>
<xs:element ref="yStart"/>
<xs:element ref="width" minOccurs="0"/>
<xs:element ref="height" minOccurs="0"/>
<xs:element ref="r" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="objtype" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="circle"/>
<xs:enumeration value="point"/>
<xs:enumeration value="retangle"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="r" type="xs:positiveInteger"/>
<xs:element name="width" type="xs:positiveInteger"/>
<xs:element name="xStart" type="xs:positiveInteger"/>
<xs:element name="yStart" type="xs:positiveInteger"/>
</xs:schema>
 
我的Object设为root了。
 
不行,两种方法都不能为每种类型作校验,
比如点仍然可以写矩形的属性
 
我感觉你不应该用属性来约束它的元素,如果是这样为什么不定义成不同的元素呢,
如Point,Circle……?
 
那你就将点、矩形和园定义成不同的元素不就行了!
 
因为他们属于同一个基类
 
这个就不老大家费心了
把objtype拿下来变成element同样可以解决问题,这个我早就解决了
 
后退
顶部