Ejemplo n.º 1
0
        public NormalizedRdf NormalizeRdf(HashSet <Triple> triples)
        {
            var           nState            = new NormalizationState();
            var           normalizedTriples = new HashSet <Triple>();
            List <string> hashList;

            foreach (var t in triples) //4.4.2 2)
            {
                if (t.Subject.IsBlankNode())
                {
                    AddEntryToDictionaryList(nState.BNodesToQuads, t.Subject.AsBlankNode().ValueAsString(), t);
                }
                if (t.Object.IsBlankNode())
                {
                    AddEntryToDictionaryList(nState.BNodesToQuads, t.Object.AsBlankNode().ValueAsString(), t);
                }
            }
            var nonNormalizedNodes = new List <string>(nState.BNodesToQuads.Keys); //4.4.2 3)
            var simple             = true;                                         //4.4.2 4)

            while (simple)
            {
                simple = false;                                              //4.4.2 5.1)
                nState.HashToBNodes.Clear();                                 //4.4.2 5.2)
                foreach (var bN in nonNormalizedNodes)                       //4.4.2 5.3)
                {
                    var hash = HashFirstDegree(bN, nState.BNodesToQuads);    //4.4.2 5.3.1) --> 4.6.2
                    AddEntryToDictionaryList(nState.HashToBNodes, hash, bN); //4.4.2 5.3.2)
                }
                hashList = new List <string>(nState.HashToBNodes.Keys);
                hashList.Sort();
                foreach (var h in hashList)                                                //4.4.2 5.4)
                {
                    if (nState.HashToBNodes[h].Count <= 1)                                 //4.4.2 5.4.1)
                    {
                        nState.CanonicalIssuer.IssueIdentifier(nState.HashToBNodes[h][0]); //4.4.2 5.4.2)
                        nonNormalizedNodes.Remove(nState.HashToBNodes[h][0]);              //4.4.2 5.3)
                        nState.HashToBNodes.Remove(h);                                     //4.4.2 5.4.4)
                        simple = true;                                                     //4.4.2 5.4.5)
                    }
                }
            }
            hashList = new List <string>(nState.HashToBNodes.Keys);
            hashList.Sort();
            foreach (var h in hashList)
            {
                var hashPathList = new List <(string, IdentifierIssuer)>();
                foreach (var identifier in nState.HashToBNodes[h])
                {
                    if (nState.CanonicalIssuer.IsIssued(identifier)) //4.4.2 6.2.1)
                    {
                        continue;
                    }
                    var tIssuer = new IdentifierIssuer("_:b"); //4.4.2 6.2.2)
                    tIssuer.IssueIdentifier(identifier);       //4.4.2 6.2.3)
                    hashPathList.Add(HashNDegree(identifier, nState, tIssuer));
                }
                hashPathList.Sort(delegate((string, IdentifierIssuer)x, (string, IdentifierIssuer)y) { return(String.Compare(x.Item1, y.Item1)); });
Ejemplo n.º 2
0
 public NormalizationState(string prefix = "_:c14n")
 {
     CanonicalIssuer = new IdentifierIssuer(prefix);
     BNodesToQuads   = new Dictionary <string, List <Triple> >();
     HashToBNodes    = new Dictionary <string, List <string> >();
 }
Ejemplo n.º 3
0
 private IdentifierIssuer(IdentifierIssuer i)
 {
     _identifierPrefix = i._identifierPrefix;
     IdentifierCounter = i.IdentifierCounter;
     IssuedIdentifiers = new Dictionary <string, string>(i.IssuedIdentifiers);
 }