Esempio n. 1
0
        /// <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()));
                }
            }
        }
Esempio n. 2
0
        /// <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()));
            }
        }