こんばんはを検出し、私は検証ツールを使用する場合しかし、私は次のエラーが表示され、私は検証する必要があるいくつかのXMLのスキーマを構築しようとしています:ここでXSD可能な再帰が
Error!!! Possible recursion detected (element 'box'). Please correct your schema and try again.
ですXML私はスキーマで処理することができることを望む:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<document xmlns="http://somewhere.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://somewhere.com/xml/onxy/onyx.xsd"
version="0.1">
<surface title="Test Surface">
<meta name="Author" content="Somebody" />
<link rel="stylesheet" type="text/css" href="example.css" />
<layout>
<box id="box1">
<text>Hello World</text>
<box>
<text>How Are You</text>
<text>Today</text>
</box>
</box>
</layout>
</surface>
</document>
そしてここでは、エラーの原因となっているXMLスキーマです:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://somewhere.com"
xmlns:onyx="http://somewhere.com"
elementFormDefault="qualified">
<!-- A container for multiple sufrace elements. -->
<xs:element name="document">
<xs:complexType>
<xs:sequence>
<xs:element name="surface" type="onyx:SurfaceType" minOccurs="1"/>
</xs:sequence>
<xs:attribute name="version" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:complexType name="SurfaceType">
<xs:sequence>
<xs:element name="meta" type="onyx:MetaType" />
<xs:element name="link" type="onyx:LinkType" />
<xs:element name="layout" type="onyx:LayoutType" minOccurs="1" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="title" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="LayoutType">
<xs:sequence>
<xs:element name="box" type="onyx:ContentType" />
<xs:element name="text" type="onyx:ContentType" />
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
<xs:complexType name="ContentType" mixed="true">
<xs:sequence>
<xs:element name="box" type="onyx:ContentType" />
<xs:element name="text" type="onyx:ContentType" />
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
<xs:complexType name="MetaType">
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="content" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="LinkType">
<xs:attribute name="rel" type="xs:string" use="required" />
<xs:attribute name="type" type="xs:string" use="required" />
<xs:attribute name="href" type="xs:string" use="required" />
</xs:complexType>
</xs:schema>
これは、box
とtext
要素の子を名前box
とtext
に制限したいが、再帰が何回起こるか、どのくらい深くできるかを制限しないことを意味する。
オンラインで検索していないかどうか尋ねることはありませんでした。誠にありがとうございます。ご協力いただきありがとうございます。
はちょうどこの答えに展開します:スキーマが再帰的ではないことを示唆しているため、エラーメッセージは少し誤解を招く。当然のことではない。ここでの問題は、非終端再帰であるということです。実際、このようなスキーマに対する仕様にはルールはありませんが、スキーマは決して有効な(有限の)インスタンスを持つことはできないので、プロセッサがこれについてあなたに伝えるのは妥当です。 –
スキーマを認識させようとしているのは、ボックスまたはテキスト要素にはボックスまたはテキスト要素しか含めることができないということです。 xsdでそれを表現する方法はありませんか? – Kodaloid
はい、もちろんありますが、私はあなたのためにそれを書くつもりはありません。私の目標は、あなた自身でそれを発見するのを手助けすることです。あなたの現在のスキーマは最初のステップですが、サンプル入力が有効でないとすれば、あなたが言うことを言っているようには見えません。答えとMKのコメントを読んで、もっと頑張ってください。次に、minOccursを調べて、インスタンス内のオニキス:ボックスのすべてのオカレンスが有効となるタイプを定義するのに役立つ方法について考えてみましょう。 –