XSD;如何混合复杂和简单的内容?

时间:2014-01-27 12:05:42

标签: xml validation xsd

我有多个XML文件,可以在最低级别使用HTML bi标记和/或文本,如下例所示。

<root>
  <text>    Hallo Welt, wie geht es so?                             </text>

  <text>    <i>Hallo Welt, wie geht es so?</i>                      </text>
  <text>    Hallo <i>Welt, wie geht es so?</i>                      </text>

  <text>    <b>Hallo Welt, wie geht es so?</b>                      </text>
  <text>    Hallo <b>Welt, wie geht es so?</b>                      </text>

  <text>    <b>Hallo Welt</b>, <i>wie geht es so?</i>               </text>
  <text>    <b>Hallo Welt</b>, <i>wie geht es so</i>?               </text>

  <text>    <i>Hallo Welt</i>, <b>wie geht es so?</b>               </text>
  <text>    <i>Hallo Welt</i>, <b>wie geht es so</b>?               </text>

  <text>    <i>Hallo Welt, <b>wie geht es so</b>?</i>               </text>
  <text>    <b>Hallo Welt, <i>wie geht es so</i>?</b>               </text>

  <text>    Hallo <i>Welt, <b>wie geht es so</b>?</i>               </text>
  <text>    Hallo <b>Welt, <i>wie geht es so</i>?</b>               </text>

  <text>    <b>Hallo <i>Welt</i></b>, <i>wie <b>geht </b></i>es so? </text>
</root>

您可以将ib混淆,反之亦然,您只需在bi标记之一中添加文字或文字。

我尝试了以下内容:

<xs:complexType name="articleType">
    <xs:sequence>
        <xs:element name="author"       type="textType" />
        <xs:element name="title"        type="textType" />
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required" />      
</xs:complexType>

<!-- TEXT -->
<xs:complexType name="textType">
    <xs:sequence>
        <xs:element name="i"    type="iType"    minOccurs="0" maxOccurs="unbounded" />
        <xs:element name="b"    type="bType"    minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
</xs:complexType>

<!-- I -->
<xs:complexType name="iType">
    <xs:sequence>
        <xs:element name="b"    type="bType"    minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
</xs:complexType>

<!-- B -->
<xs:complexType name="bType">
    <xs:sequence>
        <xs:element name="i"    type="iType"    minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
</xs:complexType>

遗憾的是,此验证网站http://www.utilities-online.info/xsdvalidation/告诉我以下错误:

  

错误 - 第7行,第50行:org.xml.sax.SAXParseException; lineNumber:7; columnNumber:50; cvc-complex-type.2.3:元素'author'不能有字符[children],因为类型的内容类型只是元素。

亲切的问候

马里奥

1 个答案:

答案 0 :(得分:1)

XML Schema通过将complexType声明为mixed="true"来为混合内容提供有限的支持,但您不能进一步限制混合内容中的文本节点与类型。您只能将简单类型应用于简单内容。