         deinit{
             xmlSchemaFreeValidCtxt(self.context)
         }
-        func validate(doc:XmlDoc) -> Bool {
+        public func validate(doc:XmlDoc) -> Bool {
             return xmlSchemaValidateDoc(self.context, doc.doc) == 0
         }
     }
     
-    func validate(doc:XmlDoc) -> Bool {
+    public func validate(doc:XmlDoc) -> Bool {
         let validater = XmlSchemaValidater(schema: self)
         return validater.validate(doc)
     }

}

// TODO: impliment
class XmlNameSpace {
    private var namesapce: xmlNsPtr = nil
}

class XmlAttribute {
    private var attribute: xmlAttrPtr = nil
    init ( attribute: xmlAttrPtr) {
        self.attribute = attribute
    }
    deinit{
        //        xmlFreeProp(self.attribute)
    }
    var IsNil:Bool {
        get {
            return self.attribute == nil
        }
    }
    var name : String {
        get {
            return String.fromLIBXMLString(attribute.memory.name)
        }
    }
    var value : String {
        get {
            return String.fromLIBXMLString(attribute.memory.children.memory.content)
        }
    }
    var type : xmlAttributeType {
        get {
            return attribute.memory.atype
        }
    }
    func next() -> XmlAttribute {
        return XmlAttribute(attribute: self.attribute.memory.next)
    }
    func prev() -> XmlAttribute {
        return XmlAttribute(attribute: self.attribute.memory.prev)
    }
}

extension XmlAttribute : CustomStringConvertible {
    var description : String {
        get {
            return "type=" + self.type.description + ",name=" + self.name + ",value=" + self.value
        }

        }
    }
    
    public func parse(path: String){
        let parser = XmlSchemaParser(path:path)
        if self.schema != nil {
            xmlSchemaFree(self.schema)
