🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
5 messages
5 total messages Started by Joris Janssens Tue, 10 Aug 2004 21:37
[C# .NET] validating XHTML 1.1
#2281
Author: Joris Janssens
Date: Tue, 10 Aug 2004 21:37
97 lines
4408 bytes
Ik probeer XHTML 1.1-bestanden te laten valideren met behulp van 
XmlValidatingReader Maar ik krijg steeds een WebException "(404) Not 
Found"


Dit is de volledige foutmelding:

System.Net.WebException: The remote server returned an error: (404) Not 
Found.
   at System.Net.HttpWebRequest.CheckFinalStatus()
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult 
asyncResult)
   at System.Net.HttpWebRequest.GetResponse()
   at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, 
ICredentials crede
ntials)
   at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials 
credentials)

   at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, 
Type ofO
bjectToReturn)
   at System.Xml.Schema.DtdParser.HandlePERef()
   at System.Xml.Schema.DtdParser.ParseDtdContent()
   at System.Xml.Schema.DtdParser.ParseConditionalSect()
   at System.Xml.Schema.DtdParser.ParseDtdContent()
   at System.Xml.Schema.DtdParser.ParseConditionalSect()
   at System.Xml.Schema.DtdParser.ParseDtdContent()
   at System.Xml.Schema.DtdParser.ParseDocTypeDecl()
   at System.Xml.Schema.DtdParser.Parse()
   at System.Xml.XmlTextReader.ParseDtd(XmlScanner scanner)
   at System.Xml.XmlTextReader.ParseTag()
   at System.Xml.XmlTextReader.ParseRoot()
   at System.Xml.XmlTextReader.Read()
   at System.Xml.XmlValidatingReader.ReadWithCollectTextToken()
   at System.Xml.XmlValidatingReader.Read()
   at ValidatorTest.SimpleValidator.Main(String[] args) in 
e:\flotspe\cs\visual
studio projects\validatortest\class1.cs:line 31


*********************************************************************

En dit is de code (console application):

		[STAThread]
		static void Main(string[] args) {
			string url="http://users.telenet.be/flotspe/test.xhtml";
			Stream stream=FetchUrl(url);
			XmlTextReader reader=new XmlTextReader(FetchUrl(url));
			XmlValidatingReader valReader=new XmlValidatingReader(reader);
			valReader.ValidationEventHandler+=new 
ValidationEventHandler(valHandler);
			valReader.ValidationType = ValidationType.DTD;
			while (valReader.Read()) {
				//Console.WriteLine(valReader.LocalName);
			}
			valReader.Close();
			stream.Close();
		}


		private static Stream FetchUrl(string url) {
			WebClient browser=new WebClient();
			try {
				return browser.OpenRead(url);
			}
			catch (Exception err) {
				Console.WriteLine(err.Message);
				return null;
			}
		}
		private static void valHandler(object sender, 
System.Xml.Schema.ValidationEventArgs e) {
			Console.WriteLine(e.Message);
		}

*********************************************************************

En dit is het XHTML 1.1 bestand in kwestie

<http://users.telenet.be/flotspe/test.xhtml>

maar bij andere XHTML 1.1-bestanden (al dan niet lokaal) is het 
probleem hetzelfde

*********************************************************************

Deze code werkt wel als ik <http://users.telenet.be/flotspe/book.xml> 
wil valideren tegen de DTD <http://users.telenet.be/flotspe/books.dtd>


Kan iemand mij zeggen waar het probleem ligt en hoe het op te lossen?

