8

私は、さまざまな既存の形式といくつかのカスタム要素および属性を組み合わせた XML 形式を使用してきました。これらのカスタム要素のスキーマを作成する必要があると考えました。

私が行っていることの 1 つは、次のように、既存の形式の要素にカスタム属性を使用することです。

<ns1:something attA="b" attB="a" ns2:extraAtt="c"/>

これが許可されていることは理解していますが、XML スキーマまたはさらに悪いことに DTD で「extraAtt」を宣言する方法がわかりません。

仕様書を読んでみましたが、私に関する限り、中国語で書かれている可能性もあります。ほとんどのチュートリアルでは、「名前」、「タイプ」、および「使用」についてのみ説明します。たとえば、 this onethat oneです。

4

2 に答える 2

8

各スキーマ ドキュメントは、1 つの名前空間のコンポーネント (スキーマの一部) を定義します。したがって、属性を定義するには、ns2:extraAtt次のようなスキーマ ドキュメントが必要です。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://example.com/my-ns2">
  <xs:attribute name="extraAtt" type="xs:anySimpleType"/>
</xs:schema>

<xs:attribute ref="ns2:extraAtt"/>要素 ns1:something の宣言では、属性参照 ( ) または属性ワイルドカード (<xs:anyAttribute namespace="http://example.com/my-ns2"/>または同様のもの) を使用して、何らかの方法でこの属性を許可する必要があります。


仕様の読みやすさについて申し訳ありません。長い話ですが、基本的にWGの一部のメンバーは、あなたのような人々が存在するとは考えていませんでした(「実装者以外は誰も仕様を読んでおらず、彼らが文句を言わない限り、十分に読みやすい」-少なくとも、それはそうでした一部の実装者が大声で苦々しく文句を言う前に、彼らは言いました; その後、彼らは話題を変えただけです)。

于 2013-09-03T18:33:39.043 に答える
1

属性だけを宣言するには、次の XSD を使用できます。

<xs:schema 
  targetNamespace="theNamespaceUri"
  elementFormDefault="qualified"
  attributeFormDefault="qualified"
  xmlns="theNamespaceUri"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:attribute name="extraAtt" type="xs:string">
  </xs:attribute>

</xs:schema>

(単純な文字列であると仮定しextraAttます-任意のタイプを使用したり、既存のタイプを制限したりできます。)

于 2013-09-03T18:33:52.583 に答える