<DocumentDef>

<!-- This is the XML Bookmarks Exchange Language, version 1.0.  It
     should be used with the formal public identifier:

        +//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML

     One valid system identifier at which this DTD will remain
     available is:

        http://www.python.org/topics/xml/dtds/xbel-1.0.dtd

     More information the on the DTD, including reference
     documentation, is available at:

        http://www.python.org/topics/xml/xbel/

    Attributes which take date/time values should encode the value
    according to the W3C NOTE on date/time formats:

        http://www.w3.org/TR/NOTE-datetime
  -->

<!-- Customization entities.  Define these before "including" this DTD
     to create "subclassed" DTDs.
  -->

<ElementDecl Name='xbel'>
	<More xml:space='preserve' >The XML content model was 
		(title?, info?, desc?, (%nodes.mix;)*) 
	</More>
	
	<Model>
			<Seq Frequency='Required'>
				<Ref Frequency='Optional' Element='title' />
				<Ref Frequency='Optional' Element='info' />
				<Ref Frequency='Optional' Element='desc' />
			<Choice Frequency='ZeroOrMore'>
				<Ref  Element='bookmark' />
				<Ref  Element='folder' />
				<Ref  Element='alias' />
				<Ref Element='separator' />
			</Choice>
			</Seq>
	</Model>
<AttGrp >
	<More xml:space='preserve' >The XML attribute list was 
		%node.att;
            version  CDATA      #FIXED "1.0"

	</More>
 	<AttDef Name='id' 
		Type='ID' >
	</AttDef>
	<AttDef Name='added' 
		Type='CData' >
	</AttDef>
	<AttDef Name='version' 
		Type='CData' 
		AttValue="1.0" >
	</AttDef>
</AttGrp>
</ElementDecl>

<ElementDecl Name='title'>
	<More xml:space='preserve' >The XML content model was 
		(#PCDATA) 
	</More>
	
	<Model>
		<PCdata />
	</Model>
<AttGrp >
</AttGrp>
</ElementDecl>

<!--=================== Info ======================================-->

<ElementDecl Name='info'>
	<More xml:space='preserve' >The XML content model was 
		(metadata+) 
	</More>
	
	<Model>
			<Seq Frequency='Required'>
				<Ref  Frequency='OneOrMore' Element='metadata' />
			</Seq>
	</Model>
<AttGrp >
</AttGrp>
</ElementDecl>

<ElementDecl Name='metadata'>
	<More xml:space='preserve' >The XML content model was 
		EMPTY 
	</More>
	
	<Model>
		<Empty />
	</Model>
<AttGrp >
	<More xml:space='preserve' >The XML attribute list was 
		owner    CDATA      #REQUIRED

	</More>
 	<AttDef Name='owner' 
		Type='CData' 
		Required='Yes' >
	</AttDef>
</AttGrp>
</ElementDecl>

<!--=================== Folder ====================================-->

<ElementDecl Name='folder'>
	<More xml:space='preserve' >The XML content model was 
		(title?, info?, desc?, (%nodes.mix;)*) 
	</More>
	
	<Model>
			<Seq Frequency='Required'>
				<Ref Frequency='Optional' Element='title' />
				<Ref Frequency='Optional' Element='info' />
				<Ref Frequency='Optional' Element='desc' />
			<Choice Frequency='ZeroOrMore'>
				<Ref  Element='bookmark' />
				<Ref  Element='folder' />
				<Ref  Element='alias' />
				<Ref Element='separator' />
			</Choice>
			</Seq>
	</Model>
<AttGrp >
	<More xml:space='preserve' >The XML attribute list was 
		%node.att;
            folded   (yes|no)   'yes'   

	</More>
 	<AttDef Name='id' 
		Type='ID' >
	</AttDef>
	<AttDef Name='added' 
		Type='CData' >
	</AttDef>
	<AttDef Name='folded' 
		Type='Enumerated' 
		AttValue='yes' >
			<Enumeration name='yes' />
			<Enumeration name='no' />
	</AttDef>
</AttGrp>
</ElementDecl>

<!--=================== Bookmark ==================================-->

<ElementDecl Name='bookmark'>
	<More xml:space='preserve' >The XML content model was 
		(title?, info?, desc?) 
	</More>
	
	<Model>
			<Seq Frequency='Required'>
				<Ref Frequency='Optional' Element='title' />
				<Ref Frequency='Optional' Element='info' />
				<Ref  Frequency='Optional' Element='desc' />
			</Seq>
	</Model>
<AttGrp >
	<More xml:space='preserve' >The XML attribute list was 
		%node.att;
            %url.att;

	</More>
 	<AttDef Name='id' 
		Type='ID' >
	</AttDef>
	<AttDef Name='added' 
		Type='CData' >
	</AttDef>
	<AttDef Name='href' 
		Type='CData' 
		Required='Yes' >
	</AttDef>
	<AttDef Name='visited' 
		Type='CData' >
	</AttDef>
	<AttDef Name='modified' 
		Type='CData' >
	</AttDef>
</AttGrp>
</ElementDecl>

<ElementDecl Name='desc'>
	<More xml:space='preserve' >The XML content model was 
		(#PCDATA) 
	</More>
	
	<Model>
		<PCdata />
	</Model>
<AttGrp >
</AttGrp>
</ElementDecl>

<!--=================== Separator =================================-->

<ElementDecl Name='separator'>
	<More xml:space='preserve' >The XML content model was 
		EMPTY 
	</More>
	
	<Model>
		<Empty />
	</Model>
<AttGrp >
</AttGrp>
</ElementDecl>

<!--=================== Alias =====================================-->

<!-- <alias> elements correspond to Netscape bookmark aliases.  The
     required "ref" attribute must refer to a <bookmark> or <folder>
     element.  Note that MSIE aliases can refer to folders, so that is
     supported in XBEL.  Applications must be careful about traversing
     aliases to folders to avoid improper recursion through circular
     data structures.
  -->

<ElementDecl Name='alias'>
	<More xml:space='preserve' >The XML content model was 
		EMPTY 
	</More>
	
	<Model>
		<Empty />
	</Model>
<AttGrp >
	<More xml:space='preserve' >The XML attribute list was 
		ref       IDREF     #REQUIRED

	</More>
 	<AttDef Name='ref' 
		Type='ID' 
		Required='Yes' >
	</AttDef>
</AttGrp>
</ElementDecl>
</DocumentDef>