Q:

How to model the Document class? 

I'm using a document class.  The first time, it was for the common files with methods like New(), Open(), Save(). 
New() and Open() returns a IDocument.  Save doesn't return anything. 
As you can see in the diagram above. 

In my program, it must use xml or zip file extension.  For the xml files there's any problem, all the methods are for it.  But I've got problems with zip file.  I was planning to do this, when the program executes Open(), extract all the xml files from the zip and returns all the files.  But my Open() only returns a document. 
I was planning of creating another property called CanExtract(), but maybe this is not a good idea.  I just want to create a good design and understandable. 

A:

Change your Open() function to return an IEnumerable of IDocument:
public IEnumerable<IDocument> Open()

instead of
public IDocument Open()

Then when you open an xml file it returns an IEnumerable containing 1 IDocument and you can just use that one.  When you open the zip file it returns all of the files in the zip as IDocuments inside the IEnumerable.