Finally Got a New Phone

Sunday, 13 July 2008 23:48 by frimbob

After putting the job off for a few months I have have a new phone (Nokia 6500 Slide), it was really an impulse buy at $400 from my local Vodafone store.

blog_130708

I was looking for a phone with Bluetooth (very common now) and a camera above 3 megapixel , both of which this had. It is also a 3G phone, which helps with the future proof. It also looks cool to.

The coolest feature is not actually related to the phone, I purchased a new mp3 player some weeks ago the Samsung  YP-T10, this player also contains a Bluetooth option.

This Bluetooth option allows the phone to connect to the mp3 player as a remote headset. The T10 can then be used to make and answer incoming calls using its own inbuilt microphone.

I did have a problem previously of missing calls when listening to mp3's, not any more :-) 

Interesting Links

HTML or XHTML: Does It Really Matter?

http://www.sitepoint.com/article/html-or-xhtml-does-it-matter

I found this article an interesting read , however I disagree with James Edwards option on XHTML's legacy, simply forcing cleaner syntax on the Internet is an achievement in itself, it really does not matter that the content type is normal html, using xhtml valuators can help to overcome issues with testing and the benefits that clean markup provide in improving  browser page rendering-consistency is worth learning a few new syntax rules.

Handling Flash Crowds from your Garage

http://www.usenix.org/events/usenix08/tech/full_papers/elson/elson_html/index.html

This is a research article on developing web-sites to handle large surges in traffic, what the author called Flash Crowds, I am only part way through, the main content of the article is short analysis of current content distribution networks, a good read so far.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:   , , , ,
Categories:   General | Life and Stuff
Actions:   E-mail | Permalink | Comments (487) | Comment RSSRSS comment feed

New Site Theme

Saturday, 28 June 2008 12:43 by frimbob

I got a little bored today, so I decided to give a new theme a chance. As a base theme I download a theme called Envision. I found it in the list of themes on the blogengine.net homepage. The theme seemed to have the potential to be mine with a little tweaking of course. An example of the original is below. blog_270608

Why did I like this theme, well it is based on a light colour scheme, that would go well with my new colours. It's a 2 column page , my previous was a two column fluid layout, so I wanted something different. I love grey background and after examining the image files, I determined that I could re-colour the header, footer ,menu and the the main content frame background.

Out a pull Gimp and 2 hours of 'trial and error' I arrive at what you see now.

Conditional Style Sheets


This is the first time that I used a conditional Style-sheet. A quick explanation is necessary. HTML conditional comments are an IE propriety ability, they are used to target different versions of Internet Explorer. Other browsers will ignore the comments and using conditionals is considered a safe Hack.

   1: <!--[if IE]>
   2:   <link href="/blog/themes/Envision.1.0/css.axd?name=IE.css" 
   3:                         rel="stylesheet" type="text/css" />
   4: <![endif]-->

IE  interprets this conditional and if true will print the html inside as normal content, other browsers will treat the conditional as a comment only and will not evaluate the expression.

By using a link statement I was able to create and IE only CSS style sheet to override settings in the master Style-Sheet that would not render correctly in versions of IE.

Current I am using rendered content using cssclass:after attribute selector, which IE7 and below do not support, IE will ignore that declaration but will miss out on necessary css settings, by using and IE only Sheet I can override the cssClass and add back the missing details (if you supply cssclass:after it will only apply css you declare to the attribute value of 'content:').

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Word Menus Update:

Friday, 20 June 2008 22:19 by frimbob

I have modified the code that I used to create a word menu to build a dynamic version of the previous code. The Application uses an xml file to store the names and location of a list of word-documents that need a menu button.

XML_File


   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <configuration>
   3:   <templates>
   4:     <name location="c:\template1.dot">Template1</name>
   5:     <name location="c:\template2.dot">Template2</name>
   6:     <name location="c:\template3.dot">Template3</name>
   7:     <name location="c:\template4.dot">Template4</name>
   8:   </templates>
   9: </configuration>

I then built a simple class to load and parse the xml file. The class uses and event handler to send the results to other class that are registered. (really an experiment for a delegate call back used in implementing patters like the observer, just for the practice).