-- 
Joris "flotspe" Janssens *** http://inferno.xhtml.be/
m(28,23,Kempen) zkt v(20<=age<=35,20<=bmi<=25,Kempen)
Re: [C# .NET] validating XHTML 1.1
#2282
Author: TRAX
Date: Wed, 11 Aug 2004 10:11
16 lines
1717 bytes
> [STAThread]
> static void Main(string[] args) {
> string url="http://users.telenet.be/flotspe/test.xhtml";
> Stream stream=FetchUrl(url);
> XmlTextReader reader=new XmlTextReader(FetchUrl(url));
> XmlValidatingReader valReader=new XmlValidatingReader(reader);
> valReader.ValidationEventHandler+=new
> ValidationEventHandler(valHandler);
> valReader.ValidationType = ValidationType.DTD;


 Ik vermoed dat je de DTD file ook ergens zal moeten meegeven, je valideert
a.d.h.v een DTD file maar nergens zeg je waar die zich bevindt. Dus moet je
kiezen voor een andere validationtype, of de locatie van het DTD bestand
aangeven.
Het blijft bij vermoedens uiteraard :)
Re: [C# .NET] validating XHTML 1.1
#2283
Author: Joris Janssens
Date: Wed, 11 Aug 2004 12:03
111 lines
5914 bytes
TRAX formuleerde op woensdag :
>> [STAThread]
>> static void Main(string[] args) {
>> string url="http://users.telenet.be/flotspe/test.xhtml";
>> Stream stream=FetchUrl(url);
>> XmlTextReader reader=new XmlTextReader(FetchUrl(url));
>> XmlValidatingReader valReader=new XmlValidatingReader(reader);
>> valReader.ValidationEventHandler+=new
>> ValidationEventHandler(valHandler);
>> valReader.ValidationType = ValidationType.DTD;
>
>
>  Ik vermoed dat je de DTD file ook ergens zal moeten meegeven, je valideert
> a.d.h.v een DTD file maar nergens zeg je waar die zich bevindt. Dus moet je
> kiezen voor een andere validationtype, of de locatie van het DTD bestand
> aangeven.
> Het blijft bij vermoedens uiteraard :)

Ja maar de url van de DTD staat wel in de DOCTYPE vermeld en het lijkt 
die URL ook wel echt te gebruiken. Zo kan ik 
<http://localhost:8080/dtd/book.xml> met als DTD <!DOCTYPE book SYSTEM 
'http://users.telenet.be/flotspe/books.dtd'> probleemloos valideren. 
Als ik die url naar het dtd-bestand ongeldig maak krijg ik wel die 
404-error.

Er is me wel iets opgevallen aan die foutmeldingen.



Dit de foutmelding als de URL naar de DTD ongeldig is:

*****************************************************
Unhandled Exception: System.Net.WebException: The remote server 
returned an erro
r: (404) Not Found.
   at System.Net.HttpWebRequest.CheckFinalStatus()
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult 
asyncResult)
   at System.Net.HttpWebRequest.GetResponse()
   at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, 
ICredentials crede
ntials)
   at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials 
credentials)

   at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, 
Type ofO
bjectToReturn)
   at System.Xml.Schema.DtdParser.ParseDocTypeDecl()
   at System.Xml.Schema.DtdParser.Parse()
   at System.Xml.XmlTextReader.ParseDtd(XmlScanner scanner)
   at System.Xml.XmlTextReader.ParseTag()
   at System.Xml.XmlTextReader.ParseRoot()
   at System.Xml.XmlTextReader.Read()
   at System.Xml.XmlValidatingReader.ReadWithCollectTextToken()
   at System.Xml.XmlValidatingReader.Read()
   at ValidatorTest.SimpleValidator.Main(String[] args) in 
e:\flotspe\cs\visual
studio projects\validatortest\class1.cs:line 24
*****************************************************

Dit is daarentegen de foutmelding bij validatie van de XHTML 1.1 DTD:

*****************************************************
Unhandled Exception: System.Net.WebException: The remote server 
returned an erro
r: (404) Not Found.
   at System.Net.HttpWebRequest.CheckFinalStatus()
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult 
asyncResult)
   at System.Net.HttpWebRequest.GetResponse()
   at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, 
ICredentials crede
ntials)
   at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials 
credentials)

   at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, 
Type ofO
bjectToReturn)
   at System.Xml.Schema.DtdParser.HandlePERef()
   at System.Xml.Schema.DtdParser.ParseDtdContent()
   at System.Xml.Schema.DtdParser.ParseConditionalSect()
   at System.Xml.Schema.DtdParser.ParseDtdContent()
   at System.Xml.Schema.DtdParser.ParseConditionalSect()
   at System.Xml.Schema.DtdParser.ParseDtdContent()
   at System.Xml.Schema.DtdParser.ParseDocTypeDecl()
   at System.Xml.Schema.DtdParser.Parse()
   at System.Xml.XmlTextReader.ParseDtd(XmlScanner scanner)
   at System.Xml.XmlTextReader.ParseTag()
   at System.Xml.XmlTextReader.ParseRoot()
   at System.Xml.XmlTextReader.Read()
   at System.Xml.XmlValidatingReader.ReadWithCollectTextToken()
   at System.Xml.XmlValidatingReader.Read()
   at ValidatorTest.SimpleValidator.Main(String[] args) in 
e:\flotspe\cs\visual
studio projects\validatortest\class1.cs:line 24
*****************************************************

