【发布时间】:2010-12-15 15:35:25
【问题描述】:
我继承了为一些已经存在的 XML 创建模式的任务 - 恕我直言,这并不是最好的。给我带来问题的部分是“扫描结果”元素末尾的元素。
对于“频谱”元素中的数据,我最希望的是将其视为 type="xs:string"。稍后我将以编程方式划分构成字符串中数据的数字对。 (即使数据一开始就结构正确,则不需要此步骤。)
这是一段与我必须使用的类似的 XML 数据...
<scan-result>
<spectrum-index>0</spectrum-index>
<scan-index>2</scan-index>
<time-stamp>5609</time-stamp>
<tic>55510</tic>
<start-mass>22.0</start-mass>
<stop-mass>71.0</stop-mass>
<spectrum count="5">30,11352;31,360;32,16634;45,1161;46,26003</spectrum>
</scan-result>
问题是,我似乎无法为具有“count”属性并允许我将“spectrum”元素类型定义为“xs:string”的“spectrum”元素找到有效的定义。
我想要的是如下内容:
<xs:complexType name="ctypScanResult">
<xs:sequence>
<xs:element name="spectrum-index" type="xs:integer"/>
<xs:element name="scan-index" type="xs:integer"/>
<xs:element name="time-stamp" type="xs:integer"/>
<xs:element name="tic" type="xs:integer"/>
<xs:element name="start-mass" type="xs:float"/>
<xs:element name="stop-mass" type="xs:float"/>
<xs:element name="spectrum" type="xs:string">
<xs:complexType>
<xs:attribute name="count" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="count" type="xs:integer"/>
</xs:complexType>
问题是我可以将“spectrum”元素的类型定义为“xs:string”异或我可以在“spectrum”元素中定义匿名“xs:complexType”,这样我就可以插入“count” ' 属性。但我需要能够同时表达两者。
鉴于我在收到 XML 时有点卡住,是否有允许我描述这些数据的架构定义?
对不起,这很长,但感谢所有回复的人,
报警器
跟进:我知道为什么会出现错误...
引自 W3C:
3.3.3 元素声明的 XML 表示的约束 Schema 表示约束:元素声明表示 OK
除了模式对元素信息项施加的条件之外:以下所有条件都必须为真: 1 default 和 fixed 不能同时存在。 2 如果项目的父项不是 ,则以下所有条件都必须为真: 2.1 ref 或 name 之一必须存在,但不能同时存在。 2.2 如果 ref 存在,那么所有 , , , , , nillable, default, fixed, form, block 和 type 都必须不存在,即除了 ref 之外,只允许 minOccurs、maxOccurs、id 以及 . 3 类型和其中一个或是互斥的。 4 相应的粒子和/或元素声明必须满足元素声明架构组件的约束(§3.3.6)和粒子架构组件的约束(§3.9.6)中规定的条件。
但我仍处于与之前相同的状态...我如何才能真正完成与我的目标相似的事情?
谢谢,
报警器
【问题讨论】:
标签: xsd