我们在编写正确的(有效的)xsd时遇到了一些问题: - xsd应在http://www.w3.org/2001/03/webdata/xsv上验证 - 应该可以将模式添加到sql server架构集合(CREATE XML SCHEMA COLLECTION test AS'[xsd here]' - 我们需要在xsd
中指定'title'属性值这是(一种极为简化的)XML结构:
1)这是我们的第一个版本(显然无效):你不能有2个名称为'input'的元素是不同的。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:element name="test">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="input">
<xsd:complexType>
<xsd:attribute name="title" fixed="Pretty title" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="input">
<xsd:complexType>
<xsd:attribute name="title" fixed="Different title" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
2)第二次尝试:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:element name="test" type="Test"/>
<xsd:complexType name="input1">
<xsd:attribute name="title" fixed="Pretty title" use="required"/>
</xsd:complexType>
<xsd:complexType name="input2">
<xsd:attribute name="title" fixed="Different title" use="required"/>
</xsd:complexType>
<xsd:complexType name="Test">
<xsd:sequence>
<xsd:element name="input" type="input1"/>
<xsd:element name="input" type="input2"/>
</xsd:sequence>
</xsd:complexType>
如果有人可以就此给我们一些见解,那就太好了。
马努。
ps:实际上,我们的XML结构比示例更复杂。我们正在构建一个Web表单生成器。 这是另一个(仍然很简单)的例子:
<?xml version="1.0" encoding="UTF-8"?>
<ZForm title="main title" attachment="attachment1" type="NM08">
<Part title="part title">
<SubTitle code="I.1)" title="title 1"/>
<ShortText title="short text title 1"/>
<SubTitle code="I.2)" title="title 2" subtitle="subtitle 1"/>
<SelectList type="select type" title="select title"/>
<ShortText title="short text title 2"/>
<MultiSelectList type="multiType2" title="multi select title"/>
<RadioButtonList type="yesNo" title="lala"/>
<SubTitle code="I.3)" title="some other title" subtitle="what?"/>
<MultiSelectList type="multiType2" title=""/>
</Part>
<Part title="second part title">
<Repeater add="add a new repeater item" remove="remove last repeating part">
<RepeatingPart>
<SubTitle code="II.1)" title="tiiiiiitle"/>
<ShortText/>
</RepeatingPart>
</Repeater>
</Part>
</ZForm>
答案 0 :(得分:2)
XSD规范定义了一个约束“Element Declarations Consistent”,其效果是当两个兄弟元素具有相同的名称时,它们也必须具有相同的类型。
众所周知,XMLSpy没有强制执行规范中一些更尴尬的规则。我不知道是不是因为他们没有编写代码,或者他们是否觉得他们的版本是一个改进,但是使用一种符合方法的工具检查你的模式总是一个好主意更严格(Xerces实际上比W3C MSV服务更强大。)