// Author: Dwivedi, Ajay kumar
// Adwiv@Yahoo.com
using System;
using System.Xml;
using System.Xml.Serialization;
namespace System.Xml.Schema
{
///
/// Summary description for XmlSchemaIdentityConstraint.
///
public class XmlSchemaIdentityConstraint : XmlSchemaAnnotated
{
private XmlSchemaObjectCollection fields;
private string name;
private XmlQualifiedName qName;
private XmlSchemaXPath selector;
private int errorCount = 0;
public XmlSchemaIdentityConstraint()
{
fields = new XmlSchemaObjectCollection();
qName = XmlQualifiedName.Empty;
}
[XmlElement("field",typeof(XmlSchemaXPath),Namespace="http://www.w3.org/2001/XMLSchema")]
public XmlSchemaObjectCollection Fields
{
get{ return fields; }
}
[XmlElement("selector",typeof(XmlSchemaXPath),Namespace="http://www.w3.org/2001/XMLSchema")]
public XmlSchemaXPath Selector
{
get{ return selector; }
set{ selector = value; }
}
[System.Xml.Serialization.XmlAttribute("name")]
public string Name
{
get{ return name; }
set{ name = value; }
}
[XmlIgnore]
public XmlQualifiedName QualifiedName
{
get{ return qName; }
}
///
/// 1. name must be present
/// 2. selector and field must be present
///
[MonoTODO]
internal int Compile(ValidationEventHandler h, XmlSchemaInfo info)
{
if(Name == null)
error(h,"Required attribute name must be present");
else if(!XmlSchemaUtil.CheckNCName(this.name))
error(h,"attribute name must be NCName");
else
this.qName = new XmlQualifiedName(Name,info.targetNS);
//TODO: Compile Xpath.
if(Selector == null)
error(h,"selector must be present");
if(Fields.Count == 0)
error(h,"atleast one field value must be present");
if(this.Id != null && !XmlSchemaUtil.CheckID(Id))
error(h, "id must be a valid ID");
return errorCount;
}
internal void error(ValidationEventHandler handle, string message)
{
errorCount++;
ValidationHandler.RaiseValidationError(handle, this, message);
}
}
}