ConfigData


   1: Imports System.Xml
   2: Imports System.Xml.Serialization
   3: Imports System.IO
   4:  
   5: '<summary> Reads a Config XmlFile and provides its data as Properties </summary>
   6: Public Class ConfigFile
   7:  
   8: #Region "Private Members"
   9:  
  10:     'Private Members
  11:     Dim TemplateNames_Collection As New System.Collections.Generic.Dictionary(Of String, String)
  12:     Dim objxmlDocument As New XmlDocument
  13:     Dim objRootNode As XmlNode
  14:  
  15:     Delegate Sub UpdateHandler(ByVal sender As Object)
  16:     Public Event UpdateEvent As UpdateHandler
  17:  
  18: #End Region
  19:  
  20: #Region "Properties"
  21:  
  22:     'Declare Properties
  23:     ReadOnly Property TemplateCollection() As System.Collections.Generic.Dictionary(Of String, String)
  24:         Get
  25:             Return TemplateNames_Collection
  26:         End Get
  27:     End Property
  28:  
  29: #End Region
  30:  
  31: #Region "Public Methods"
  32:  
  33:     Public Sub ReadXMLFile()
  34:         'declarations
  35:         Dim objRootChildNodes As XmlNodeList
  36:  
  37:         'get values out of the file and into the dataStructure
  38:         objRootChildNodes = objRootNode.ChildNodes
  39:  
  40:         For Each xmlnode As System.Xml.XmlNode In objRootChildNodes
  41:             For Each xmlNode2 As System.Xml.XmlNode In xmlnode.ChildNodes
  42:                 Dim strNodeValue As String = xmlNode2.InnerText
  43:                 Dim strNodeLocation As String = xmlNode2.Attributes.ItemOf(0).Value
  44:                 TemplateNames_Collection.Add(strNodeValue, strNodeLocation)
  45:             Next
  46:         Next
  47:  
  48:         RaiseEvent UpdateEvent(Me) ' Call the update Event
  49:  
  50:     End Sub
  51:  
  52: #End Region
  53:  
  54: #Region "Constructor"
  55:  
  56:     Public Sub New()
  57:         'loadtheXmlFile 
  58:         objxmlDocument.Load("C:\Users\Guest\Documents\Visual Studio 2005\Projects\WordAddIn1\WordAddIn1\Custom Classes\XMLFile1.xml")
  59:         objRootNode = objxmlDocument.DocumentElement
  60:     End Sub
  61:  
  62: #End Region
  63:  
  64:  
  65: End Class
  66:  

I used the collection in the above class in a For Each loop.  This loop creates a new commandbutton , which is then stored in an array declared at the class level. If the button object where not stored in the array they would go out of scope when the function ends and only the last instance of the button would still exist.

