1. ホーム
  2. xml

[解決済み] elementFormDefault は XSD で何をするのですか?

2022-02-19 06:25:36

質問

とは何ですか? elementFormDefault は、どのような場合に使用するのでしょうか?

ということで、いくつかの定義を見つけました。 elementFormDefault の値を指定します。

適格 - 要素および属性 のtargetNamespaceにあります。 スキーマ

無条件 - 要素および 属性は名前空間を持ちません。

この定義からすると、スキーマが修飾型に設定されている場合、なぜ型に名前空間を接頭させなければならないのでしょうか。 また、unqualifiedに設定されるシナリオはどのようなものでしょうか? ググってみましたが、W3Cのページばかりで、非常にわかりにくかったです。

これは私が今作業しているファイルですが、なぜ私は型を target:TypeAssignments と宣言したときに targetNamespace と同じものである。 xmlns:target ?

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:target="http://www.levijackson.net/web340/ns"
        targetNamespace="http://www.levijackson.net/web340/ns" 
        elementFormDefault="qualified">
  <element name="assignments">
    <complexType>
      <sequence>
        <element name="assignments" type="target:TypeAssignments"
                 minOccurs="1" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <complexType name="TypeAssignments">
    <sequence>
      <element name="assignment" type="target:assignmentInfo"
               minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>
  <complexType name="assignmentInfo">
    <sequence>
      <element name="name" type="string"/>
      <element name="page" type="target:TypePage"/>
      <element name="file" type="target:TypeFile" 
               minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
    <attribute name="id" type="string" use="required"/>
  </complexType>
  <simpleType name="TypePage">
    <restriction base="integer">
      <minInclusive value="50" />
      <maxInclusive value="498" />
    </restriction>
  </simpleType>
  <simpleType name="TypeFile">
    <restriction base="string">
      <enumeration value=".xml" />
      <enumeration value=".dtd" />
      <enumeration value=".xsd" />
    </restriction>
  </simpleType>
</schema>

解決方法は?

ElementFormDefault はスキーマの型の名前空間とは関係なく、スキーマに準拠した XML 文書の要素の名前空間に関するものです。

以下は、仕様書の該当部分です。

<ブロッククオート
Element Declaration Schema

Component Property  {target namespace}
Representation      If form is present and its ·actual value· is qualified, 
                    or if form is absent and the ·actual value· of 
                    elementFormDefault on the <schema> ancestor is qualified, 
                    then the ·actual value· of the targetNamespace [attribute]
                    of the parent <schema> element information item, or 
                    ·absent· if there is none, otherwise ·absent·.

つまり、スキーマの先頭で宣言した targetNamespace は、elementFormDefault が "qualified" であるか、スキーマで明示的に form="qualified" と宣言された要素にのみ、スキーマ準拠の XML 文書内の要素として適用されるということである。

例えば もしelementFormDefaultがunqualifiedであった場合

<element name="name" type="string" form="qualified"></element>
<element name="page" type="target:TypePage"></element>

は "name" 要素が targetNamespace にあり、 "page" 要素が null namespace にあることを期待します。

すべての要素宣言に form="qualified" を記述する必要がないように、elementFormDefault="qualified" と記述すると、要素宣言に form="unqualified" を記述して上書きされない限り、targetNamespace はそれぞれの要素に適用されるということになります。