0

これは、子要素やその他のコンテンツを持つことができないXML要素Fooを宣言する適切な方法でしょうか?

<xs:element name="Foo" type="xs:string" fixed="" nillable="true" />

XMLドキュメントでのこの要素の有効な例は次のとおりです。

<Foo></Foo>

<Foo/>

それ以外は無効になります。例:

<Foo>stuff</Foo>

必須ではありませんが、次のことが有効であると便利です。

<Foo>
</Foo>
4

3 に答える 3

1

いくつかのオプションを 1 つのスキーマに結合し、それを使用していくつかのテスト要素を検証しようとしました。

ソース: http://www.w3schools.com/schema/schema_complex_empty.asp

http://www.herongyang.com/XML-Schema/complexType-Empty-Element-Declaration.html

スキーマ:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="foo">
          <xs:complexType></xs:complexType>
        </xs:element>
        <xs:element name="y1">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:length value="0" />
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="y2">
          <xs:complexType>
            <xs:complexContent>
              <xs:restriction base="xs:anyType" />
            </xs:complexContent>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

テストケース:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="NewXMLSchema.xsd">
 <!--  These six are all valid -->
  <foo />
  <y1 />
  <y2 />
  <foo></foo>
  <y1></y1>
  <y2></y2>
  <!-- These three are all invalid! -->
  <foo>
  </foo>
  <y1>
  </y1>
  <y2>
  </y2>
  <!--  These are invalid too. -->
  <foo>invalid</foo>
  <y1>invalid</y1>
  <y2>invalid</y2>
</root>

余分な空白行機能を除いて、3 つの要素宣言のいずれでも希望どおりに動作するように見えます。

type="xs:string"、fixed=""、または nillable="true" は含めません。これらはすべて空のタグとは意味的に異なるためです。空のタグは空であるため、実際には型 (文字列など) を持ちません。また、空であることとは異なるため、null 文字列の固定値もありません。nillable 要素は、意味的に空のタグとは異なります。これは、タグが存在しないことと意味的に同等であるためです (出典: Michael Kay による XSLT 2.0 および XSLT 2.0 Programmer's Reference、p. 182.)。空のタグ like<br/>は、この場合、改行がないことを意味しません。これは、改行が存在するが、内容や属性がないことを意味します。

于 2012-04-04T21:39:47.673 に答える
0

空のコンテンツを強制するタイプを定義するには、2つのアプローチがあります。1つは、列挙型またはパターンファセットを使用して(または固定を使用して)長さがゼロになるように制約された単純なタイプのxs:stringを使用することです。もう1つは、(たとえば)要素の空のシーケンスとして定義された複合型を使用することです。検証の目的で、それらの間で選択することはあまりありません。ただし、型階層や置換グループの定義、スキーマのJavaオブジェクトモデルへのマッピングなど、スキーマを使用してより高度な処理を行うことに関心がある場合は、選択した違いが生じる可能性があります。

于 2012-04-04T21:27:30.383 に答える
-1
<xs:element name="Foo">
  <xs:complexType>
    <xs:attribute name="Bar" type="xs:positiveInteger"/>
  </xs:complexType>
</xs:element>

属性タグを省略して、完全に空のままにすることができます...

于 2012-04-04T19:08:12.617 に答える