/// <summary> /// Validates this instance. /// </summary> private void Validate() { //Validation 1. Each rdfs:domain triple MUST have a corresponding rdfs:type //triple such that subject(rdfs:domain triple) = subject(rdfs:type triple). //The object of rdfs:type triple MUST be rdfs:Property. //Validation 2. Each rdfs:domain triple MUST have a corresponding rdfs:type //triple such that object(rdfs:domain triple) = subject(rdfs:type triple). //The object of the rdfs:type triple MUST be rdfs:Class. foreach (Triple triple in DomainTriples) { if (PropertyTriples.Where(tuple => tuple.TripleSubject == triple.TripleSubject).Count() == 0) { throw new RdfsException(string.Format(CultureInfo.InvariantCulture, DataModellingResources.MsgDomainInterpreterDomainTripleSubjectNotDefined, triple.ToString())); } if (ClassTriples.Where(tuple => tuple.TripleSubject == triple.TripleObject).Count() == 0) { throw new RdfsException(string.Format(CultureInfo.InvariantCulture, DataModellingResources.MsgDomainInterpreterDomainTripleObjectNotDefined, triple.ToString())); } } //Validation 3. Each rdfs:range triple MUST have a corresponding rdf:type //triple with the same subject. The object of rdf:type triple MUST be rdfs:Property. //Validation 4. Each rdfs:range triple MAY have a corresponding rdfs:type triple //such that object(rdfs:range triple) = subject(rdfs:type triple). If there exists //such an rdfs:type triple, then the object of the rdfs:type triple MUST be //rdfs:Class. Otherwise, the object of rdfs:range SHOULD be treated as a datatype //reference, XSD or derived. foreach (Triple triple in RangeTriples) { if (PropertyTriples.Where(tuple => tuple.TripleSubject == triple.TripleSubject).Count() == 0) { throw new RdfsException(string.Format(CultureInfo.InvariantCulture, DataModellingResources.MsgDomainInterpreterRangeTripleSubjectNotDefined, triple.ToString())); } if (ClassTriples. Where(tuple => tuple.TripleSubject == triple.TripleObject).Count() == 0 && (Context.XsdDataTypeCollection. Where(tuple => tuple.Name == triple.TripleObject).Count() == 0) ) { throw new RdfsException(string.Format(CultureInfo.InvariantCulture, DataModellingResources.MsgDomainInterpreterRangeTripleObjectNotDefined, triple.ToString())); } } }
/// <summary> /// Validates this instance. /// </summary> private void Validate() { //Validation 1. Importer MUST raise an error if multiple rdfs:subClassOf triples //are defined with same subject. foreach (Triple triple in SubClassOfTriples) { if (SubClassOfTriples.Where(tuple => tuple.TripleSubject == triple.TripleSubject).Count() > 1) { throw new RdfsException(string.Format(CultureInfo.InvariantCulture, DataModellingResources.MsgSubClassOfInterpreterSameSubject, triple.TripleSubject.ToString())); } } //Validation 2. Importer MUST raise errors if an rdf:type (not rdfs:subClassOf) //triple with object = rdf:Class is not defined in the graph for the subject and //object classes of rdfs:subClassOf triple. foreach (Triple triple in SubClassOfTriples.ToList()) { List <Triple> subjectTriples = ClassTriples. Where(tuple => tuple.TripleSubject == triple.TripleSubject).ToList(); List <Triple> objectTriples = ClassTriples. Where(tuple => tuple.TripleSubject == triple.TripleObject).ToList(); if (subjectTriples.Count() == 0 || objectTriples.Count() == 0) { if (subjectTriples.Count() == 0) { throw new RdfsException(string.Format(CultureInfo.InvariantCulture, DataModellingResources.MsgSubClassOfInterpreterSubjectNotDefined, triple.ToString())); } else { throw new RdfsException(string.Format(CultureInfo.InvariantCulture, DataModellingResources.MsgSubClassOfInterpreterObjectNotDefined, triple.ToString())); } } } //Validation 3: Subject and object of SubuClassOf triple should not be same. Triple invalidTriple = SubClassOfTriples.Where(tuple => tuple.TripleSubject == tuple.TripleObject).FirstOrDefault(); if (invalidTriple != null) { throw new RdfsException(string.Format(CultureInfo.InvariantCulture, DataModellingResources.MsgSubClassOfInterpreterSameSubjectObject, invalidTriple.ToString())); } }