Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何为同名但内容不同的元素编写有效的xsd_Xml_Xsd - Fatal编程技术网

Xml 如何为同名但内容不同的元素编写有效的xsd

Xml 如何为同名但内容不同的元素编写有效的xsd,xml,xsd,Xml,Xsd,我们在编写正确(有效)的xsd时遇到一些问题: -xsd应该在上进行验证 -应该可以将架构添加到sql server架构集合(将XML架构集合测试创建为“[xsd here]” -我们需要在xsd中指定“title”属性值 这是(大大简化的)XML结构: 1) 这是我们的第一个版本(显然是无效的):您不能有两个名为“input”的不同元素 2) 第二次尝试: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" eleme

我们在编写正确(有效)的xsd时遇到一些问题: -xsd应该在上进行验证 -应该可以将架构添加到sql server架构集合(将XML架构集合测试创建为“[xsd here]” -我们需要在xsd中指定“title”属性值

这是(大大简化的)XML结构:

1) 这是我们的第一个版本(显然是无效的):您不能有两个名为“input”的不同元素


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>

  • org出现了与以前相同的错误消息:{None}:input的非法重新声明
  • xmlspy告诉我们它是一个有效的xsd
  • sql server引发错误:“Test”类型的内容模型包含两个名称相同的“input”元素和不同的类型、可空性或值约束
如果有人能给我们一些关于这方面的见解,那就太好了

马努

ps:实际上,我们的XML结构要比示例复杂得多。我们正在构建一个web表单生成器。 下面是另一个(仍然很简单)示例:


XSD规范定义了一个约束“Element Declarations Consistent”,其作用是当两个同级元素具有相同的名称时,它们也必须具有相同的类型


XMLSpy以不强制执行规范中的一些更棘手的规则而闻名。我不知道这是因为他们没有抽出时间来编写代码,还是因为他们觉得自己的版本有所改进,但使用一致性方法更严格的工具检查模式总是一个好主意(Xerces在这方面实际上比W3C MSV服务更强大).

您是否尝试过使用属性组?您对具有多个
输入声明的要求是什么?据我所知,我们不能使用属性组,因为“固定”属性在这两种情况下都不同。这就是为什么需要声明两个不同的输入元素的原因。因此您可以使用两个属性组,但在您对
input
type的定义中,只指定其中一个组可以使用,但不能同时使用这两个组。我不确定我头脑中的语法,但我认为这是可能的。这是否意味着我们不能为我最后粘贴的xml结构编写“严格”的模式定义?那么t xsd 1.1?这会给我们提供足够的自由吗?
<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>
<?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>