MenuBuilder


   1: Public Class MenuBuilder
   2:  
   3: #Region "Declarations"
   4:  
   5:     Private TemplateCollection As System.Collections.Generic.Dictionary(Of String, String)
   6:     Private MenuTag As String = "Air Stories Helper Program"
   7:     Dim menuCommand() As Office.CommandBarButton
   8: #End Region
   9:  
  10: #Region "properties"
  11:     Private thisapp As Word.Application
  12:     Public Property ThisApplication() As Word.Application
  13:         Get
  14:             Return thisapp
  15:         End Get
  16:         Set(ByVal value As Word.Application)
  17:             thisapp = value
  18:         End Set
  19:     End Property
  20:  
  21: #End Region
  22:  
  23: #Region "Public Methods"
  24:     'loads the controls on the toolbar
  25:     Public Sub LoadData(ByVal subject As Object)
  26:         Dim configData As ConfigFile = TryCast(subject, ConfigFile)
  27:         If Not IsNothing(configData) Or Not IsDBNull(configData) Then
  28:             TemplateCollection = configData.TemplateCollection
  29:         End If
  30:     End Sub
  31:  
  32:  
  33:     Public Sub LoadControls()
  34:  
  35:         'Test for data
  36:         If Not IsNothing(TemplateCollection) Then
  37:             'check if menu bar exists function
  38:             Call CheckIfMenuBarExists()
  39:  
  40:             'load function
  41:             Call AddMenuBar()
  42:         Else
  43:             MessageBox.Show("No menu data present plese contant Administrator")
  44:  
  45:         End If
  46:     End Sub
  47:  
  48:     ' Create the menu, if it does not exist.
  49:     Private Sub AddMenuBar()
  50:         Try
  51:             Dim menuBar As Office.CommandBar = WordAddIn1.Globals.ThisAddIn.Application.CommandBars.ActiveMenuBar
  52:             Dim menuCaption As String = "AIR Template Menu"
  53:             Dim intcounter As Integer = 0
  54:  
  55:             If menuBar IsNot Nothing Then
  56:                 Dim cmdBarControl As Office.CommandBarPopup = Nothing
  57:                 Dim controlCount As Integer = menuBar.Controls.Count
  58:  
  59:                 ' Add the new menu.
  60:                 cmdBarControl = CType(menuBar.Controls.Add(Type:=Office.MsoControlType.msoControlPopup, Before:=controlCount, Temporary:=True),  _
  61:                     Office.CommandBarPopup)
  62:                 cmdBarControl.Caption = "AirStories"
  63:                 cmdBarControl.Tag = MenuTag
  64:  
  65:                 For Each item As String In TemplateCollection.Keys
  66:                     Dim Button As Office.CommandBarButton
  67:                     'Add the menu command.
  68:                     Button = CType(cmdBarControl.Controls.Add(Type:=Office.MsoControlType.msoControlButton, Temporary:=True), Office.CommandBarButton)
  69:                     With Button
  70:                         .Caption = item.ToString
  71:                         .Tag = item.ToString
  72:                         .FaceId = 300
  73:                     End With
  74:                     AddHandler Button.Click, AddressOf menuCommand_Click
  75:                     ReDim Preserve menuCommand(intcounter) ' re-size the array
  76:                     menuCommand(intcounter) = Button
  77:                     intcounter = intcounter + 1 ' increment the counter       
  78:                 Next
  79:  
  80:             End If
  81:         Catch ex As Exception
  82:             MessageBox.Show(ex.Message)
  83:         End Try
  84:     End Sub
  85:  
  86:  
  87: #Region "Constructor"
  88:     Public Sub New()
  89:  
  90:  
  91:     End Sub
  92: #End Region
  93:  
  94: #End Region
  95:  
  96: #Region "Private Methods"
  97:  
  98:     ' If the menu already exists, remove it.
  99:     Private Sub CheckIfMenuBarExists()
 100:         Try
 101:             Dim foundMenu As Office.CommandBarPopup = thisapp.Application.CommandBars.ActiveMenuBar.FindControl(Office.MsoControlType.msoControlPopup, Tag:=MenuTag, Visible:=True, Recursive:=True)
 102:             If foundMenu IsNot Nothing Then
 103:                 foundMenu.Delete(True)
 104:             End If
 105:  
 106:         Catch ex As Exception
 107:             MessageBox.Show(ex.Message)
 108:         End Try
 109:     End Sub
 110:  
 111:  
 112:     'Method to verify the template location
 113:     Private Function VerifyTemplateLoc(ByVal Template As String) As Boolean
 114:         Dim Applic As Word.Application = Globals.ThisAddIn.Application
 115:  
 116:         'split the file name and the location
 117:         Dim TemplateSplit() As String = Template.Split("\")
 118:         Dim fname As String = TemplateSplit(TemplateSplit.Length - 1)
 119:         Dim flocation As String = Template.Replace(fname, "")
 120:         flocation = flocation.Trim()
 121:  
 122:         'found bool
 123:         Dim found As Boolean = False 'default is false
 124:         Try
 125:             Applic.System.Cursor = Word.WdCursorType.wdCursorWait
 126:             With Applic.FileSearch
 127:                 .FileName = fname
 128:                 .LookIn = flocation
 129:                 .SearchSubFolders = True
 130:                 If .Execute() = 1 Then
 131:                     found = True
 132:                 Else
 133:                     found = False
 134:                 End If
 135:             End With
 136:         Finally
 137:             Applic.System.Cursor = Word.WdCursorType.wdCursorNormal
 138:         End Try
 139:         Return found 'return bool
 140:     End Function
 141:  
 142:     Private Sub Newdocument(ByVal location As String)
 143:         
 144:         MessageBox.Show(location.ToString)
 145:  
 146:     End Sub
 147:  
 148: #End Region
 149:  
 150: #Region "Event Handlers"
 151:  
 152:     'click event for our custom menu
 153:     Private Sub menuCommand_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, _
 154:         ByRef CancelDefault As Boolean)
 155:  
 156:         MessageBox.Show("woank")
 157:      End Sub
 158:  
 159:  
 160: #End Region
 161:  
 162:  
 163: End Class

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:   , ,
Categories:   Projects
Actions:   E-mail | Permalink | Comments (399) | Comment RSSRSS comment feed

