如何更改XML / XSD中的complexType,并限制使用混合值(整数和字符串)?

时间:2017-12-12 15:04:03

标签: xml xsd attributes restriction complextype

嗨,我已经完成了用XML进行电子学习会话的任务。我需要限制每个字符串值和xml内部的每个整数值(元素和属性)。我没有遇到处理这些情况的问题,因为那些值是相同的类型,我正在努力解决当它是一个整数和另一个字符串时它应该如何工作。 xml文件看起来像这样。

  <car id="5">
        <brand origin="Italy">Lamorghini</brand>
        <model body="sedan">Huracan</model>
        <year>2017</year>
        <cc engineType="gasoline">5204</cc>
        <registered>Switzerland</registered>
    </car>

现在我专注于“cc”元素,这是我主要关心的问题。据我所知,因为它有一个属性它只能是 complexType ,但由于元素的值是整数(这是一个simpleType),验证器会给出错误。

 <xsd:complexType name="TypeCC">
        <xsd:restriction base="xsd:integer">
            <xsd:minInclusive value="330"/>
            <xsd:maxInlcusive value="8277"/>
        </xsd:restriction>
 </xsd:complexType>

我尝试了多种方法,但没有一种方法可行,我认为我缺少一些理解。 Validator指定基类型作为预期的关注点。

我还想知道上面xml中的每个属性是否应该放在<xsd:sequence/>之外,但是在元素汽车的 complexType ?如下例所示?

<xsd:complexType name="TypeCar">
    <xsd:sequence>
        <xsd:element name="brand" type="TypeBrand"/>
        .
        .
        .
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:integer" use="required"/>
        .
        .
    <xsd:attribute name="engineType" type="TypeEngine"/>
</xsd:complexType

对我缺乏发布技巧感到宽容,这是我第一次来这里。总结一下,我想知道如何解决混合类型的问题和属性的正确位置。非常感谢您的回答。

1 个答案:

答案 0 :(得分:0)

关于TypeCC我唯一知道这样做是使用额外的复杂类型作为TypeCC的基础。例如:

<xsd:element name="cc" type="tns:TypeCC"></xsd:element>

<xsd:complexType name="BaseTypeCC" mixed="true">
    <xsd:simpleContent>
        <xsd:extension base="xsd:integer">
            <xsd:attribute name='engineType' type="xsd:string"></xsd:attribute>
        </xsd:extension>        
    </xsd:simpleContent>
</xsd:complexType>

<xsd:complexType name="TypeCC" mixed="false">
    <xsd:simpleContent>
        <xsd:restriction base="tns:BaseTypeCC">
            <xsd:minInclusive value="330"/>
            <xsd:maxInclusive value="8277"/>
        </xsd:restriction>      
    </xsd:simpleContent>
</xsd:complexType>

重审问题

  

我还想知道上面xml中的每个属性是否都是假设的   放在&lt; xsd:sequence /&gt;之外,但在complexType的内部   元素车?

只有car元素的属性才会出现。其他人进入了自己元素的内容模型定义。