たとえば、2 つの Xml スキーマがあります。
a.xsd:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="test" targetNamespace="test">
<xsd:include schemaLocation="b.xsd" />
</xsd:schema>`
b.xsd:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:simpleType name="testType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="test"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="test" type="testType"/>
</xsd:schema>
2 番目のスキーマにはtargetNamespaceがなく、カメレオン スキーマとして使用されます。
XmlSchemaSet を使用してこれらのスキーマをプリロードしようとしています。
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add(null, @"a.xsd");
foreach (XmlSchema schema in schemaSet.Schemas()) // foreach is used to simplify the example
{
Console.WriteLine("Target namespace: "schema.TargetNamespace); // "Target namespace: test"
XmlSchemaInclude include = (XmlSchemaInclude)schema.Includes[0];
Console.WriteLine("Include target namespace: " + include.Schema.TargetNamespace); // "Include target namespace: test"
}
しかし、私がそれを行った後、両方のスキーマに「テスト」ターゲット名前空間があります。インスタンス化されたスキーマ オブジェクトはソース スキーマと等しいはずですが、スキーマ "b.xsd" には当てはまりません。なぜそのように動作し、そのような動作を無効にする方法はありますか?