The aim of relational database designis to generate a set of schemas that allow us to Store information without unnecessary redundancy or overhead and Retrieve information easily with accuracy.

Bad logical database design results in bad physical database design, and generally results in poor database performance. Both the logical and physical design must be right before you can expect to get good performance out of your database. If the logical design is not correct before you begin the design and development of your application, it might be too late after the application has been implemented to fix it. No amount of fast, expensive hardware can fix the poor performance caused by poor logical database design done by average database designer.
The relational database model was conceived by E. F. Codd in 1969, then a researcher at IBM. The model is based on branches of mathematics called set theory and predicate logic.
The basic idea behind the relational model is that a database consists of many unordered tables also known as relations which can be manipulated using non-procedural operations that return tables. This model was in vast contrast to the more traditional database theories of the time that were much more complicated, less flexible and dependent on the physical storage methods of the data.
Service Oriented Architecture (SOA) is a design that enables Business and computational resources to be linked together on demand as a means of achieving the results desired for service consumers – which may be end users or other services. Service Oriented Architecture has been defined by the Organization for the Advancement of Structured Information Standards as a paradigmatic approach for the utilizationand organization of distributed capabilities that might be under the control of conflicting ownership domains.
Reference – SOA Definitions and Certification
The following SOA Certifications (Service Oriented Architecture Certifcations) are available
Visit the following links.
IBM Service Oriented Architecture (SOA) – IBM’s SOA certification site. Information includes the exam levels, an exam roadmap, information on test fees, announcements, WebSphere User Groups (special offers), IBM Academic Initiative (special offers), certification testing at conferences, SOA software group certifications, and the software group platform.
The Service Oriented Architecture (SOA) Blog – There are three SOA certification programs aimed at architects put on by IBM, BEA and ZapThink. While the early exams for the software vendor’s start off somewhat technology agnostic the advanced exams become technology specific. BEA’s exams for some reason cover BEA WebLogic Integration and not the AquaLogic service bus and BPM product from the current description on the web.
The following Syllabus is covered by most of the courses and professional SOA Certification Trainings.
Service Oriented Architecture provides a single means of offering, interacting, discovering and using different capabilities to produce the effects that are desired and consistent with measurable expectations and preconditions. Of course, there are a number of different definitions of Service Oriented Architecture. To an extent, it depends on how you wish to employ it and or view it. The more open definitions, however, take into consideration the fact that Service Oriented Architecture very well might be applied to Business domains and technological entities.
Microsoft Certified Technology Specialists in Microsoft SQL Server 2005/ 2008 Business Intelligence are trained to possess an in-depth knowledge of Microsoft SQL Server 2005 Business Intelligence Development.
These professionals have an understanding in database schemas, debugging, monitoring, and troubleshooting Business Intelligence solutions, and working with the Microsoft .NET Framework. These specialists can create database queries, use SSAS data mining algorithms, and write and deploy SQL Server Reporting Services (SSRS) reports. Also, they write and deploy SQL Server Integration Services (SSIS) packages. Professions include business intelligence developers, database administrators, and database developers.
To achieve this certification, you must successfully complete two exams: one Microsoft Certified Technology Specialist (MCTS) prerequisite exam and one Professional Series exam. This certification requires a periodic update to demonstrate that your knowledge of technology and best practices is current. Exam 70-445 Review the preparation guide for Exam 70-445: TS: Microsoft SQL Server 2005 Business Intelligence – Implementation and Maintenance
Service Oriented Architecture (SOA) is a business-centric IT architectural approach that supports integrating your business as linked, repeatable business tasks, or services. With the Smart SOA approach, you can find value at every stage of the SOA continuum, from departmental projects to enterprise-wide initiatives.
Service-Oriented Architecture (SOA) and Web Services(WS) technologies have matured into highly attractive architecture and implementation alternatives for building distributed systems. SOA concepts and Web services standards-based implementation stacks are a powerful combination that is well-suited for crafting heterogeneous B2B and EAI solutions.
Networking For Dummies – by Doug Lowe ISBN : 0470056207 List Price : $24.99
Networking All-in-One Desk Reference For Dummies (For Dummies (Computer/Tech)) – by Doug Lowe ISBN : 0470179155 List Price : $39.99
Computer Networking: A Top-Down Approach (5th Edition) – by James F. Kurose,Keith W. Ross ISBN : 0136079679 List Price : $103.00
Head First Networking – by Al Anderson,Ryan Benedetti ISBN : 0596521553 List Price : $54.99
Networking: A Beginner’s Guide, Fourth Edition – by Bruce Hallberg ISBN : 0072262125 List Price : $41.99
The Networking Survival Guide: Get the Success You Want By Tapping Into the People You Know – by Diane Darling ISBN : 0071409998 List Price : $16.95
Wireless Home Networking For Dummies – by Danny Briere,Pat Hurley,Edward Ferris ISBN : 0470258896 List Price : $24.99
Home Networking All-in-One Desk Reference For Dummies (For Dummies (Computer/Tech)) – by Eric Geier ISBN : 0470275197 List Price : $29.99
Computer Networking First-Step – by Wendell Odom ISBN : 1587201011 List Price : $29.95
Cisco Networking Simplified (2nd Edition) (Networking Technology) – by Neil Anderson,Paul L. Della Maggiora,Jim Doherty ISBN : 1587201992 List Price : $44.99
Guide to Networking Essentials – by Greg Tomsho ISBN : 1418837180 List Price : $110.95
Networking with the Affluent and Their Advisors – by Thomas J. Stanley ISBN : 1556238916 List Price : $38.95
Smart Networking: Attract a Following In Person and Online – by Liz Lynch ISBN : 0071602941 List Price : $16.95
Networking (2nd Edition) (Networking Technology) – by Jeffrey S. Beasley ISBN : 0131358383 List Price : $95.00
Learning Perl, 5th Edition – by Randal Schwartz,Tom Phoenix,brian d foy ISBN : 0596520107 List Price : $39.99
Intermediate Perl – by Randal L. Schwartz,Tom Phoenix,brian d foy ISBN : 0596102062 List Price : $39.99
Beginning Perl for Bioinformatics – by James Tisdall ISBN : 0596000804 List Price : $39.95
Programming Perl (3rd Edition) – by Larry Wall,Tom Christiansen,Jon Orwant ISBN : 0596000278 List Price : $49.95
Perl Cookbook, Second Edition – by Tom Christiansen,Nathan Torkington ISBN : 0596003137 List Price : $49.95
Perl Best Practices – by Damian Conway ISBN : 0596001738 List Price : $39.95
Mastering Perl – by brian d foy ISBN : 0596527241 List Price : $39.99
Beginning Perl, Second Edition – by James Lee ISBN : 159059391X List Price : $39.99
Perl by Example (4th Edition) – by Ellie Quigley ISBN : 0132381826 List Price : $49.99
Perl Hacks: Tips & Tools for Programming, Debugging, and Surviving – by chromatic,Damian Conway,Curtis “Ovid” Poe ISBN : 0596526741 List Price : $29.99
Perl Pocket Reference, 4th Edition – by Johan Vromans ISBN : 0596003749 List Price : $9.95
Sams Teach Yourself Perl in 21 Days (2nd Edition) – by Laura Lemay,Richard Colburn ISBN : 0672320355 List Price : $49.99
Perl for Dummies (Fourth Edition) – by Paul Hoffman ISBN : 0764537504 List Price : $24.99
Higher-Order Perl: Transforming Programs with Programs – by Mark Jason Dominus ISBN : 1558607013 List Price : $72.95
Perl in A Nutshell: A Desktop Quick Reference (2nd Edition) – by Ellen Siever,Stephen Spainhour,Nathan Patwardhan ISBN : 0596002416 List Price : $39.95
The Definitive Guide to Catalyst: Writing Extensible, Scalable and Maintainable Perl–Based Web Applications – by Kieren Diment,Matt Trout ISBN : 1430223650 List Price : $49.99
Automating System Administration with Perl: Tools to Make You More Efficient – by David Blank-Edelman ISBN : 059600639X List Price : $39.99
Perl & LWP – by Sean M. Burke ISBN : 0596001789 List Price : $39.99
Perl Programming for the Absolute Beginner – by Jr., Jerry Lee Ford ISBN : 1598632221 List Price : $29.99
Programmer analyst is assigned to multiple business units of small to medium size or one business unit of medium to large size, and/or the project assignments are small to medium scale and moderately complex.
Programmer analyst is responsible for working as part of a team of technical and functional analysts to support rim’s sap system. We currently have opportunities for sap abap developers in atlanta, georgia or waterloo, ontario with exceptional abap skills to be involved in new project development and maintenance in a high growth, high intensity, fast paced environment working with cutting and bleeding edge technology. Reporting to team lead of abap development and working on a team of 25, you will be primarily responsible for writing new and modifying existing abap reports, user exits, badi’s, and dialogue programs. You will define and code conversions and interfaces using bapi, idoc, bdc, and transaction updates. You will also be responsible for troubleshooting, performance tuning, writing technical specifications and functional design specifications. This key opportunity to be a part of a legendary success stories will also provide opportunities for you to work in the abap workbench within sap r/3, including sd, mm, pp, fi/co, qm, wm, sm, hr, and cfm, and also interfacing to various external software packages and systems. You will also work with crm, bw / bi, portals, and solution manager.
Programmer analyst is part of a team working with different stakeholders in it to develop, test and implement solutions that meet business objectives. The senior programmer analyst’s core service is to have proven experience in the jda / manugistics demand and fulfillment modules (forecasting and replenishment functionality), undertake detail design, develop program code, test and implement systems based on the business requirements and high level design. The senior programmer analyst may also work in partnership with the business super users, business project team members, end users and software vendors for packaged applications on all phases of the project life cycle. Experience in the jda / manugistics demand and fulfillment modules (forecasting and replenishment functionality. Provide subject matter expertise (sme) for supply chain applications. Senior programmer analyst with ability to develop technical solutions according to high level specifications, and document detail design solutions. Understand and follow the system development life cycle (sdlc) process.
Programmer analyst is responsible for implementing technical specifications and technical designs; writing source code, preparing test data, tests and debugs programs, revising and refining programs as directed; documenting source code and creating technical procedures used throughout the system; working with functional and client teams to ensure the development of integrated solutions.
Programmer analyst is accountable for the analysis, design, development, implementation, and maintenance of the computer applications necessary to provide the reporting support to our business partners. Work closely with business partners to analyze reporting needs, define the business requirements, test and implement reporting solutions. Design, construct, test, document, and implement new or existing applications. Provide direct support to business partners for problem resolution, process improvements, and adhoc reporting needs. Provide consultative advice and act as the knowledge expert for reporting applications. Provide ongoing support of production applications systems including problem analysis, resolution, escalation, and reporting as necessary. Support it protocols for the ay system including on-call and disaster recovery.
Programmer analyst is responsible for contributing to meeting client commitments according to plan. The senior programmer analyst shares responsibility with the project team for the implementation of ingenium at client sites. Analyzes and designs enhancements to the system based on business requirements. Writes technical specifications from functional specifications that define business requirements. Creates test scenarios and performs unit testing of own programming changes and performs integrated block release testing at the unit test level.
Programmer analyst is responsible for all stages of software development for new and existing milwaukee public schools (mps) systems, including project management, requirements gathering, detailed analysis, design, development, documentation, and implementation.
Programmer analyst is challenged to develop and maintain credibility and effective working relations with both customer management and it personnel in a way that demonstrates an understanding of business problems, as well as it strategies, issues, and priorities. Also work at high technical levels of application system analysis and programming activities with established experience in application development methodology & project management lifecycle methodology. •design, develop, test, document, implement, and maintain computer systems that support the vendor managed data (vmd) application. participate in the design, coding, analysis, testing, and rewriting of programs and prepare documents for the system document life cycle process, without assistance. •design database tables, stored procedures, triggers and cursors.
Programmer analyst is responsible for performing the analysis, design, modification testing, installation and maintenance of integrated systems and application programs. The development process, a programmer analyst is required to understand the user’s needs, meet their expectations and communicate to solve problems. Usually working within a company management team, a programmer analyst is required to learn a company’s business objectives and adapt their systems accordingly. The analyst programmer analyzes and develops software relevant to a business’ information technology (it) requirements. This may involve installing it, designing, modifying, testing and writing programs, supporting work teams and solving problems with software.
Programmer analyst is expected to analyze moderately complex user requests and accurately size the effort with minimal supervision. The senior programmer analyst will consult to resolve systems incidents (including after hours support as needed). 3 – 5 years of full sdlc & project experience with increasing levels of leadership responsibility. Relational database experience (db2, udb, oracle, sql). Knowledge of programming languages (peoplesoft (sqr, peoplecode, appengine),cobol, c, java and html) a plus. Collaborate with it customer/end-user, human resources/corporate administration solution, engineering, operations, process and security groups to gather requirements, analyze, formulate solution alternatives, design, code & test business solutions. A minimum of a bachelor’s degree or comparable job-related experience is required.
Programmer analyst is a member of the data warehouse development team. This team supports the business needs of international banking division mis through a focus on the maintenance and delivery of the divisional data warehouse (idr), thereby enabling effective end user computing. – provide support for warehouse production process (idr). – support the etl process of miscellaneous data marts and operational data stores. – development of etl/mis projects of intermediate level of complexity. – develop and/or maintain new/existing sas code to support etl processes for idr.
Programmer analyst is responsible for the development of embedded applications pertaining to telematics devices for the crane star product. The lead programmer analyst may also be tasked with eliciting requirements or performing application design. This position must work with application development group to stringently adhere to application architecture, security, quality, and scalability requirements of the enterprise. This position will demonstrate creative thinking and decision making characteristics throughout their daily interaction with others. This individual will help guide continuous improvement as well as information technology infrastructure library (itil) alignment in all aspects of application development. Work with is management to shape the crane star application strategy and architecture. Determine yearly objectives and conduct yearly performance reviews of team members.
Programmer analyst is responsible for providing proprietary systems support, working closely with internal and external customers. Incumbent would be instrumental in the every day application of the various systems and play a major role in the functional specifications, database design, system flows, program specifications and end-user workflow. Essential duties and responsibilities: strategically align proprietary systems with the business processes, ensuring consistent daily functionality for internal and external customers. Lead and develop processes and procedures to debug and troubleshoot applications for end users. Proactively support senior management team in identifying strategic enhancements to the proprietary applications to improve customer interface and functionality of the system as a whole. Ensure the adequacy and soundness of all business applications. Seek to build new computing and systems environments that will improve processes and support critical business strategies in a resourceful, cost effective and strategic manner. In information systems or related field science or equivalent experience. 3 plus years of previous knowledge with visual basic programming, systems development, or client server programming. Experience with databases utilizing oracle or similar relational database and stored database procedures.
As an architect we want to know how good the software is that we are developing. Its quality has an obvious external aspect, the software should be of value to its users, but there is also a more elusive internal aspect to quality, to do with the clarity of the design, the ease with which we can understand, maintain, and extend the software. When pressed for a definition, this is where we usually end up saying “I know it when I see it.” But how can we see quality?
In an architecture diagram little boxes represent entire systems and lines between them can mean anything: a dependency, the flow of data, or a shared resource such as a bus. These diagrams are a 30.000ft view, like a landscape seen from a plane. Typically the only other view available is the source code, which is comparable to a ground level view. Both views fail to convey much information about the quality of the software, one is too high level and the other provides so much information that we cannot see structure. Clearly, what is missing is a view in between, a 1000ft view.
This 1000ft view would provide information at the right level. It aggregates large amounts of data and multiple metrics, such as method count, class fan out, or cyclomatic complexity. The actual view very much depends on a specific aspect of quality. It can be a visual representation of a dependency graph, a bar chart that shows metrics at a class level, or a sophisticated polymetric view that correlates multiple input values.
Manually creating such views and keeping them in sync with the software is a hopeless endeavor. We need tools that create these views from the only true source, the source code. For some views, a design structure matrix for example, commercial tools exists but it is also surprisingly easy to create specialized views by combining small tools that extract data and metrics with generic visualization packages. A simple example would be to load the output from checkstyle, which is essentially a set of metrics on the class and method level, into a spreadsheet to render charts. The same metrics could also be shown as a tree-map using the InfoViz toolkit. A great tool to render complex dependency graphs is GraphViz.
Once a suitable view is available software quality becomes a little less subjective. It is possible to compare the software under development with a handful of similar systems. Comparing different revisions of the same system will give an indication of trends while comparing views of different subsystems can highlight outliers. Even with just a single diagram we can rely on our ability to spot patterns and perceive aesthetics. A well-balanced tree probably represents a successful class hierarchy, a harmonious set of boxes might show code that is organized into appropriately sized classes. Most of the time a very simple relationship holds: If it looks good it probably is good.
By Erik Doernenburg
Summary: This is a basic guide to writing mex files for MATLAB in C. This guide gives a simple background of some the MATLAB mex features so that learning to write mex files can be quick and easy.
Introduction
The MATLAB M-File is very good for putting together functions or scripts that run many of MATLAB’s fast Built-In functions. One nice thing about these files is that they are never compiled and will run on any system that is already running MATLAB. MATLAB achieves this by interpreting each line of the M-File every time it is run. This method of running the code can make processing time very slow for large and complicated functions, especially those with many loops because every line within the loop will be interpreted as a new line, each time through the loop. Good MATLAB code avoids these things by using as many Built-In features and array operations as possible (because these are fast and efficient). Sometimes this is not enough…
MATLAB has the capability of running functions written in C. The files which hold the source for these functions are called MEX-Files. The mexFunctions are not intended to be a substitue for MATLAB’s Built-In operations however if you need to code many loops and other things that MATLAB is not very good at, this is a good option. This feature also allows system-specific APIs to be called to extend MATLAB’s abilities (see the Serial Port Tutorial for an example of this).
This document is arranged in the following manner:
These are some of the basic topics that will allow you to create a MEX-file in a short time. There are many other features and abilities that MATLAB has which can be explored in the MATLAB documentation.
The MEX-Function: Interface to MATLAB
When writing programs in C, it is always assumed that the program will start execution from the main(). MEX -Files are similar in that they always start execution from a special function called the mexFunction. This function has return type void and is the “gateway” between the MATLAB function call, and your C code.
Example 1
//You can include any C libraries that you normally use
#include “math.h”
#include “mex.h” //–This one is required
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
//All code and internal function calls go in here!
return;
}
In order to make a mex-function, you must include the “mex.h” library. This library contains all of the APIs that MATLAB provides. There are four input parameters to the mexFunction which correspond to the way a function is called in MATLAB – (ex: [z0,z1] = jasonsFunction(x,y,z);)
Getting and Creating Data
The main MATLAB structure used for holding data in MEX-Files is the mxArray. This structure can hold real data, complex data, arrays, matrices, sparse-arrays, strings, and a whole host of other MATLAB data-structures. Using data from some of the basic structures is shown here, but refer to the MATLAB help for using other data structures.
Get that Data
Lets use my example from above (if you forgot: [z0,z1] = jasonsFunction(x,y,z);). Assume that x is a 2-D matrix, y is a string, and z is an integer. Here we wills ee how to extract and use these different types of data.
We have access to the input paramter x by a pointer held in the array prhs. In C, when referencing an array by index, the variable is automatically dereferenced (ie: you dont need to use a star). For clarity, I will copy the variable x over to an mxArray pointer named xData (This does not need to be done for the code to work).
Example 2
//—Inside mexFunction—
//Declarations
mxArray *xData;
double *xValues;
int i,j;
int rowLen, colLen;
double avg;
//Copy input pointer x
xData = prhs[0];
//Get matrix x
xValues = mxGetPr(xData);
rowLen = mxGetN(xData);
colLen = mxGetM(xData);
//Print the integer avg of each col to matlab console
for(i=0;i<rowLen;i++)
{
avg=0;
for(j=0;j<colLen;j++)
{
avg += xValues[(i*colLen)+j];
//Another Method:
//
//avg += *xValues++;
}
avg = avg/colLen;
printf(“The average of row %d, is %d”,i,(int)avg);
}
The function mxGetPr is used to get a pointer to the real data xData. This function takes a pointer to an mxArray as the intput paramter, and returns a pointer array of doubles. A similar function mxGetPi can be used for complex data. mxGetN and mxGetM return integers of the lengths of the row and column in the matrix. If this were an array of data, one of these return values would be zero. MATLAB gives the matrix as rows first, then columns (if you were to traverse the matrix linearly) so to jump by position, (x,y) maps to x*colLen+y. MATLAB organizes its arrays this way to reduce cache misses when the row traversal is on the outside loop. It is good to code it this way if you are working for efficiency. printf() will print out to the MATLAB command prompt.
Getting a string is very similar, but has its own method. The example below shows the procedure for getting a string. Again, I will copy the input to a pointer called yData.
Example 3
//—Inside mexFunction—
//Declarations
mxArray *yData;
int yLength;
char *TheString;
//Copy input pointer y
yData = prhs[1];
//Make “TheString” point to the string
yLength = mxGetN(yData)+1;
TheString = mxCalloc(yLength, sizeof(char)); //mxCalloc is similar to malloc in C
mxGetString(yData,TheString,yLength);
This last example shows how to get a simple integer. This is the method that has always worked for me, but it seems kind of strange so I imagine there is another way to do this.
Example 4
//—Inside mexFunction—
//Declarations
mxArray *zData;
int Num;
//Copy input pointer z
zData = prhs[2];
//Get the Integer
Num = (int)(mxGetScalar(zData));
//print it out on the screen
printf(“Your favorite integer is: %d”,Num);
Three data types have been shown here. There are several others and the MATLAB help as well as the MATLAB example code shows how to use them. Now to export the data….
Returning Data to MATLAB
Assigning return values and data to the left hand side parameters is very similar to getting the data from the last section. The difference here is that memory must be allocated for the data strucure being used on the output. Here is an example of how to return a 2-D matrix. This code will take the input x and return a copy of the matrix to z0 with every point in x multiplied by 2. Note that I am not copying the name of the output mxArray pointer into another variable.
Example 5
//—Inside mexFunction—
//Declarations
mxArray *xData;
double *xValues, *outArray;
int i,j;
int rowLen, colLen;
//Copy input pointer x
xData = prhs[0];
//Get matrix x
xValues = mxGetPr(xData);
rowLen = mxGetN(xData);
colLen = mxGetM(xData);
//Allocate memory and assign output pointer
plhs[0] = mxCreateDoubleMatrix(colLen, rowLen, mxREAL); //mxReal is our data-type
//Get a pointer to the data space in our newly allocated memory
outArray = mxGetPr(plhs[0]);
//Copy matrix while multiplying each point by 2
for(i=0;i<rowLen;i++)
{
for(j=0;j<colLen;j++)
{
outArray[(i*colLen)+j] = 2*xValues[(i*colLen)+j];
}
}
Calling Built-In Functions from a MEX-File
While it may be nice to write functions in C, there are so many useful and fast pre-written functions in MATLAB that it would be a crime if we could not use them. Luckily, The Mathworks (creators of MATLAB) has provided this capability. Built-In functions have a parameter list similar to the mexFunction itself. This example uses the built-in function z = conv(x,y);
Example 6
//—Inside mexFunction—
//Declarations
mxArray *result;
mxArray *arguments[2];
//Fill in the input parameters with some trash
arguments[0] = mxCreateDoubleMatrix(1, 20, mxREAL);
arguments[1] = mxCreateDoubleMatrix(1, 10, mxREAL);
//In the real world I imagine you would want to actually put
//some useful data into the arrays above, but for this example
//it doesnt seem neccesary.
//Call the Function
mexCallMATLAB(1,&result,2,arguments,”conv”);
//Now result points to an mxArray and you can extract the data as you please!
Compiling
Compiling the MEX-Files is similar to compiling with gcc or any other command line compiler. In the MATLAB command prompt, change your current directory to the location of the MEX source file. Type: mex filename.c into the MATLAB command window. MATLAB may ask you to choose a compiler. Choose the compiler with MATLAB in its directory path. Your function will be called with the same name as your file. (ex: mex jasonsFunction.c produces a function that can be called from MATLAB as [z0,z1] = jasonsFunction(x,y,z);)
After compiling MATLAB produces the actual MEX binary that can be called as a normal MATLAB function. To call this function, you must be in the same directory with the binary. The binary goes by different names depending what system you compiled the source on (ex: Windows=.dll MacOSX=.mexmac Solaris=.mexsol Linux=.mexlx). Your MEX-function will have to be compiled on each type of system that you want to run it on because the binaries are operating system specific.
Other Useful Functions
Here is a nice list of useful functions in the mex library that make life a lot easier. Most of these work in similar fashion to those functions described above. The full list can be found in the MATLAB help documentation with many examples. There are also some example files in the MATLAB extern directory (MATLAB/extern/examples/mx or mex).
Author:
Laska, Jason. Writing C Functions in MATLAB (MEX-Files). Connexions. 1 Aug. 2004 <http://cnx.org/content/m12348/1.2/>.
What is XML? XML, or eXtensible Markup Language, is a specification for storing information. It is also a specification for describing the structure of that information. And while XML is a markup language (just like HTML), XML has no tags of its own. It allows the person writing the XML to create whatever tags they need. The only condition is that these newly created tags adhere to the rules of the XML specification.

