1

ノードの深さが不明なマップを検証するxsdスキーマを作成しようとしています。

(以下のスキーマでは、mapnodeに、他の要素の中でも、より多くのmapnodeを含めたいと思います。)

これには、ルートノードの下から開始する再帰が必要です。

ここで説明されている2つの方法はどちらも私には機能しないようです:http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic =%2Fcom.ibm.db2.luw.xml.doc% 2Fdoc%2Fc0051286.html

以下のスキーマでは、次のエラーが発生します。src-resolve:名前'mapnode'を(n)'要素宣言'コンポーネントに解決できません。

<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="knowledgemap">
    <xs:complexType>
  <xs:sequence>
    <xs:element name="mapdata">
      <xs:complexType>
    <xs:all>
        <xs:element name="title" type="xs:string"/>
        <xs:element name="version" type="xs:string"/>
        <xs:element name="author" type="xs:string"/>
        <xs:element name="authorid" type="xs:string"/>
        <xs:element name="width" type="xs:positiveInteger"/>
        <xs:element name="height" type="xs:positiveInteger"/>
        <xs:element name="xpos" type="xs:positiveInteger"/>
        <xs:element name="ypos" type="xs:positiveInteger"/>
        <xs:element name="scalefactor" type="xs:float"/>
        <xs:element name="mapid" type="xs:string"/>
        <xs:element name="beehivedata">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="maxresults" type="xs:positiveInteger"/>
                    <xs:element name="upiproduct" maxOccurs="unbounded">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="upiproduct" type="xs:string"/>
                                <xs:element name="upiversion" type="xs:string"/>
                                <xs:element name="upilanguage" type="xs:string"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="styledata">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="nodelevel" maxOccurs="unbounded">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="level"/>
                                <xs:element name="width"/>
                                <xs:element name="height"/>
                                <xs:element name="fontsize"/>
                                <xs:element name="fontcolor"/>
                                <xs:element name="fontweight"/>
                                <xs:element name="strokecolor"/>
                                <xs:element name="strokewidth"/>
                                <xs:element name="linkcolor"/>
                                <xs:element name="linkhighlight"/>
                                <xs:element name="colorunexplored"/>
                                <xs:element name="colorexplored"/>
                                <xs:element name="colorshadow"/>
                                <xs:element name="iconsize"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:all>
          </xs:complexType>
        </xs:element>
        <xs:element name="map">
            <xs:complexType>
        <xs:sequence>
            <xs:element name="mapnode">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="nodedata">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="title" type="xs:string"/>
                                    <xs:element name="description" type="xs:string"/>
                                    <xs:element name="xpos" type="xs:integer"/>
                                    <xs:element name="ypos" type="xs:integer"/>
                                    <xs:element name="nodeid" type="xs:string"/>
                                    <xs:element name="level" type="xs:positiveInteger"/>
                                    <xs:element name="parent" type="xs:string"/>
                                    <xs:element name="localconnection" type="xs:string"/>
                                    <xs:element name="parentconnection" type="xs:string"/>
                                    <xs:element name="covericon" type="xs:string"/>
                                    <xs:element name="activesocket"  type="xs:string" maxOccurs="unbounded"/>                               
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                        <xs:element name="contentitem" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:all>
                                    <xs:element name="title" type="xs:string"/>
                                    <xs:element name="contentid" type="xs:string"/>                                 
                                    <xs:element name="description" type="xs:string"/>
                                    <xs:element name="type" type="xs:string"/>
                                    <xs:element name="size" type="xs:string"/>  
                                    <xs:element name="col" type="xs:positiveInteger"/>
                                    <xs:element name="row" type="xs:positiveInteger"/>                              
                                    <xs:element name="contenturl" type="xs:string"/>
                                    <xs:element name="contenticon" type="xs:string"/>
                                    <xs:element name="contentdata"  type="xs:string" minOccurs="0"/>
                                </xs:all>
                            </xs:complexType>                       
                        </xs:element>
                        <xs:element  ref="mapnode" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
            </xs:complexType>
        </xs:element>
     </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
4

2 に答える 2

3

再帰構造を定義するには、自分自身を参照するノード (循環がある場合は循環内のノードの 1 つ) をグローバル要素宣言にする必要があります。ref="name" を使用する場合、xs:schema 要素の子として宣言されたグローバル要素を参照する必要があります。

于 2012-06-20T07:50:38.713 に答える
1

@Michael の代わりに、グローバル要素の宣言を避ける必要があるシナリオでは、型をグローバルにすることです。要素宣言をローカルに保持し、代わりにグローバル タイプを参照します ( type属性を使用)。

于 2012-06-20T11:18:07.917 に答える