2017-06-17 7 views
0

Ich habe ein Problem mit Objekt aus meiner Ontologie in Liste speichern. Ich habe ein einfaches Beispiel für easy xml (nicht Eulen-Datei), aber jetzt habe ich keine Ahnung, wie ich diese Werte für einzelne Schüler bekommen kann.Parsing und Speichern von OWL-Datei zu Liste

Ontology Fragment:

<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> 

Ich nehme Werte wollen bilden "Literal" Marker und sie in die Liste für student_3 speichern, 4, 5 usw. als Schüler.

Student:

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; 
    } 
} 

Gestern habe ich fast einen halben Tag die Probezeiten, jetzt bin ich mit so etwas wie folgt aus:

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("") 
        } 
    } 
} 

(I was based on this)

In einem sentention: Wie kann ich diese Werte von "Literal" -Marker bekommen?

+0

Dieser Code wird nie kompilieren. Keine leeren Konstruktor für Klasse Student, und Sie können nicht eine LINQ-Abfrage auf eine Variable als Liste deklariert zuweisen –

+0

Haben Sie einen Blick auf https://github.com/bpellens/owldotnetapi –

+0

@Sir Rufo hatte Ja, ich habe, aber Ich muss meinen eigenen Parser machen, es ist ein kleines Projekt für die Universität. Ok, jetzt, wenn ich einen leeren Konstruktor habe und ich die Abfrage keiner Variablen zuweisen will, die als Liste deklariert ist (nur var studenci), was ist dann? – Kliwer

Antwort

0

Sie sollten Serialisierung & Deserialisierung verwenden ....

Deklarieren Sie diese Klassen (wenn Sie diese Klassen wollen wieder aufbauen, durch Beispiel, wenn XML-Struktur zu ändern, suchen here, Antwort von @ 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; 
     } 
    } 
} 

Und dieser Student-Klasse:

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; } 
} 

Und dieses Linq Beispiel verwenden für Ihre Daten (wenn Ihre Daten in c: \ temp \ test.xml):

XmlSerializer serializer = new XmlSerializer(typeof(Ontology)); 

StreamReader reader = new StreamReader(@"c:\temp\test.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(); 
Verwandte Themen