解析并从 OWL 文件保存到列表



我将对象从我的本体保存到列表中时遇到问题。我在简单的xml(不是owl文件(上做了一个简单的例子,但现在我不知道如何为单个学生获取这些值。

本体片段:

<Ontology />
.
. //here are 250 lines of declarations etc
.
  <ClassAssertion>
    <Class IRI="#Stacjonarny" />
    <NamedIndividual IRI="#Student_3" />
  </ClassAssertion>
  <DataPropertyAssertion>
    <DataProperty IRI="#student_id" />
    <NamedIndividual IRI="#Student_3" />
    <Literal datatypeIRI="http://www.w3.org/2001/XMLSchema#integer">3</Literal>
  </DataPropertyAssertion>
  <DataPropertyAssertion>
    <DataProperty IRI="#imie" />
    <NamedIndividual IRI="#Student_3" />
    <Literal datatypeIRI="http://www.w3.org/2001/XMLSchema#string">Grzegorz</Literal>
  </DataPropertyAssertion>
  <DataPropertyAssertion>
    <DataProperty IRI="#nazwisko" />
    <NamedIndividual IRI="#Student_3" />
    <Literal datatypeIRI="http://www.w3.org/2001/XMLSchema#string">Brzęczyszczykiewicz</Literal>
  </DataPropertyAssertion>
  <DataPropertyAssertion>
    <DataProperty IRI="#wydział" />
    <NamedIndividual IRI="#Student_3" />
    <Literal datatypeIRI="http://www.w3.org/2001/XMLSchema#string">Matematyczno-przyrodniczy</Literal>
  </DataPropertyAssertion>
</Ontology>

我想从"文字"标记中获取值,并将它们保存到 student_3、4、5 等列表中作为学生。

学生:

class Student
{
    public int student_id { get; set; }
    public string imie { get; set; }
    public string nazwisko { get; set; }
    public string wydzial { get; set; }
    public Student(string imie, string nazwisko, string wydzial, int student_id)
    {
        this.student_id = student_id;
        this.imie = imie;
        this.nazwisko = nazwisko;
        this.wydzial = wydzial;
    }
}

昨天我花了将近半天的时间排练,现在我有这样的东西:

class Pobierz
{
    List<classes.Student> studenci = new List<classes.Student>();

    public void studentow()
    {
        XDocument xml = XDocument.Load("moja_ontologia.owl");
        studenci = from student in xml.Root.Descendants("DataPropertyAssertion")
                   where student.Attribute("NamedIndividual").Value.Equals("Student")
                   select new classes.Student
                   {
                       imie = student.Element("")
                   }
    }
}

(我基于这个(

在一个判决中:如何从"文字"标记中获取这些值?

你应该使用 Serialization & Unserialization...。

Déclare this class(如果你想重建这个类,如果XML结构发生变化,看看这里,@Damian-Drygiel的答案(:

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class Ontology
{
    private OntologyClassAssertion classAssertionField;
    private OntologyDataPropertyAssertion[] dataPropertyAssertionField;
    /// <remarks/>
    public OntologyClassAssertion ClassAssertion
    {
        get
        {
            return this.classAssertionField;
        }
        set
        {
            this.classAssertionField = value;
        }
    }
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("DataPropertyAssertion")]
    public OntologyDataPropertyAssertion[] DataPropertyAssertion
    {
        get
        {
            return this.dataPropertyAssertionField;
        }
        set
        {
            this.dataPropertyAssertionField = value;
        }
    }
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class OntologyClassAssertion
{
    private OntologyClassAssertionClass classField;
    private OntologyClassAssertionNamedIndividual namedIndividualField;
    /// <remarks/>
    public OntologyClassAssertionClass Class
    {
        get
        {
            return this.classField;
        }
        set
        {
            this.classField = value;
        }
    }
    /// <remarks/>
    public OntologyClassAssertionNamedIndividual NamedIndividual
    {
        get
        {
            return this.namedIndividualField;
        }
        set
        {
            this.namedIndividualField = value;
        }
    }
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class OntologyClassAssertionClass
{
    private string iRIField;
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string IRI
    {
        get
        {
            return this.iRIField;
        }
        set
        {
            this.iRIField = value;
        }
    }
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class OntologyClassAssertionNamedIndividual
{
    private string iRIField;
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string IRI
    {
        get
        {
            return this.iRIField;
        }
        set
        {
            this.iRIField = value;
        }
    }
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class OntologyDataPropertyAssertion
{
    private OntologyDataPropertyAssertionDataProperty dataPropertyField;
    private OntologyDataPropertyAssertionNamedIndividual namedIndividualField;
    private OntologyDataPropertyAssertionLiteral literalField;
    /// <remarks/>
    public OntologyDataPropertyAssertionDataProperty DataProperty
    {
        get
        {
            return this.dataPropertyField;
        }
        set
        {
            this.dataPropertyField = value;
        }
    }
    /// <remarks/>
    public OntologyDataPropertyAssertionNamedIndividual NamedIndividual
    {
        get
        {
            return this.namedIndividualField;
        }
        set
        {
            this.namedIndividualField = value;
        }
    }
    /// <remarks/>
    public OntologyDataPropertyAssertionLiteral Literal
    {
        get
        {
            return this.literalField;
        }
        set
        {
            this.literalField = value;
        }
    }
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class OntologyDataPropertyAssertionDataProperty
{
    private string iRIField;
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string IRI
    {
        get
        {
            return this.iRIField;
        }
        set
        {
            this.iRIField = value;
        }
    }
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class OntologyDataPropertyAssertionNamedIndividual
{
    private string iRIField;
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string IRI
    {
        get
        {
            return this.iRIField;
        }
        set
        {
            this.iRIField = value;
        }
    }
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class OntologyDataPropertyAssertionLiteral
{
    private string datatypeIRIField;
    private string valueField;
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string datatypeIRI
    {
        get
        {
            return this.datatypeIRIField;
        }
        set
        {
            this.datatypeIRIField = value;
        }
    }
    /// <remarks/>
    [System.Xml.Serialization.XmlTextAttribute()]
    public string Value
    {
        get
        {
            return this.valueField;
        }
        set
        {
            this.valueField = value;
        }
    }
}

而这个学生班:

public class Student
{
    public Student()
    {
    }
    public string IRI { get; set; }
    public OntologyDataPropertyAssertionNamedIndividual Name { get; set; }
    public string TypeIRI { get; set; }
    public string Value { get; set; }
}

并使用此 linq 示例获取数据(如果您的数据位于 c:\temp\test.xml

(:
XmlSerializer serializer = new XmlSerializer(typeof(Ontology));
StreamReader reader = new StreamReader(@"c:temptest.xml");
Ontology ontology = (Ontology)serializer.Deserialize(reader);
var students = from student in ontology.DataPropertyAssertion
               select new Student()
               {
                   Name = student.NamedIndividual,
                   TypeIRI = student.Literal.datatypeIRI,
                   Value = student.Literal.Value,
                   IRI = student.DataProperty.IRI,
               };
foreach (var item in students)
{
    //Use here your list of students
}
reader.Close();
reader.Dispose();