Last Exam is Over

Friday, 20 June 2008 21:43 by frimbob

blog_200608Well  have finished my last exam , on Tuesday. It was for my XML for web-applications, class I must admit I am glad that was the last exam, now I get to work on some personal projects. How did I do? Well after some exam nerves I made a good recovery and think a credit mark deserving for that paper.

So Now What?

Well I have made a start by completing my wow memorial page, I added a JavaScript clock to count up the number of days 'World of WarCraft' free.

The Script

   1: //namespace declaration
   2: var CountUp = function ()
   3: { } //end of name space
   4:  
   5: // Class Declaration
   6: CountUp.Class = function () {
   7:     //private references
   8:     var currentTime=new Date()
   9:     var startingdate;
  10:     var timesup=false
  11:     var baseunit;
  12:     var result;
  13:     //private method:
  14:     var PrintResults = function(){
  15:         var strresults = " ";
  16:         //Display the result             
  17:         strresults += '<div style="width:300px; background-color:#383838; text-align:center; color:white; margin-bottom:15px; margin-top:5px;">'
  18:         strresults += '<div style="width:300px; font-size:120%; text-align:center; background-color: #5E3A3A; color:white;"> Number of Days Without WOW </div>'; //opend
  19:         strresults += result.days + ' :Days ';
  20:         strresults += result.hours +' :Hours ' ;
  21:         strresults += result.minutes + ' :Minutes ';
  22:         strresults += result.seconds + ' :Seconds ';
  23:         strresults += "</div>" //close 
  24:         document.getElementById("ClockDiv").innerHTML = strresults;         
  25:     } //end function 
  26:     return  { //the returned object here 
  27:         //public declarations (declare as below)
  28:         ExampleProperty: 1, // note need comma after 
  29:                 
  30:         //init function
  31:         init: function (time,baseunit) {
  32:             startingdate=new Date(time)
  33:             baseunit=baseunit
  34:         //Add call Function to the SetInterval 
  35:         setInterval(CountUp.Class.showTime,3000); 
  36:         //accessing private variable
  37:         //abc ="jfk"
  38:         },
  39:        //Public Functio
  40:         showTime:  function() {
  41:             currentTime.setSeconds(currentTime.getSeconds()+1);
  42:             var timediff=(currentTime - startingdate) /1000; //difference btw target date and current date, in seconds
  43:             var oneMinute=60; //minute unit in seconds
  44:             var oneHour=60*60; //hour unit in seconds
  45:             var oneDay=60*60*24; //day unit in seconds
  46:             var dayfield=Math.floor(timediff/oneDay);
  47:             var hourfield=Math.floor((timediff-dayfield*oneDay)/oneHour);
  48:             var minutefield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour)/oneMinute);
  49:             var secondfield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour-minutefield*oneMinute));
  50:             if (baseunit=="hours"){ //if base unit is hours, set "hourfield" to be topmost level
  51:                 hourfield=dayfield*24+hourfield;
  52:                 dayfield="n/a";
  53:             }
  54:             else if (baseunit=="minutes"){ //if base unit is minutes, set "minutefield" to be topmost level
  55:                 minutefield=dayfield*24*60+hourfield*60+minutefield;
  56:                 dayfield=hourfield="n/a";
  57:             }
  58:             else if (baseunit=="seconds"){ //if base unit is seconds, set "secondfield" to be topmost level
  59:                 var secondfield=timediff;
  60:                 dayfield=hourfield=minutefield="n/a";
  61:             }
  62:             result={days: dayfield, hours:hourfield, minutes:minutefield, seconds:secondfield};
  63:             // call print method
  64:             PrintResults();  
  65:         } //, (remove comment syntax if more than one function)
  66:         
  67:     };
  68: }(); // the parens here cause the anonymous function to execute and return
  69:  
  70: //initilize the object
  71: CountUp.Class.init("January 5,2008, 17:15:00","days"); 

