Обработка данных путем чтения / записи XML с помощью .NET - PullRequest
1 голос
/ 16 июля 2009

Я работаю над проектом, который выполняет физиологическое моделирование с использованием математических моделей. В настоящее время мы используем модели, определенные в MML , языке математического моделирования JSim, поскольку JSim широко используется исследователями. По сути, модель содержит переменные (с формулой, начальным значением и необязательными единицами) и постоянные параметры (со значением и необязательными единицами). Переменные и параметры внутренне представлены одним и тем же типом данных, поскольку единственное различие между ними заключается в том, имеет ли он формулу.

Мы также разрешаем переменным иметь дополнительные связанные данные (анатомическую информацию), которые не поддерживаются 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 Ответ

1 голос
/ 16 июля 2009

Простой способ - запустить программу XSD.EXE для схемы. Это произведет набор классов. Сериализатор XML можно использовать для загрузки данных из вашего файла XML в экземпляры классов и для их сериализации обратно в XML после их изменения.


Похоже, что он претендует на создание кода C ++.

/language:
    The language to use for the generated code. Choose from 'CS', 'VB', 'JS',
    'VJS', <b>'CPP'</b> or provide a fully-qualified name for a class implementing
    System.CodeDom.Compiler.CodeDomProvider. The default language
    is 'CS' (CSharp). Short form is '/l:'.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...