Ejemplo n.º 1
0
 public RDFTriple(RDFTriple triple)
 {
     if(triple==null)throw new ArgumentNullException("triple");
     setSubject(triple.subject);
     setPredicate(triple.predicate);
     setObject(triple._object);
 }
Ejemplo n.º 2
0
 public RDFTriple(RDFTriple triple)
 {
     if (triple == null)
     {
         throw new ArgumentNullException("triple");
     }
     setSubject(triple.subject);
     setPredicate(triple.predicate);
     setObject(triple._object);
 }
Ejemplo n.º 3
0
   /**
      *  Replaces certain blank nodes with blank nodes whose
      *  names meet the N-Triples requirements
      * @param triples A set of RDF triples
      * @param bnodeLabels A mapping of blank node names
      * already allocated.  This method will modify this
      * _object as needed to allocate new blank nodes.
      */
   internal static void replaceBlankNodes(ISet<RDFTriple> triples,
 IDictionary<string,RDFTerm> bnodeLabels)
   {
       if(bnodeLabels.Count==0)
         return;
       IDictionary<string,RDFTerm> newBlankNodes=new PeterO.Support.LenientDictionary<string,RDFTerm>();
       IList<RDFTriple[]> changedTriples=new List<RDFTriple[]>();
       int[] nodeindex=new int[]{0};
       foreach(var triple in triples){
         bool changed=false;
         RDFTerm subj=triple.getSubject();
         if(subj.getKind()==RDFTerm.BLANK){
       string oldname=subj.getValue();
       string newname=suggestBlankNodeName(oldname,nodeindex,bnodeLabels);
       if(!newname.Equals(oldname)){
         RDFTerm newNode=newBlankNodes[oldname];
         if(newNode==null){
       newNode=RDFTerm.fromBlankNode(newname);
       bnodeLabels.Add(newname, newNode);
       newBlankNodes.Add(oldname, newNode);
         }
         subj=newNode;
         changed=true;
       }
         }
         RDFTerm obj=triple.getObject();
         if(obj.getKind()==RDFTerm.BLANK){
       string oldname=obj.getValue();
       string newname=suggestBlankNodeName(oldname,nodeindex,bnodeLabels);
       if(!newname.Equals(oldname)){
         RDFTerm newNode=newBlankNodes[oldname];
         if(newNode==null){
       newNode=RDFTerm.fromBlankNode(newname);
       bnodeLabels.Add(newname, newNode);
       newBlankNodes.Add(oldname, newNode);
         }
         obj=newNode;
         changed=true;
       }
         }
         if(changed){
       RDFTriple[] newTriple=new RDFTriple[]{triple,
       new RDFTriple(subj,triple.getPredicate(),obj)
       };
       changedTriples.Add(newTriple);
         }
       }
       foreach(var triple in changedTriples){
         triples.Remove(triple[0]);
         triples.Add(triple[1]);
       }
   }
Ejemplo n.º 4
0
        public override sealed bool Equals(object obj)
        {
            if (this == obj)
            {
                return(true);
            }
            if (obj == null)
            {
                return(false);
            }
            if (GetType() != obj.GetType())
            {
                return(false);
            }
            RDFTriple other = (RDFTriple)obj;

            if (_object == null)
            {
                if (other._object != null)
                {
                    return(false);
                }
            }
            else if (!_object.Equals(other._object))
            {
                return(false);
            }
            if (predicate == null)
            {
                if (other.predicate != null)
                {
                    return(false);
                }
            }
            else if (!predicate.Equals(other.predicate))
            {
                return(false);
            }
            if (subject == null)
            {
                if (other.subject != null)
                {
                    return(false);
                }
            }
            else if (!subject.Equals(other.subject))
            {
                return(false);
            }
            return(true);
        }
Ejemplo n.º 5
0
 /**
  * A lax comparer of RDF triples which doesn't compare
  * blank node labels
  *
  * @param a
  * @param b
  *
  */
 private static bool laxEqual(RDFTriple a, RDFTriple b)
 {
     if (a == null)
     {
         return(b == null);
     }
     if (a.Equals(b))
     {
         return(true);
     }
     if (a.getSubject().getKind() != b.getSubject().getKind())
     {
         return(false);
     }
     if (a.getObject().getKind() != b.getObject().getKind())
     {
         return(false);
     }
     if (!a.getPredicate().Equals(b.getPredicate()))
     {
         return(false);
     }
     if (a.getSubject().getKind() != RDFTerm.BLANK)
     {
         if (!a.getSubject().Equals(b.getSubject()))
         {
             return(false);
         }
     }
     if (a.getObject().getKind() != RDFTerm.BLANK)
     {
         if (!a.getObject().Equals(b.getObject()))
         {
             return(false);
         }
     }
     return(true);
 }
