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

问题描述 投票:0回答:1

嗨,我已经完成了用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/>之外,但是在元素car的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

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

xml xsd attributes restriction complextype
1个回答
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中的每个属性是否应该放在<xsd:sequence />之外,但是在元素car的complexType中?

不仅car元素的属性去那里。其他人参与其自身元素的内容模型定义。

© www.soinside.com 2019 - 2024. All rights reserved.