private RDFProperty GetNodeData(XmlNode node) { // Go up to parent node XmlNode propertyNode = node.ParentNode; RDFProperty data = new RDFProperty(); // Set name data.Name = propertyNode.Attributes[DAMLConstants.RDF_ID].Value; // Set Domain data.Domain = propertyNode.SelectSingleNode(DAMLConstants.RDFS_DOMAIN, m_mgr).Attributes[DAMLConstants.RDF_RESOURCE].Value; // Set Range data.Range = propertyNode.SelectSingleNode(DAMLConstants.RDFS_RANGE, m_mgr).Attributes[DAMLConstants.RDF_RESOURCE].Value; // Set SubPropertyOf data.SubPropertyOf = propertyNode.SelectSingleNode(DAMLConstants.RDFS_SUBPROPERTYOF, m_mgr).Attributes[DAMLConstants.RDF_RESOURCE].Value; // Fill in sameValueAs data (if any) XmlNode sameValueAsNode = propertyNode.SelectSingleNode(DAMLConstants.DAML_SAMEVALUESAS, m_mgr); if (sameValueAsNode != null) { data.SameValueAs = sameValueAsNode.Attributes[DAMLConstants.RDF_RESOURCE].Value; } return(data); }
public void AddParameter(RDFProperty data) { m_arrParameters.Add(data); }
public void AddCoOutput(RDFProperty data) { m_arrCoOutputs.Add(data); }
public void AddCoCondition(RDFProperty data) { m_arrCoConditions.Add(data); }
public void AddConditionalOutput(RDFProperty data) { m_arrConditionalOutputs.Add(data); }
public void AddEffect(RDFProperty data) { m_arrEffects.Add(data); }
public void AddPrecondition(RDFProperty data) { m_arrPreconditions.Add(data); }
// AddXXXX public void AddInput(RDFProperty data) { m_arrInputs.Add(data); }
public DAMLProcess GetProcessData(string strProcessName, enuProcessType processType) { DAMLProcess retVal = new DAMLProcess(); try { XmlNode root = m_doc.DocumentElement; string strBaseUri = GetNamespaceBaseUri(DAMLConstants.PROCESS_NS); string strUri = ""; strUri = strBaseUri; switch (processType) { case enuProcessType.AtomicProcess: strUri += DAMLConstants.DAML_ATOMIC_PROCESS; break; case enuProcessType.CompositeProcess: strUri += DAMLConstants.DAML_COMPOSITE_PROCESS; break; case enuProcessType.SimpleProcess: strUri += DAMLConstants.DAML_SIMPLE_PROCESS; break; default: throw new ArgumentException("Invalid processType value"); } ; string strXPath = DAMLConstants.DAML_CLASS + "[@" + DAMLConstants.RDF_ID + "='" + strProcessName + "']" + "/" + DAMLConstants.RDFS_SUBCLASSOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strUri + "']"; XmlNode processNode = root.SelectSingleNode(strXPath, m_mgr).ParentNode; // No such process exists so just exit - should throw exception since // returned DAMLProcess is useless if (processNode == null) { return(retVal); } // Set process name retVal.Name = processNode.Attributes[DAMLConstants.RDF_ID].Value; // Set process type retVal.ProcessType = processType; // Get inputs from querying RDFProperty nodes in document strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.INPUT + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']"; XmlNodeList lstNodes = root.SelectNodes(strXPath, m_mgr); foreach (XmlNode node in lstNodes) { RDFProperty data = GetNodeData(node); retVal.AddInput(data); } // Get additional inputs from the process node itself // they may be hidden under restictions tagged with // daml:sameValueAs strXPath = DAMLConstants.DAML_CLASS + "[@" + DAMLConstants.RDF_ID + "='" + retVal.Name + "']" + "/" + DAMLConstants.RDFS_SUBCLASSOF + "/" + DAMLConstants.DAML_RESTRICTION + "/" + DAMLConstants.DAML_ON_PROPERTY + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.INPUT + "']" + "/" + "following-sibling::" + DAMLConstants.DAML_SAMEVALUESAS; lstNodes = root.SelectNodes(strXPath, m_mgr); foreach (XmlNode node in lstNodes) { string strSameValueAs = node.Attributes[DAMLConstants.RDF_RESOURCE].Value; strSameValueAs = strSameValueAs.Trim(new char[] { '#' }); // Go get RDFProperty data strXPath = DAMLConstants.RDF_PROPERTY + "[@" + DAMLConstants.RDF_ID + "='" + strSameValueAs + "']" + "/" + DAMLConstants.RDFS_DOMAIN; XmlNode domainNode = root.SelectSingleNode(strXPath, m_mgr); // Add to list of inputs if (domainNode != null) { RDFProperty data = GetNodeData(domainNode); retVal.AddInput(data); } } // Get outputs strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.OUTPUT + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']"; lstNodes = root.SelectNodes(strXPath, m_mgr); foreach (XmlNode node in lstNodes) { RDFProperty data = GetNodeData(node); retVal.AddOutput(data); } // Get preconditions strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.PRECONDITION + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']"; lstNodes = root.SelectNodes(strXPath, m_mgr); foreach (XmlNode node in lstNodes) { RDFProperty data = GetNodeData(node); retVal.AddPrecondition(data); } // Get effects strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.EFFECT + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']"; lstNodes = root.SelectNodes(strXPath, m_mgr); foreach (XmlNode node in lstNodes) { RDFProperty data = GetNodeData(node); retVal.AddEffect(data); } // Get conditional outputs strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.CONDITIONAL_OUTPUT + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']"; lstNodes = root.SelectNodes(strXPath, m_mgr); foreach (XmlNode node in lstNodes) { RDFProperty data = GetNodeData(node); retVal.AddConditionalOutput(data); } // Get co-conditions strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.CO_CONDITION + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']"; lstNodes = root.SelectNodes(strXPath, m_mgr); foreach (XmlNode node in lstNodes) { RDFProperty data = GetNodeData(node); retVal.AddCoCondition(data); } // Get co-outputs strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.CO_OUTPUT + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']"; lstNodes = root.SelectNodes(strXPath, m_mgr); foreach (XmlNode node in lstNodes) { RDFProperty data = GetNodeData(node); retVal.AddCoOutput(data); } // Get parameters strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.PARAMETER + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']"; lstNodes = root.SelectNodes(strXPath, m_mgr); foreach (XmlNode node in lstNodes) { RDFProperty data = GetNodeData(node); retVal.AddParameter(data); } // For each input, fill the process' InputRestrictionMap // search on process name if (retVal.HasInputs) { foreach (RDFProperty Input in retVal.Inputs) { int nRestriction = GetInputRestrictions(retVal.Name, Input.Name); if (nRestriction == 0) { nRestriction = DEFAULT_RESTRICTION; } retVal.AddInputRestriction(Input.Name, nRestriction); } } // If we are dealing with a complex process we must go get // the substeps - need to get process:<type> data if (processType == enuProcessType.CompositeProcess) { retVal.SubTaskType = GetProcessSubTaskType(retVal.Name); retVal.AddSubProcess(GetSubProcesses(retVal.Name)); } } catch (Exception e) { m_EvtLog.WriteEntry(e.Message, EventLogEntryType.Error); } return(retVal); }