2009-07-16 7 views
1

私は、数学的モデルを使用して生理学的シミュレーションを実行するプロジェクトに取り組んでいます。 JSimは研究者によって広く使用されているので、現在、MML、JSimの数学モデリング言語で定義されたモデルを使用しています。基本的に、モデルには変数(数式、初期値、およびオプション単位)と定数パラメータ(値とオプションの単位)が含まれています。変数とパラメータは、同じデータ型で内部的に表されます。これは、2つの式の間に唯一の違いは、式があるかどうかにあります。.NETでXMLを読み書きすることによるデータ処理

また、変数にMMLでサポートされていない追加の関連データ(解剖学的情報)を持たせることもできます。ユーザーは標準のMMLモデルを読み込んで、必要に応じて編集することができます。これらの編集内容を保存すると、MML構文を使用してモデルを保存すると余分なデータが失われます。

私の現在のソリューションは、XMLではなくMMLテキストファイルとしてモデルを保存することです:

<model xmlns="http://tempuri.org/model_schema.xsd"> 
    <name>sample_model</name> 
    <description>String</description> 
    <variable type="realDomain" constant="false"> 
     <name>ID_1</name> 
     <formula>G_p/VG</formula> 
     <value>0.75</value> 
     <units>s^-1</units> 
     <description>String</description> 
     <anatomical_structure FMAID="62970"> 
      <name>Kidney</name> 
     </anatomical_structure> 
    </variable> 
    <variable type="real" constant="true"> 
     <name>ID_2</name> 
     <formula /> 
     <value>1000</value> 
     <units>mg</units> 
    </variable> 
</model> 

これは私が使用しているスキーマです:

<xs:schema id="model_schema" targetNamespace="http://tempuri.org/model_schema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/model_schema.xsd" xmlns:mstns="http://tempuri.org/model_schema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="model"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="name" type="xs:string" /> 
       <xs:element name="description" type="xs:string" minOccurs="0" /> 
       <xs:element name="variable" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="name" type="xs:ID" /> 
          <xs:element name="formula" type="xs:string" /> 
          <xs:element name="value" type="xs:float" /> 
          <xs:element name="units" type="xs:string" minOccurs="0" /> 
          <xs:element name="description" type="xs:string" minOccurs="0" /> 
          <xs:element name="anatomical_structure" minOccurs="0"> 
           <xs:complexType> 
            <xs:sequence> 
             <xs:element name="name" type="xs:string" /> 
            </xs:sequence> 
            <xs:attribute name="FMAID" type="xs:int" use="required" /> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
         <xs:attribute name="constant" type="xs:boolean" use="required" /> 
         <xs:attribute name="type" type="var_type" /> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:simpleType name="var_type"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="realDomain" /> 
      <xs:enumeration value="real" /> 
      <xs:enumeration value="int" /> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

をする良い方法はありますこれを行う? XMLを生成する経験はあまりなく、スキーマを書かなかったので、重大な問題があるかどうかはわかりません。

プログラムでXMLを生成する最適な方法は何ですか?今はXmlDocumentを使用しています。ドキュメント内でスキーマの場所を設定するにはどうすればよいですか? XSDファイルは、サーバー上でホストされるのではなく、アプリケーションにバンドルされます。

XMLを生成したら、どのように読み込み/読み込みを行うのですか?私が見た情報のほとんどはLINQを示唆していますが、プロジェクトでは.NET 2.0とC++が使用されています。 XmlReaderは最適なオプションですか?または、System.Xml.Serializationを読み書きの両方に使用する必要がありますか?私は何か重要なことを見逃しましたか?

答えて

1

簡単な方法は、スキーマに対してXSD.EXEプログラムを実行することです。これにより一連のクラスが生成されます。 XMLシリアライザを使用すると、XMLファイルからクラスインスタンスにデータをロードし、一度変更したXMLにシリアル化することができます。


C++コードが生成されているようです。

 
/language: 
    The language to use for the generated code. Choose from 'CS', 'VB', 'JS', 
    'VJS', 'CPP' or provide a fully-qualified name for a class implementing 
    System.CodeDom.Compiler.CodeDomProvider. The default language 
    is 'CS' (CSharp). Short form is '/l:'. 
+0

XSD.exeはC++クラスを生成しないため、これは動作しません。 – Velociraptors

+0

私の編集を確認してください:/ l:CPP –

+0

面白いです。 /からの情報?オプションとしてCPPが含まれていますが、MSDNのドキュメント(http://msdn.microsoft.com/en-us/library/x6c1kb0s%28VS.80%29.aspx)には記載されていません。 "CSから選択してください(C# VB(Visual Basic)、JS(JScript)、またはVJS(Visual J#)」のいずれかを選択します。 – Velociraptors

関連する問題