Ejemplo n.º 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SObjectLink"/> class.
 /// </summary>
 /// <param name="x">
 /// The x.
 /// </param>
 /// <param name="source">
 /// The source.
 /// </param>
 public SObjectLink(XElement x, SNode source)
 {
     // _Definition.Id = x.Name;
     Source    = source;
     _targetId = SNode.Coding(x.Attribute(SNames.rdfresource).Value);
     System.DateTime tt1 = System.DateTime.Now;
     if (source._rDataModel is SOntologyModel)
     {
         Definition = ROntologyPropertyDefinition.Abstract(x.Name);
     }
     else
     {
         var def = source._rDataModel.OntologyModel.GetOntologyNode(x.Name.ToString()) as SGraph.ROntologyObjectPropertyDefinition;
         if (def != null)
         {
             Definition = def;
         }
         else
         {
             Definition = source.Definition.DirectPropertyDefinitions <ROntologyObjectPropertyDefinition>()
                          .FirstOrDefault(propDef => propDef.Id == x.Name.ToString())
                          ?? source._rDataModel
                          .OntologyModel
                          .InsertNew <ROntologyObjectPropertyDefinition>(x.Name,
                                                                         source.Definition.Id,
                                                                         Target != null
                                                                 ? Target.Definition.Id
                                                                 : XName.Get("entity"),
                                                                         false);
         }
     }
     //Definition = source._rDataModel is SOntologyModel
     //                 ? ROntologyPropertyDefinition.Abstract(x.Name)
     //                 : source.Definition.DirectPropertyDefinitions<ROntologyObjectPropertyDefinition>()
     //                       .FirstOrDefault(propDef => propDef.Id == x.Name.ToString())
     //                       ?? source._rDataModel
     //                       .OntologyModel
     //                       .InsertNew<ROntologyObjectPropertyDefinition>(x.Name,
     //                                                                     source.Definition.Id,
     //                                                                     Target != null
     //                                                                     ? Target.Definition.Id
     //                                                                     : "entity",
     //                                                                     false);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Подготовка ресурса для того, чтобы образовать запись. Если ресурс занят, то он освобождается
        /// </summary>
        /// <param name="x">
        /// The x.
        /// </param>
        /// <returns>
        /// </returns>
        protected SResource PrepareResource(XElement x)
        {
            XName     item_id = SNode.Coding(x.Attribute(SNames.rdfabout).Value);
            SResource resource;

            if (this.resources.ContainsKey(item_id))
            {
                resource = this.resources[item_id];
                // Если уничтоженный, то возвращается null
                //if (resource.Deleted) return null;
                // Если есть контент, то он освобождается
                if (resource._content != null)
                {
                    FreeContent(resource);
                }
            }
            else
            {
                resource = new SResource(item_id);
                resources.Add(item_id, resource);
            }
            return(resource);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Добавление записи формата rdf или оператора удаления или замены в модель.
        /// </summary>
        /// <param name="xOperator">
        /// xml представление записи.
        /// </param>
        public void Include(XElement xOperator)
        {
            XName      rname          = xOperator.Name;
            XAttribute userDocumentId = xOperator.Attribute(SNames.AttUsersWorkRDFDocumentId);

            if (userDocumentId != null)
            {
                // var docUri = GetItemById(userDocumentId.Value).Uri();
                userDocumentId.Remove();
                AddToUserWorkDoc(xOperator, userDocumentId.Value);
                // LOG.WriteLine("\n\n" + DateTime.Now.ToString() + " " + userDocumentId.Value + "\n" + xOperator.ToString());
            }
            if (rname == SNames.TagDelete)
            {
                if (!string.IsNullOrEmpty(xOperator.Attribute(SNames.AttItem_id).Value))
                {
                    XName id = SNode.Coding(xOperator.Attribute(SNames.AttItem_id).Value);
                    this.DeleteItem(id);
                }
            }
            else if (rname == SNames.TagSubstitute)
            {
                if (!string.IsNullOrEmpty(xOperator.Attribute(SNames.AttOld_id).Value) &&
                    !string.IsNullOrEmpty(xOperator.Attribute(SNames.AttNew_id).Value))
                {
                    XName old_id = SNode.Coding(xOperator.Attribute(SNames.AttOld_id).Value);
                    XName new_id = SNode.Coding(xOperator.Attribute(SNames.AttNew_id).Value);
                    this.SubstituteItem(old_id, new_id);
                }
            }
            else
            {
                if (string.IsNullOrEmpty(xOperator.Attribute(SNames.rdfabout.ToString()).Value))
                {
                    return;
                }
                XName element_id = SNode.Coding(xOperator.Attribute(SNames.rdfabout.ToString()).Value);
                // Если этот идентификатор неопределен, то ничего не делаем
                // если нет ресурса, то вставляем айтем
                if (!this.resources.ContainsKey(element_id))
                {
                    this.IncludeItem(xOperator); return;
                }
                SResource resource = this.resources[element_id];
                // если ресурс уничтожен, то элемент не вставляем
                if (resource.Deleted)
                {
                    return;
                }
                // смотрим контент ресурса
                SNode node = resource._content;
                // если контента нет, то вставляем элемент
                if (node == null)
                {
                    this.IncludeItem(xOperator); return;
                }
                // если (контент есть)&
                // определяемый ид не совпадает с идентификатором узла,
                // НО определяемый совпадает с последним, ТО меняем контент на новый
                if (element_id != node.Id)
                { // Здесь должно осуществиться и другое условие
                    if (element_id == resource._lastId)
                    {
                        this.IncludeItem(xOperator);
                    }
                    // иначе данные устаревшие и не фиксируются
                }
                else
                { // Здесь замена осуществится только если временная отметка нового определения позже старой
                    // выявляем временную отметку у элемента
                    DateTime   modificationTime = DateTime.MinValue;
                    XAttribute mt = xOperator.Attribute(SNames.AttModificationTime);
                    if (mt != null && DateTime.TryParse(mt.Value, out modificationTime) && modificationTime > node.modificationTime)
                    {
                        this.IncludeItem(xOperator);
                    }
                }
            }
        }