3

次のようなものを含む可能性のある XSD があるとします。

<simpleType name="CELESTIAL_IMPORIUM_CATEGORY">
    <restriction base="integer">
        <enumeration id="BELONGING_TO_THE_EMPEROR" value="8001"/>
        <enumeration id="EMBALMED"                 value="8002"/>
        <enumeration id="TRAINED"                  value="8003"/>
        <enumeration id="SUCKLING_PIGS"            value="8004"/>
    </restriction>
</simpleType>

列挙値とその名前 (id 属性にある) の両方を取得できるようにしたいとします。私はこれが可能かどうかを理解しようとしています。

もう少し考えてみると、xerces-c (3.1.1 など) を使用している可能性があり、より具体的には、xercesc/framework/psvi のクラスを使用している可能性があります。私は予備的な突っ込みをしましたが、物事は有望に見えません:

  • XSSimpleTypeDefinitionを介して列挙の詳細へのアクセスを提供するようですgetMultiValueFacets()
  • ただし、これは、XSMultiValueFacet値 (および注釈) へのアクセスのみを提供するように見える を返します。

おそらく、私が見逃しているものはありますか?

4

3 に答える 3

1

Genericode は、XSD で有効な方法でコード、ID、および説明を含める方法の良い例です。https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=codelist

完全なリストの簡単なサンプルを次に示します

 <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ccts="urn:un:unece:uncefact:documentation:2" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:simpleType name="CurrencyCodeContentType">
    <xs:restriction base="xs:token"><xs:enumeration value="AED"><xs:annotation><xs:documentation>
                        <ccts:CodeName>Dirham</ccts:CodeName>
                        <ccts:CodeDescription/>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration><xs:enumeration value="AFN"><xs:annotation><xs:documentation>
                        <ccts:CodeName>Afghani</ccts:CodeName>
                        <ccts:CodeDescription/>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration><xs:enumeration value="ALL"><xs:annotation><xs:documentation>
                        <ccts:CodeName>Lek</ccts:CodeName>
                        <ccts:CodeDescription/>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration><xs:enumeration value="AMD"><xs:annotation><xs:documentation>
                        <ccts:CodeName>Dram</ccts:CodeName>
                        <ccts:CodeDescription/>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration><xs:enumeration value="ANG"><xs:annotation><xs:documentation>
                        <ccts:CodeName>Netherlands Antillian Guilder</ccts:CodeName>
                        <ccts:CodeDescription/>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
于 2013-10-14T21:57:35.350 に答える
0

あなたに欠けているものは何もないと思います (しかし、私は Xerces-C の内部構造に精通していません)。XSD 仕様では、スキーマ検証後の情報セットとスキーマ コンポーネントの抽象構造が詳細に定義されていますが、バリデーターがいずれかの特定の部分へのアクセスを提供する必要はありません。(決定的な瞬間に、影響力のある企業の WG メンバーが「API 仕様のスティンキングは必要ない」と唸り、その場にいたほぼすべてのベンダーが同意しました。) したがって、アクセスできるものは、特定のソフトウェアによって決まります。アクセスするための API と同様に、使用しています。

ただし、最も完全な API でさえ、 xsd:enumeration 要素の ID 属性の値へのアクセスを提供する可能性は低いです。ID 属性は、単純型コンポーネントのどの部分にも対応しておらず、事実上すべての API 設計者に対応していません。スキーマ情報は、それをコンポーネントの XML 表現の偶発的なアーティファクトと見なす可能性が高く、本質的な関心はありません。

もちろん、使用しているスキーマを定義するスキーマ ドキュメントにアクセスできる場合は、通常の XML ツールを使用して目的の ID を見つけることができます。これが、そもそもスキーマ ドキュメントを XML ドキュメントにする理由の 1 つです。

于 2013-04-03T16:44:44.783 に答える