2014-04-15 141 views
2

我想与一些限制的文本和属性XML架构:元素与属性包含“限制”文本仅

<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> 

但要错误消息:

复杂类型定义表示错误类型 '#AnonType_childparent'。何时使用,基类 类型必须是其内容类型很简单的complexType,或者仅在指定了限制时才具有混合内容和复制类型,或者只有在指定了扩展名的情况下才是简单类型。 '字符串'不满足这些条件。

,然后试图像这样

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

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

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

我不清楚错误是什么意思?有没有更好的错误文字说明?

回答

4

你的问题或多或少是这个问题的重复(只是answered它)。

认为在这些方面:

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

This post在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> 
+0

我现在面临的问题是,我知道如何与属性添加文本内容的元素,但我不能为受限制的内容做。 –

+0

@MasterChief,不知道我明白了;看看最新的回应;对你起作用吗?如果没有,请澄清。 –

+0

我已经标记为答案,因为它的工作。但是,你能澄清一下,为什么我们需要分成两部分。为什么我们不能直接扩展受限类型(使用嵌套)? –