In the seven years since the first edition of “XML: Visual QuickStart Guide” was published, XML has taken its place next to HTML as a foundational language on the Internet. XML has become a very popular method for storing data and the most popular method for transmitting data between all sorts of systems and applications. The reason being, where HTML was designed to display information, XML was designed to manage it.
This book begins by showing you the basics of the XML language. Then, by building on that knowledge, additional and supporting languages and systems will be discussed. To get the most out of this book, you should be somewhat familiar with HTML, although you don’t need to be an expert coder by any stretch. No other previous knowledge is required.
XML Visual QuickStart Guide 2nd Edition is divided into seven parts. Each part contains one or more chapters with step-by-step instructions that explain how to perform XML-related tasks. Wherever possible, examples of the concepts being discussed are displayed, and the parts of the examples on which to focus are highlighted.
Part 1: Introduction Chapter 1: Writing XML Part 2: XSL Chapter 2: XSLT Chapter 3: XPath Patterns and Expressions Chapter 4: XPath Functions Chapter 5: XSL-FO Part 3: DTD Chapter 6: Creating a DTD Chapter 7: Entities and Notations in DTDs Chapter 8: Validation and Using DTDs Part 4: XML Schema Chapter 9: XML Schema Basics Chapter 10: Defining Simple Types Chapter 11: Defining Complex Types Part 5: Namespaces Chapter 12: XML Namespaces Chapter 13: Using XML Namespaces Part 6: Recent W3C Recommendations Chapter 14: XSLT 2.0 Chapter 15: XPath 2.0 Chapter 16: XQuery 1.0 Part 7: XML in Practice Chapter 17: Ajax, RSS, SOAP and More
XML (eXtensible Markup Language) has become the medium to move data in efficient and predictable ways.
I highly recommend this book I have had some prior exposure to xml but by no means am an expert. The writing sytle is easy to follow and the book contains plenty of examples, and tips to provide.
Great resource Mr. Goldberg writes clearly and constructively. My XML knowledge before reading this book was fuzzy at best. Now, I’m an authority on the subject. Fantastic reference.
Dont waste your time searching for other XML Books… By far one of the best XML books on the market today!! As professionals, time is money.
Very Good Book on XML I am very impressed with the book so far (need to finish). It holds true to the previous Visual QuickStart Guides that I have read in that it has tons of examples that go along.
Finally! A GOOD Beginners Guide to XML that Delivers Truth be told, I do not work as a Web developer, but on a daily basis my job has me in contact with business clients and Web application developers.
The Best Introduction to XML I’ve Found Quite simply the best introduction to XML and all the related standards which I’ve found so far. Obviously it doesn’t have the breadth and depth of, say the O’Reilly books.