1. ホーム
  2. xml

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

2022-12-06 02:53:42

質問

どのような 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"を置くことを節約するために、要素宣言にform="unqualified"を置くことによって上書きされない限り、要素にtargetNamespaceを適用することを意味する elementFormDefault="qualified" と記述します。