It was not very difficult I used the YUI pattern that I posted about a few months ago, as the base with the int method registering the time function with a setInterval() at repeat of 1 seconds or so.  The time function finds the difference from the base date compared to now then builds a result object and calls a print method.

Also to note that I used the script found on dynamic drive here, as the base for the Set-time function, I basically re-coded for the YUI pattern and wrote my own display method. 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

First Exam is Over

Thursday, 12 June 2008 14:19 by frimbob

blog_120608_8
Well I am glad to say that my first exam is over, the class was OOP (object oriented programming), really a C++ language class. I did not find all too difficult and left with a good feeling, we were allocated 3 hours but I felt that it was just over 2 hours of work and considering that I was one of the last to leave after that time its probably true.

My Next Exam is for My Applications with XML class, on the Tuesday 17th June.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:  
Categories:   Life and Stuff
Actions:   E-mail | Permalink | Comments (326) | Comment RSSRSS comment feed

Jukebox Project

Thursday, 12 June 2008 14:01 by frimbob

Having bought a very large LCD monitor last December a 26 inch LCD monitor that is and just regretting it a little upon finding that it was really a television not  an up close and personal computer screen but it was cheap and very appealing at the time. Well I just could not let such a large screen go to waste.

The project build a Jukebox for my bedroom,  its got use my existing components , have a remote of sorts and be quiet and low energy as possible.

Existing Components


n2640wb_m 

Vewsonic 26inch LCD Monitor

 

 

 

 

 

 

blog_120608_4

 

 

VIA Mini-ITX ML 1000 

 

 

 

 

 

blog_120608_5 

 

Lian Li PC-9100

 

 

 

 

 

 

 

New Items


blog_120608

 

 

Logitech diNovo Mini

 

 

 

blog_120608_1

 

1GB PC2100 Memory

 

 

 

blog_120608_2

 

 

Pioneer Slime Line DVD-Burner

 

 

 

 

  blog_120608_3

 

 

 

ATA 320Gb HDD

 

 

 

The Software


There were 2 choices: blog_120608_6

 

MediaPortal

 

 

 

 

blog_120608_7

 

My-HTPC

 

Media Portal, is large well featured and very pretty but it is build for faster machines, on my setup all menus were un-responsive and this kills the application for a jukebox. I chose to use my-HTPC, its a shareware application that ceased in 2003 however it is an excellent front end for media and since I use media player classic for movies and DVD's I don't need these integrated features anyway.  The drawbacks are no support for play-lists and some odd control behaviour and the big one its no-longer in development.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:   , ,
Categories:   General | Life and Stuff | Projects
Actions:   E-mail | Permalink | Comments (444) | Comment RSSRSS comment feed

Some Extra Study

Thursday, 5 June 2008 12:49 by frimbob

With an exam coming up on XML technologies, I needed to review some exercises. So I have decided to mix in some work with my Office application Project.

Word can attach a schema to a document and using that schema VSTO can create host controls for each xmlnode, this allows context sensitive menus using the document pane in office 2003.

