2

什么是为包含属性、子元素和子元素的 xml 元素定义模式的正确格式也包含子元素
例如: 我的 xml

<element1 attribute1="hello">
 <element-sub1>
       <element-sub-sub1 attribute-sub-1="hi"/>
 <elementsubsub1>
</element1>

我尝试使用以下架构

         <xs:element name="element1">
         <xs:complexType>
         <xs:sequence>
         <xs:element name="element-sub1" type="xs:anyType" maxOccurs="unbounded"/>
          <xs:complexType> 
          <xs:sequence>
      <xs:element name="element-sub-sub1" type="xs:anyType" maxOccurs="unbounded"/>
      </xs:sequence>
    <xs:attribute name="attribute-sub-1" type="xs:string"/>
      </xs:complexType>

          </xs:sequence>
      <xs:attribute name="attribute1" type="xs:string"/>
      </xs:complexType>
       </xs:element>

但我收到以下错误

The content of 'sequence' must match (annotation?, (element | group | choice | sequence | any)*). A problem was found st
arting at: complexType.

为什么我会收到此错误?为我的要求编写架构的正确格式是什么?
注意
元素“element-sub-sub1”也可以有文本。
更新 1

<element1 URI="">
 <element-sub1>
 <element-sub-sub1 Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
 <element-sub-sub1 Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116">
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 <xsl:output method="text"/>
<xsl:template match="/">
Pan : <xsl:copy-of select="//Pp"/>

MobileNo : <xsl:copy-of select="//Mm"/>

TotalAmount : <xsl:copy-of select="//Total"/>
</xsl:template>
</xsl:stylesheet>
 element-sub-sub1
 </element-sub1>
 </element1>
4

2 回答 2

1

您的架构无效,甚至格式正确。这是您需要的:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:test:1">

   <xs:element name="element1">
      <xs:complexType>
         <xs:sequence>
            <xs:element name="element-sub1" maxOccurs="unbounded">
               <xs:complexType>
                  <xs:sequence>
                     <xs:element name="element-sub-sub1" maxOccurs="unbounded">
                        <xs:complexType>
                           <xs:attribute name="attribute-sub-1" type="xs:string" />
                        </xs:complexType>
                     </xs:element>
                  </xs:sequence>
               </xs:complexType>
            </xs:element>
         </xs:sequence>
         <xs:attribute name="attribute1" type="xs:string" />
      </xs:complexType>
   </xs:element>

</xs:schema>
于 2012-05-28T09:25:58.120 回答
1

首先,你不能同时拥有一个type="xs:anyType"属性和一个<xs:complexType>元素<xs:element>

其次, 的定义<xs:complexType>只能直接出现在一个<xs:element>或作为一个全局类型的子类型<schema>

最后但并非最不重要的。如果您希望元素包含属性,请使其类型复杂。

    <xs:element name="element1">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="element-sub1" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="element-sub-sub1" maxOccurs="unbounded">
                            <xs:complexType mixed="true">
                                <xs:any minOccurs="0" maxOccurs="1"/>
                                <xs:attribute name="attribute-sub-1" type="xs:string" />
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="attribute1" type="xs:string" />
    </xs:complexType>
</xs:element>

如评论中所述,该元素允许您在该位置插入任何 xml 元素。无论元素是否根据某些标准实际上有效,验证都会通过。它只需要格式良好。

如果要验证整个样式表,请使用 anxs:import来访问命名空间,其中定义了 xsl 样式表:http: //www.w3.org/XML/2000/04schema-hacking/xslt.xsd并引用样式表或转换 xsd 中的元素。内部<xs:element name="sub-sub1>

                            <xs:complexType mixed="true">
                                <xs:choice minOccurs="0" maxOccurs="1">
                                    <xs:element ref="xsl:stylesheet"/>
                                    <xs:element ref="xsl:transform"/>
                                <xs:choice>
                                <!-- You'll have to define a prefix for the xslt namespace imported -->
                                <xs:attribute name="attribute-sub-1" type="xs:string" />
                            </xs:complexType>

选择元素允许您为 XSL 样式表使用两个可接受的顶部标记之一,<stylesheet> 或<transform>

更新:为可选样式表/转换添加了 minOccurs、maxOccurs 属性

于 2012-05-28T09:26:04.830 回答