Ejemplo n.º 6
0
        private RDFTriple readTriples()
        {
            int mark = input.setHardMark();
            int ch   = input.read();

    #if DEBUG
            if (!((ch >= 0)))
            {
                throw new InvalidOperationException("ch>=0");
            }
#endif
            input.setMarkPosition(mark);
            RDFTerm subject = readObject(false);
            if (!skipWhitespace())
            {
                throw new ParserException();
            }
            if (input.read() != '<')
            {
                throw new ParserException();
            }
            RDFTerm predicate = RDFTerm.fromIRI(readIriReference());
            if (!skipWhitespace())
            {
                throw new ParserException();
            }
            RDFTerm obj = readObject(true);
            skipWhitespace();
            if (input.read() != '.')
            {
                throw new ParserException();
            }
            skipWhitespace();
            RDFTriple ret = new RDFTriple(subject, predicate, obj);
            endOfLine(input.read());
            return(ret);
        }
Ejemplo n.º 7
0
        /*
         *  Replaces certain blank nodes with blank nodes whose
         *  names meet the N-Triples requirements
         * @param triples A set of RDF triples
         * @param bnodeLabels A mapping of blank node names
         * already allocated.  This method will modify this
         * _object as needed to allocate new blank nodes.
         */
        //
        internal static void replaceBlankNodes(ISet <RDFTriple> triples,
                                               IDictionary <string, RDFTerm> bnodeLabels)
        {
            if (bnodeLabels.Count == 0)
            {
                return;
            }
            IDictionary <string, RDFTerm> newBlankNodes  = new PeterO.Support.LenientDictionary <string, RDFTerm>();
            IList <RDFTriple[]>           changedTriples = new List <RDFTriple[]>();

            int[] nodeindex = new int[] { 0 };
            foreach (var triple in triples)
            {
                bool    changed = false;
                RDFTerm subj    = triple.getSubject();
                if (subj.getKind() == RDFTerm.BLANK)
                {
                    string oldname = subj.getValue();
                    string newname = suggestBlankNodeName(oldname, nodeindex, bnodeLabels);
                    if (!newname.Equals(oldname))
                    {
                        RDFTerm newNode = newBlankNodes[oldname];
                        if (newNode == null)
                        {
                            newNode = RDFTerm.fromBlankNode(newname);
                            bnodeLabels.Add(newname, newNode);
                            newBlankNodes.Add(oldname, newNode);
                        }
                        subj    = newNode;
                        changed = true;
                    }
                }
                RDFTerm obj = triple.getObject();
                if (obj.getKind() == RDFTerm.BLANK)
                {
                    string oldname = obj.getValue();
                    string newname = suggestBlankNodeName(oldname, nodeindex, bnodeLabels);
                    if (!newname.Equals(oldname))
                    {
                        RDFTerm newNode = newBlankNodes[oldname];
                        if (newNode == null)
                        {
                            newNode = RDFTerm.fromBlankNode(newname);
                            bnodeLabels.Add(newname, newNode);
                            newBlankNodes.Add(oldname, newNode);
                        }
                        obj     = newNode;
                        changed = true;
                    }
                }
                if (changed)
                {
                    RDFTriple[] newTriple = new RDFTriple[] { triple,
                                                              new RDFTriple(subj, triple.getPredicate(), obj) };
                    changedTriples.Add(newTriple);
                }
            }
            foreach (var triple in changedTriples)
            {
                triples.Remove(triple[0]);
                triples.Add(triple[1]);
            }
        }
Ejemplo n.º 8
0
 private RDFTriple readTriples()
 {
     int mark=input.setHardMark();
     int ch=input.read();
     #if DEBUG
     if(!((ch>=0) ))throw new InvalidOperationException("ch>=0");
     #endif
     input.setMarkPosition(mark);
     RDFTerm subject=readObject(false);
     if(!skipWhitespace())throw new ParserException();
     if(input.read()!='<')throw new ParserException();
     RDFTerm predicate=RDFTerm.fromIRI(readIriReference());
     if(!skipWhitespace())throw new ParserException();
     RDFTerm obj=readObject(true);
     skipWhitespace();
     if(input.read()!='.')throw new ParserException();
     skipWhitespace();
     RDFTriple ret=new RDFTriple(subject,predicate,obj);
     endOfLine(input.read());
     return ret;
 }
Ejemplo n.º 9
0
 /**
    * A lax comparer of RDF triples which doesn't compare
    * blank node labels
    *
    * @param a
    * @param b
    *
    */
 private static bool laxEqual(RDFTriple a, RDFTriple b)
 {
     if(a==null)return (b==null);
     if(a.Equals(b))return true;
     if(a.getSubject().getKind()!=b.getSubject().getKind())
       return false;
     if(a.getObject().getKind()!=b.getObject().getKind())
       return false;
     if(!a.getPredicate().Equals(b.getPredicate()))
       return false;
     if(a.getSubject().getKind()!=RDFTerm.BLANK){
       if(!a.getSubject().Equals(b.getSubject()))
     return false;
     }
     if(a.getObject().getKind()!=RDFTerm.BLANK){
       if(!a.getObject().Equals(b.getObject()))
     return false;
     }
     return true;
 }