I quickly developed and xml file who's nodes represent all the information found in a common template which the office app will be built on.

   1: <?xml version="1.0" standalone="no" ?>
   2: <articles>
   3:     <editorsmsg>I dont like this</editorsmsg> <!-- one per file  must be optional-->
   4:     <article id="1"> <!--need to number article --> 
   5:         <publishdate>24/04/08</publishdate> <!-- A valid Date value -->
   6:         <datewritten>23/04/08</datewritten> <!-- A valid Date value -->
   7:         <headline>Something Aint doing well</headline> <!-- Text only -->
   8:         <sections> <!-- Must choose one no maxium -->
   9:             <section></section> 
  10:             <section></section>
  11:             <section></section>
  12:         </sections>
  13:         <story>its a long story with images</story>     <!-- will contain HTML markup and text data needing escaped -->
  14:     </article>
  15:     <article id="2"> 
  16:         <publishdate>24/04/08</publishdate>
  17:         <datewritten>23/04/08</datewritten>
  18:         <headline>Sell Sell Sell</headline>
  19:         <sections>
  20:             <section></section>
  21:             <section></section>
  22:             <section></section>
  23:         </sections>
  24:         <story>its a long story with images</story>    
  25:     </article>
  26:     <article id="3"> 
  27:         <publishdate>24/04/08</publishdate>
  28:         <datewritten>23/04/08</datewritten>
  29:         <headline>Dont buy this</headline>
  30:         <sections>
  31:             <section></section>
  32:             <section></section>
  33:             <section></section>
  34:         </sections>
  35:         <story>its a long story with images</story>    
  36:     </article>
  37: </articles> 

Above is a copy of the xml document. (it is not a valid document), it was just to allow me to build a schema against.

The Schema

   1: <?xml version="1.0" standalone="yes" ?>
   2: <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
   3:  xmlns:xs="http://www.w3.org/2001/XMLSchema">
   4:     <!--Named Data Types -->
   5:     <xs:simpleType name="sect">
   6:         <xs:restriction base="xs:string">
   7:             <xs:enumeration value="Inside the Market" />
   8:             <xs:enumeration value="Feature Stories " />
   9:             <xs:enumeration value="Stock In Focus" />
  10:             <xs:enumeration value="Air Bog " />
  11:             <xs:enumeration value="Market Movers" />
  12:             <xs:enumeration value="Air Daily" />
  13:             <xs:enumeration value="Mining and Resources" />
  14:         </xs:restriction>
  15:     </xs:simpleType>
  16:  
  17:     <!-- Section Type-->
  18:     <xs:element name="sections">
  19:         <xs:complexType>
  20:             <xs:sequence>
  21:                 <xs:element name="section" type="sect" minOccurs = "1" 
  22:                  maxOccurs = "6" />
  23:             </xs:sequence>
  24:         </xs:complexType>
  25:     </xs:element>    
  26:     
  27:     <!-- Articles -->
  28:     <xs:element name="article">
  29:         <xs:complexType>
  30:             <xs:sequence>
  31:                 <!-- Publish date -->
  32:                     <xs:element name="publishdate" type="xs:date" minOccurs="1" />
  33:                 <!-- Date Written -->    
  34:                     <xs:element name="datewritten" type="xs:date" minOccurs="1" />
  35:                 <!--Headline-->
  36:                     <xs:element name="headline" type="xs:string" minOccurs="1" />
  37:                 <!-- Section -->
  38:                     <xs:element ref="sections" minOccurs="1" />
  39:                 <!-- Story -->        
  40:                     <xs:element name="story" type="xs:string" minOccurs="1" />        
  41:             </xs:sequence>
  42:             
  43:             <!-- Article Attributes -->
  44:             <xs:attribute name="id" type="xs:integer" use="required"  />
  45:             
  46:             </xs:complexType>
  47:     </xs:element>
  48:     
  49:     <!-- Root Element -->
  50:     <xs:element name="articles">
  51:         <xs:complexType>
  52:             <xs:sequence>
  53:             <!-- Editors Comments -->
  54:             <xs:element name="editorsmsg" type="xs:string" minOccurs = "0" 
  55:              maxOccurs="1" />
  56:             <!-- Articles -->
  57:             <xs:element ref="article" minOccurs="1" maxOccurs="40" />
  58:             </xs:sequence>
  59:         </xs:complexType>
  60:     </xs:element>
  61: </xs:schema>

What did I learn?

There are 'named types' and there are 'named elements'. Using the node <xs:simpleType> declares a named type that must be imported in an element using the type="" declaration. While named elements must use the ref="" declaration to import and are declared between <xs:element> tags.

Types can be Derived through extension or restriction and the enumeration type is useful for drop-down lists.

The root element must be declared in the schema, in (DTD the root element is not considered).

Next I will develop the above xml-file into a DTD.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories:  
Actions:   E-mail | Permalink | Comments (221) | Comment RSSRSS comment feed