Bij XHTML 1.1-validatie heeft dat ding al 3x een ParseDtdContent() 
opgeroepen terwijl het bij een ongeldige URL al na de 
ParseDocTypeDecl() misloopt.

Nu heb ik die XHTML 1.1 DTD (die gesplitst is in diverse bestanden) 
eens bekeken en daar staan zowel absolute als relatieve URL's in 
vermeld. Daarom is m'n huidige werkhypothese dat de validator de 
bestanden met een relatieve URL niet kan vinden.

-- 
Joris "flotspe" Janssens *** http://inferno.xhtml.be/
gecontroleerd op virussen door m'n huisdokter
Re: [C# .NET] validating XHTML 1.1
#2284
Author: Joris Janssens
Date: Wed, 11 Aug 2004 13:01
35 lines
2348 bytes
Joris Janssens schreef op 10/08/2004 :
> Ik probeer XHTML 1.1-bestanden te laten valideren met behulp van 
> XmlValidatingReader Maar ik krijg steeds een WebException "(404) Not Found"

Ik had de handleiding beter moeten lezen :-) Er moesten enkele 
properties van de XmlTextReader op een bepaalde manier ingesteld worden 
en dat had ik dus niet gedaan.

Alleen loopt de validatie zelf nu compleet fout en krijg ik bij elk 
element dat ik in m'n XHTML 1.1-bestand gebruik, te horen dat het niet 
gedeclareerd is 8-o


Dit is de nieuwe code BTW:

[STAThread]
static void Main(string[] args) {
	string url="http://localhost:8080/dtd/test.xhtml";
	XmlTextReader reader=new XmlTextReader(url);
	reader.Normalization=true;
	reader.XmlResolver=null;
	XmlValidatingReader valReader=new XmlValidatingReader(reader);
	valReader.ValidationEventHandler+=new 
ValidationEventHandler(valHandler);
	valReader.ValidationType = ValidationType.DTD;
	while (valReader.Read()) {
	}
	valReader.Close();
}

Ik ga maar eens wat verder lezen :/

-- 
Joris "flotspe" Janssens *** http://inferno.xhtml.be/
m(28,23,Kempen) zkt v(20<=age<=35,20<=bmi<=25,Kempen)
Re: [C# .NET] validating XHTML 1.1
#2285
Author: Joris Janssens
Date: Wed, 11 Aug 2004 14:06
51 lines
3450 bytes
Joris Janssens formuleerde op dinsdag :
> Ik probeer XHTML 1.1-bestanden te laten valideren met behulp van 
> XmlValidatingReader Maar ik krijg steeds een WebException "(404) Not Found"

Het positieve nieuws is dat ik ondertussen weet waar het misloopt. Ik 
heb een nieuwe XmlUrlResolver gemaakt die toont met welke URL hij bezig 
is.

Dit is de output:
*********************************************
http://localhost:8080/dtd/test.xhtml
http://localhost:8080/dtd/test.xhtml
http://localhost:8080/dtd/test.xhtml
http://localhost:8080/dtd/-//W3C//DTD%20XHTML%201.1//EN
http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd
http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-inlstyle-1.mod
http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-framework-1.mod
http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-notations-1.mod
http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-datatypes-1.mod
http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-qname-1.mod
http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-events-1.mod
http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-attribs-1.mod
http://www.w3.org/TR/xhtml-modularization/DTD/xhtml11-model-1.mod

Unhandled Exception: System.Net.WebException: The remote server 
returned an error: (404) Not Found.
*********************************************

En <http://www.w3.org/TR/xhtml-modularization/DTD/xhtml11-model-1.mod> 
bestaat dus niet, dat moet 
<http://www.w3.org/TR/xhtml11/DTD/xhtml11-model-1.mod> zijn.


<http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-framework-1.mod> 
staat vermeld als een absolute URL in 
<http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd>.

<xhtml-notations-1.mod> en de daarop volgende mods zijn dan weer 
relatieve URL's in 
<http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-framework-1.mod>.

<xhtml11-model-1.mod> is dan weer een relatieve URL in 
<http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd> maar in het programma 
wordt de BaseUri niet aangepast. Er zou dus gedetecteerd moeten worden 
wanneer 
<http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-framework-1.mod> 
verlaten wordt en overeenkomstig de BaseUri aanpassen :-Z

-- 
Joris "flotspe" Janssens *** http://inferno.xhtml.be/
The webmaster who says "ni"
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads