[Mono-list] Validation of XML

Herman Vega hvegax at gmail.com
Wed Nov 30 14:36:09 EST 2005


Hi All...

I need to validate an Xml content and I have two ways:

* Using DTD file.
* Using XSD schema file.

The problem is that i have a DTD file that it's ok, work fine with
xmllint validation program. but my implementation with DTD Validation
don't work with mono. I decide to work with XSD validation schema and
work fine for me. Now i can validate a xml  against XSD schema file
very well with mono.

But here it's the new problem... when i generate a XSD schema file
from XML using xsd.exe this generate a wrong XSD Schema file.


Now the 2 ways...  (1) how i can generate a valid XSD schema file from
Xml (not manual) or (2) how i can validate a Xml using valid DTD file?

I attached the source files that I'm still working

The error using DTD validation:

$ mono -V
Mono JIT compiler version 1.1.8.2, (C) 2002-2005 Novell, Inc and
Contributors. www.mono-project.com
        TLS:           __thread
        GC:            Included Boehm (with typed GC)
        SIGSEGV      : normal
        Globalization: norma

$ mcs --version
Mono C# compiler version 1.1.8.0

$ mono ValidateXml.exe DTD activities.dtd activities.xml

Unhandled Exception: System.Xml.XmlException: Unexpected declaration
markup was found. file:///home/hvega/ticedu/xml/TestXml/activities.dtd
Line 2, position 3.

Regards

>> Begin ValidateXml.cs <<

using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

namespace ValidationSample
{
  class Sample
  {
    public static void Main (string [] args)
    {
        XmlTextReader tr = new XmlTextReader (args[2]);
        XmlValidatingReader vr = new XmlValidatingReader (tr);
	
	if (args[0] == "DTD")
  		// for DTD validation
        	vr.ValidationType = ValidationType.DTD;
	else if (args[0] == "XSD")
        	// form schema XSD validation
	        vr.ValidationType = ValidationType.Schema;
	
	vr.Schemas.Add(string.Empty, args[1]);
        vr.ValidationEventHandler +=
	new ValidationEventHandler (ValidationHandler);

        while (vr.Read ());
        Console.WriteLine ("End Validation");
    }

    public static void ValidationHandler (object sender,
					  ValidationEventArgs args)
    {
      Console.WriteLine ("***Validation error");
      Console.WriteLine ("\tSeverity:{0}", args.Severity);
      Console.WriteLine ("\tMessage  :{0}", args.Message);
    }
  }
}

>> End ValidateXml.cs <<

>> begin activity.dtd <<
<!-- top-level element -->
<!ELEMENT activityfile (plan)>

<!-- a single plan has a set of modules -->
<!ELEMENT plan (name,acronym,allduration,description,designers,resource,planprogression,module+)>
<!ATTLIST plan
  id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT acronym (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT designers (designer*)>
<!ELEMENT designer (#PCDATA)>
<!ELEMENT allduration (#PCDATA)>
<!ATTLIST allduration
  unit CDATA "months">

<!-- -->
<!ELEMENT module (name, resource, moduleplanification,
moduleprogression, notes,(activity|module)*)>
<!ATTLIST module
  id CDATA #REQUIRED>

<!-- A resource is provided by link or external store -->
<!ELEMENT resource (#PCDATA)>
<!ATTLIST resource type (link|external) "link">

<!ELEMENT notes (note*)>
<!ELEMENT note (name,date,description)>
<!ATTLIST note
  type (public|private) #REQUIRED>
<!ELEMENT date (#PCDATA)>

<!-- -->
<!-- A single activity (a set of elements) -->
<!ELEMENT activity (name,resource,role,planification,progression,advices,notes)>
<!ATTLIST activity
  id CDATA #REQUIRED>

<!-- The type of role (use|consult|produce|execute) -->
<!ELEMENT role EMPTY>
<!ATTLIST role
  type (none|use|consult|produce|execute) "none">

<!ELEMENT planification (duration,period,evaluation,interaction,jobs,datelimit)>
<!-- duration of the whole activity -->
<!ELEMENT duration EMPTY>
<!ATTLIST duration
  hour CDATA "0"
  min  CDATA "0">
<!-- Planification of time between start and finish the activity -->
<!ELEMENT period EMPTY>
<!ATTLIST period
  min CDATA "0"
  max CDATA "0"
  unit CDATA "months">
<!-- Percentage of advance -->
<!ELEMENT evaluation (#PCDATA)>
<!-- Kind of interaction -->
<!ELEMENT interaction (team?,group?)>
<!ELEMENT team EMPTY>
<!ELEMENT group EMPTY>
<!-- # of jobs to be sent -->
<!ELEMENT jobs (#PCDATA)>
<!-- Last date to get the activity done -->
<!ELEMENT datelimit (#PCDATA)>

<!ELEMENT planprogression (complete)>
<!ATTLIST planprogression
  type (bymodules|sequential|parallel|byoptions) "bymodules">

<!ELEMENT moduleplanification (duration,period,evaluation,interaction
,groupwork)>
<!ELEMENT groupwork EMPTY>
<!ATTLIST groupwork
  hour CDATA "0"
  min CDATA "0">

<!ELEMENT moduleprogression (weight,complete)>
<!ATTLIST moduleprogression
  type (bymodules|sequential|parallel|byoptions) "bymodules">
<!ELEMENT complete EMPTY>
<!ATTLIST complete
  count CDATA "0"
  total CDATA "0" >

<!ELEMENT progression (weight,release,validation)>
<!ELEMENT weight (#PCDATA)>
<!ELEMENT release (manual?,automatic?)>
<!ELEMENT manual EMPTY>
<!ELEMENT automatic EMPTY>
<!ATTLIST automatic
  hour CDATA "0"
  min  CDATA "0"
  sec  CDATA "50">
<!ELEMENT validation (#PCDATA)>

<!ELEMENT advices (advice*)>
<!ELEMENT advice (title,description,resource)>
<!ATTLIST advice
  id CDATA #REQUIRED>
<!ELEMENT title (#PCDATA)>



>> end activity.dtd <<

>> begin acivity.xml <<
-
	<plan id="1">
<name>Plan Name</name>
<acronym/>
<allduration unit="months"> </allduration>
<description> </description>
<designers>
  </designers>
<resource type="link"> </resource>
-
	<planprogression type="sequential">
<complete count="0" total="0"/>
</planprogression>
-
	<module id="1">
<name>Mod.1 Name Modulo 1</name>
<resource type="link"> </resource>
-
	<moduleplanification>
<duration hour="0" min="0"/>
<period min="0" max="0" unit="0"/>
<evaluation> </evaluation>
-
	<interaction>
<team/>
</interaction>
<groupwork hour="0" min="0"/>
</moduleplanification>
-
	<moduleprogression type="bymodules">
<weight> </weight>
<complete count="0" total="0"/>
<validation> </validation>
</moduleprogression>
<advices>
    </advices>
<notes>
    </notes>
-
	<activity id="1">
<name>Activity 1</name>
<resource type="link"> </resource>
<role type="use"/>
-
	<planification>
<duration hour="0" min="0"/>
<period min="0" max="0" unit="months"/>
<evaluation> </evaluation>
<interaction/>
<jobs> </jobs>
<datelimit> </datelimit>
</planification>
-
	<progression>
<weight> </weight>
-
	<release>
<manual/>
<automatic hour="0" min="0" sec="0"/>
</release>
<validation> </validation>
</progression>
<advices>
      </advices>
<notes>
      </notes>
</activity>
</module>
</plan>

>> End activity.xml <<

--
 ,''`.   Herman Vega Jara <hvega at alumnos.ubiobio.cl>
 : :' :  Ing. ejec. Comp. e Inf. at UBB rlz!
 `. `'  http://gbtcr.chileforge.cl
   `-


More information about the Mono-list mailing list