6

同じ親要素の子を任意のレベルでネストする機能が欲しいです。たとえば、次のようになります。

<path expr="/">
  <path expr="usr">
    <path expr="bin">
      <path expr="X11" />
    </path>
  </path>
  <path expr="var" />
</path>

私は XML スキーマ ファイルを作成していますが、この親子関係をスキーマで表現する方法について途方に暮れています: これは私が持っているものですが、有効なスキーマ定義ではありません:

          <xs:element name="path">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="path" minOccurs="0" />
              </xs:sequence>
              <xs:attribute name="expr" type="xs:string" use="required" />
            </xs:complexType>
          </xs:element>

更新: 返信ありがとうございます。私はそれを試しましたが、次のエラーが表示されます: 'w3.org/2001/XMLSchema:complexType' 要素は、このコンテキストではサポートされていません。私が説明したパス階層は、それ自体が application という要素の子であるため、全体の構造は次のようになります。

<application name="test">
  <path expr="/">
    <path expr="usr">
      <path expr="bin">
        <path expr="X11" />
      </path>
    </path>
    <path expr="var" />
  </path>
</application>
4

2 に答える 2

5

以下はトリックを行う必要があります。XSD標準を直接操作するのはかなり難しいので、私は常にLiquidXMLStudioのようなエディターを使用します

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.1.1206 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Path" type="PathType" />
  <xs:complexType name="PathType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="Path" type="PathType" />
    </xs:sequence>
    <xs:attribute name="expr" type="xs:string" use="required" />
  </xs:complexType>
</xs:schema>

代替テキスト
(出典:liquid-technologies.com

XSDは有効です。説明した新しいXMLの場合は、次のように変更する必要があります。

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.0.1135 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Application">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="path" type="PathType" />
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:complexType name="PathType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="path" type="PathType" />
    </xs:sequence>
    <xs:attribute name="expr" type="xs:string" use="required" />
  </xs:complexType>
</xs:schema>
于 2009-05-01T15:29:34.417 に答える
0

個人的には XML スキーマよりもRelaxNGの方が好きです。時間をかけて試してみる価値があるかもしれません。

于 2009-05-01T16:02:06.430 に答える