32041


[CAPECのXMLデータ](https://capec.mitre.org/data/xml/capec_v2.8.xml)を読み込むツールを作りたいのですが、XMLの知識が乏しいのと型数的に面倒なので、Xml
Schemas/DataTypesサポートユーティリティを使って[スキーマ](https://capec.mitre.org/data/xsd/ap_schema_v2.7.1.xsd)からC#のクラスを自動生成しようとしています。  
しかし、データ型`http://cybox.mitre.org/cybox-2:ObservablesType`が見つからないというエラーが出てクラスが生成されません。

> D:\temp\capec_v2.8>xsd ap_schema_v2.7.1.xsd /classes  
>  Microsoft (R) Xml Schemas/DataTypes サポート ユーティリティ  
>  [Microsoft (R) .NET Framework, Version 4.6.1055.0]  
>  Copyright (C) Microsoft Corporation. All rights reserved.  
>  スキーマ検証警告: 型 '<http://cybox.mitre.org/cybox-2:ObservablesType>' は宣言されていません。
> 行572、位置 6 です。  
>  スキーマ検証警告: 型 '<http://cybox.mitre.org/cybox-2:ObservablesType>' は宣言されていません。
> 行1628、位置 5 です。  
>  スキーマ検証警告: 型 '<http://cybox.mitre.org/cybox-2:ObservablesType>' は宣言されていません。
> 行1599、位置 14 です。  
>  スキーマ検証警告: 型 '<http://cybox.mitre.org/cybox-2:ObservablesType>' は宣言されていません。
> 行1600、位置 14 です。  
>  スキーマ検証警告: 型 '<http://cybox.mitre.org/cybox-2:ObservablesType>' は宣言されていません。
> 行1560、位置 11 です。  
>  スキーマ検証警告: 型 '<http://cybox.mitre.org/cybox-2:ObservablesType>' は宣言されていません。
> 行1524、位置 11 です。  
>  スキーマ検証警告: 型 '<http://cybox.mitre.org/cybox-2:ObservablesType>' は宣言されていません。
> 行2213、位置 8 です。  
>  スキーマ検証警告: 型 '<http://cybox.mitre.org/cybox-2:ObservablesType>' は宣言されていません。
> 行2148、位置 11 です。  
>  スキーマ検証警告: 型 '<http://cybox.mitre.org/cybox-2:ObservablesType>' は宣言されていません。
> 行2120、位置 11 です。  
>  スキーマ検証警告: 型 '<http://cybox.mitre.org/cybox-2:ObservablesType>' は宣言されていません。
> 行2092、位置 11 です。
>
> 警告: スキーマを検証できませんでした。クラスが生成できないか、または正しくない結果が生じる可能性があります。
>
> エラー: スキーマ 'ap_schema_v2_7_1' のクラスを生成中にエラーが発生しました。  
>  \- データ型 '<http://cybox.mitre.org/cybox-2:ObservablesType>' が見つかりません。
>
> さらにヘルプが必要な場合は、"xsd /?" を入力してください。

`ap_schema_v2.7.1.xsd`からインポートしている[`cybox_core.xsd`](http://cybox.mitre.org/XMLSchema/core/2.1/cybox_core.xsd)に`ObservablesType`が宣言されているように見えるのですが、何が問題なのでしょうか？

ap_schema_v2.7.1.xsd:

[code]

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:capec="http://capec.mitre.org/capec-2" xmlns:cybox="http://cybox.mitre.org/cybox-2" targetNamespace="http://capec.mitre.org/capec-2" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.7.1">
        <xs:import namespace="http://cybox.mitre.org/cybox-2" schemaLocation="http://cybox.mitre.org/XMLSchema/core/2.1/cybox_core.xsd"/>
                    ...
                    <xs:element name="Observables" type="cybox:ObservablesType" minOccurs="0"/>
    
[/code]

cybox_core.xsd:

[code]

    <xs:complexType name="ObservablesType">
        <xs:annotation>
            <xs:documentation>The ObservablesType is a type representing a collection of cyber observables.</xs:documentation>
        </xs:annotation>
    
[/code]


CC BY-SA 3.0
2017-01-15T03:03:57.123
31856
2017-01-21T08:59:00.543
2017-01-21T08:38:23.180
7291
7291
question
c# .net xml
XMLスキーマからのC#クラスの自動生成


xsd.exeはXSDファイルのリモート参照に対応していなかったと思います。

XSDファイルを書き換えるか、[SchemaImporterExtension](https://msdn.microsoft.com/ja-
jp/library/system.xml.serialization.advanced.schemaimporterextension\(v=vs.110\).aspx)を実装して使用するかなどをする必要があるかと。


CC BY-SA 3.0
2017-01-15T04:54:28.423
31862
2017-01-15T04:54:28.423
5750
31856
answer


本家に同様の質問がありました。

  * [using xsd.exe to generate c# files, getting error and warnings - Stack Overflow](https://stackoverflow.com/q/4491619/4955179)

これの回答を参考に、インポートしているXSDファイルを同フォルダーに置いてそれらのファイル名も指定すると、C#のクラスが生成されました。

[code]

    D:\temp\capec_v2.8>xsd /classes ap_schema_v2.7.1.xsd cybox_core.xsd cybox_common.xsd
    Microsoft (R) Xml Schemas/DataTypes サポート ユーティリティ
    [Microsoft (R) .NET Framework, Version 4.6.1055.0]
    Copyright (C) Microsoft Corporation. All rights reserved.
    ファイル 'D:\temp\capec_v2.8\ap_schema_v2_7_1_cybox_core_cybox_common.cs' に書き込んでいます。
    
[/code]


CC BY-SA 3.0
2017-01-21T08:59:00.543
32041
2017-01-21T08:59:00.543
2017-05-23T12:38:56.083
-1
7291
31856
answer