我将对象从我的本体保存到列表中时遇到问题。我在简单的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();