0

私は与えました

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
  targetNamespace="AdditionalAttribute.OtherXSD"
  xmlns:o="AdditionalAttribute.OtherXSD" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:element name="Tag" type="o:TagType" />
  <xs:complexType name="TagType" />
</xs:schema>

そして書きたい

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
  targetNamespace="AdditionalAttribute.MyXSD" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <!-- ? -->
</xs:schema>

したがって、これは有効な XML になります。

<?xml version="1.0" encoding="UTF-8"?>
<o:Tag
  xmlns:o="AdditionalAttribute.OtherXSD"
  xmlns:m="AdditionalAttribute.MyXSD"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
    AdditionalAttribute.OtherXSD AdditionalAttribute.OtherXSD.xsd 
    AdditionalAttribute.MyXSD AdditionalAttribute.MyXSD.xsd
  "
  m:AdditionalAttribute="Value"
/>

別の XSD のすべての複合型に追加の属性を配置する方法を尋ねる、同様の質問を認識しています。その答えはノーです。ただし、私はこれの専門家ではなく、特定の複合型で可能かどうかをそこの回答から導き出すことはできません。私は成功せずにいくつかのことを試しましたが、これは複雑な型を xsd:extension'ing または xsd:restriction'ing することによってのみ可能であるように思われます。同じタグの属性を「マージ」したい:

  <o:Tag o:...=...           />
+ <o:Tag           m:...=... />
= <o:Tag o:...=... m:...=... />

これは可能ですか?

4

2 に答える 2

0

あなたの問題は、XML スキーマで意図的に課された制約の外で操作しようとしていることにあると思います。

  • タグは、名前と名前空間で構成される修飾名 ( QName ) によって識別されます。
  • タグのタイプは、許可されるコンテンツを定義します

あなたが提案しているのは、「タグ」に新しい属性を追加するため、XSD モデルの一部の消費者のタイプを変更することです。

そうは言っても、xsi:type 属性を XML に追加する意思があれば、やりたいことができます。o:TagType が空の型であることを考えると、次のようにすることもできます。

<m:Tag xsi:type="m:TagWithAttribute" m:additionalAttribute="Value" />
  • o:TagType を抽象型にする
  • xs:extension を使用して、o:TagType に基づいて新しいタイプ 'm:TagWithAttribute' を作成します

xsi:type 属性を追加することにより、スキーマ バリデーターは、「タグ」の使用法を、別の方法で検証することを望んでいる他の誰かの使用法と区別できます。言い換えれば、XML スキーマは強い型付けを強制しています ( xs:redefines は強い型付けを回避するため、一部の人々はそれを好まないのです)。

于 2015-11-13T17:36:04.067 に答える
0
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:o="AdditionalAttribute.OtherXSD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="AdditionalAttribute.MyXSD" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="AdditionalAttribute.OtherXSD" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import namespace="AdditionalAttribute.MyXSD" />
  <xs:element name="Tag">
    <xs:complexType>
      <xs:attribute ref="m:AdditionalAttribute" use="required" />
    </xs:complexType>
  </xs:element>
</xs:schema>
于 2013-03-28T20:37:56.493 に答える