XSDは次のとおりです。
<?xml version="1.0"?>
<xsd:schema
elementFormDefault='unqualified'
attributeFormDefault='unqualified'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
>
<xsd:simpleType name='TheSimpleType'>
<xsd:restriction base='xsd:string' />
</xsd:simpleType>
</xsd:schema>
上記のものを含む2番目のXSDは次のとおりです。
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema
elementFormDefault='unqualified'
attributeFormDefault='unqualified'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
targetNamespace='a'
xmlns='a'
>
<xsd:include schemaLocation='Include.xsd' />
<xsd:element name = "TheElement" >
<xsd:complexType>
<xsd:attribute name="Code" type="TheSimpleType" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
(2番目の)XSDをC#に読み込む必要があります。
- 有効なXSDであることを確認し、
- それに対してドキュメントを検証します。
スキーマで読み取るC#は次のとおりです。
XmlSchemaSet schemaSet = new XmlSchemaSet();
foreach (string sd in Schemas)
{
using (XmlReader r = XmlReader.Create(new FileStream(sd, FileMode.Open)))
{
schemaSet.Add(XmlSchema.Read(r, null));
}
}
schemaSet.CompilationSettings = new XmlSchemaCompilationSettings();
schemaSet.Compile();
「Type'a:TheSimpleType'が宣言されていないか、単純な型ではない」ため、.Compile()は失敗します。
ただし、次のいずれかの場合に機能します。
- 名前空間がスキーマから削除されている、または
- 名前空間がインクルードに追加されます。
問題は、スキーマを編集せずにC#でそれを受け入れるにはどうすればよいですか?
問題は、両方のスキーマをXmlSchemaSetに入れましたが、一方が他方に含まれていること、つまり、それ自体ではうまくいかないことをC#に伝える必要があることだと思います。実際、XmlSchemaSetにメインXSD(インクルードではなく)(名前空間なし(または名前空間あり)の両方)についてのみ伝える場合、「タイプ'TheSimpleType'は宣言されていないか、単純なタイプではありません。」
したがって、これは解決に関する質問のようです:どのように?!