XML Schema:包含仅包含“受限”文本的属性的元素

时间:2014-04-15 20:13:04

标签: xml xsd

我想定义一个带有一些限制文本和一个属性

的元素
<some_element my_attr="data">some restricted text</some_element>

如何创建这样的元素?

我试过了:

<complexType>
    <simpleContent>
        <restriction base="string">
            <pattern value="AAA"></pattern>
            <attribute name="newattr" type="string"></attribute>
        </restriction>
    </simpleContent>
</complexType>

但是错误 msg:

复杂类型定义表示形式'#AnonType_childparent'的错误。何时使用,基地  type必须是一个complexType,其内容类型很简单,或者,只有在指定了restriction的情况下,才是具有混合内容的复杂类型  可填充粒子,或者,仅当指定了扩展名时,才是简单类型。 'string'不满足这些条件。

然后尝试了类似的东西

<complexType>
    <complexContent>
        <extension base="string">
            <attribute name="attr" type="string"></attribute>
        </extension>
    </complexContent>
</complexType>

这次错误是(这次我没有添加任何限制;这仅用于测试目的):

复杂类型定义表示类型的错误 '#AnonType_childparent'。何时使用,基地  type必须是complexType。 'string'是一个simpleType。

我没有清楚错误意味着什么?是否有更好的错误文本解释?

1 个答案:

答案 0 :(得分:4)

您的问题或多或少与此问题重复(仅answered)。

用这些术语思考:

  • 如果您的元素具有属性和/或嵌套元素,则它必须是复杂类型。
  • 如果你的元素可以有文本,但没有标记(嵌套元素)那么它必须是simpleContent
  • simpleContent只能从简单类型扩展(如果需要添加属性)。如果您需要对简单类型的其他约束,则需要专门创建一个新的简单类型,限制基类型,然后将其扩展为简单内容。
在SO上的

This post显示了上述解释的端到端示例。对于您的特定情况:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:simpleType name="tSomeRestrictedText">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="AAA"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:element name="some_element">
        <xsd:complexType>
            <xsd:simpleContent>
                <xsd:extension base="tSomeRestrictedText">
                    <xsd:attribute name="my_attr" type="xsd:string"/>
                </xsd:extension>
            </xsd:simpleContent>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
相关问题