0

xsd内でこのスキーマ検証を取得しようとすると問題が発生します。

有効なケース

<root>
   <groups>
      <group/>
   </groups>
</root>

Valid case
<root>
<groups/>
</root>

無効なケース

<root>
  <group/>
</root>

特定の子要素が、xmlからxsdまでだけではなく、特定の親の下にのみ存在できるようにするにはどうすればよいですか?

この例では、グループは単独で存在することはできませんが、グループが親である場合は存在できます。

グループ要素をグローバルにしない、つまりグループ要素内に含めると誰かが答えました...

ただし、グループが親の直接の子ではない場合もあります。例:有効なケース

<groups>
<class>
   <group>
</class>
</groups>

その場合に何をすべきか...クラスもグループを参照する必要があるため...

4

2 に答える 2

1

あなたの質問に基づいて、あなたはクラスとグループを交換可能にしたいと思っているように私には聞こえます。そのためには、次のような再帰的なスキーマ要素を使用する必要があります...

<xsd:element name="Groups">
    <xsd:complexType>
        <xsd:complexContent>
            <xsd:extension base="BranchType"/>
        </xsd:complexContent>
    </xsd:complexType>
</xsd:element>

<xsd:complexType name="BranchType">
    <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="Class" type="BranchType" minOccurs="0" maxOccurs="1"/>
            <xsd:element name="Group" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
    </xsd:sequence>
</xsd:complexType>

基本的に、Group要素またはそれ自体の任意の組み合わせを含むことができるBranchTypeを定義します(Class要素を介して)。次に、最上位のグループをタイプBranchTypeとして定義します。クラス要素とグループ要素を任意の順序で、何度でも、任意のレベルのネストに表示できるように、選択したシーケンスを使用します。

于 2012-08-16T23:08:27.617 に答える
0

要素を単独で表示したくない場合は、その親を定義する複合型内で宣言する必要があります。

以下は、ツールによって生成された簡単な「修正」です。学習するときは、少なくとも構文を正しく理解するために、XSD をジャンプスタートする良い方法であることが証明されるかもしれません...

更新: コンテンツを追加し続ける場合は、スキーマを更新する必要があります。要素がグローバルでない場合、解決策は同じです。つまり、親内での定義です。コンテンツ モデルが同じ場合は、それをグローバル タイプとして定義し、要素の定義で参照します (この場合は、anyType の代わりになります)。

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="groups">
          <xs:complexType>
            <xs:sequence minOccurs="0">
              <xs:element name="group" type="xs:anyType" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="groups">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="class">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="group" type="xs:anyType" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
于 2012-06-06T00:42:38.080 に答える