XML 架构:具有仅包含“受限”文本的属性的元素

Mas*_*ief 3 xml xsd

我想定义一个带有一些受限文本和属性的元素

<some_element my_attr="data">some restricted text</some_element>
Run Code Online (Sandbox Code Playgroud)

我怎样才能创建这样的元素?

我试过:

<complexType>
    <simpleContent>
        <restriction base="string">
            <pattern value="AAA"></pattern>
            <attribute name="newattr" type="string"></attribute>
        </restriction>
    </simpleContent>
</complexType>
Run Code Online (Sandbox Code Playgroud)

但收到错误消息:

类型“#AnonType_childparent”的复杂类型定义表示错误。使用时,基类型必须是内容类型为简单的复杂类型,或者,仅在指定限制时,为具有混合内容和可空粒子的复杂类型,或者,仅在指定扩展时,为简单类型。'string' 不满足这些条件。

然后尝试了这样的事情

<complexType>
    <complexContent>
        <extension base="string">
            <attribute name="attr" type="string"></attribute>
        </extension>
    </complexContent>
</complexType>
Run Code Online (Sandbox Code Playgroud)

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

类型“#AnonType_childparent”的复杂类型定义表示错误。使用时,基类型必须是complexType。“string”是一个简单类型。

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

Pet*_*dea 5

您的问题或多或少是这个问题的重复(刚刚回答)。

从这些角度思考:

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

这篇关于 SO 的文章向您展示了上述解释的端到端示例。对于您的具体情况:

<?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>
Run Code Online (Sandbox Code Playgroud)