🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

10 total messages Started by Jakub Gwozdz Fri, 14 Dec 2007 16:12
MSXML i xml:id
#9595
Author: Jakub Gwozdz
Date: Fri, 14 Dec 2007 16:12
33 lines
1844 bytes
Cześć
Może ktoś potrafiłby objaśnić mi, na jakiej podstawie .Netowy parser XML
potrafi znaleźć "#myID" w dokumencie bez żadnej schemy czy DTD,
wyglądającym tak:
<MyRoot><MyElem ID="myID">test</MyElem></MyRoot>
albo tak:
<MyRoot><MyElem id="myID">test</MyElem></MyRoot>
albo tak:
<MyRoot><MyElem Id="myID">test</MyElem></MyRoot>

Pierwsze, co mnie niepokoi, to pytanie, czy parser może przyjąć sobie
defaultowo, że atrybutem jest raz "ID", raz "id", raz jeszcze "Id" ("iD"
już nie działa).

Drugie, to to, że ten parser nie honoruje standardowego namespace'a "xml:"
i nie znajduje wskazanego uri w dokumencie wyglądającym tak:
<MyRoot><MyElem xml:id="myID">test</MyElem></MyRoot>

(aczkolwiek tutaj nie jestem pewien, czy dokument nie powinien mieć jeszcze
jakichś dodatkowych pstryczków, żeby parser przyjął "xml:id" jako unikalny
identyfikator)

A jak to się dzieje w innych parserach? Też są takie defaulty? W Javie
chyba nie, dopóki się ich programistycznie nie wymusi...

Dzięki za wszelką pomoc.

-- 
Jakub Gwóźdź    | 
gwozdziu@rpg.pl | 
                  
                  
                  
Re: MSXML i xml:id
#9596
Author: szomiz
Date: Sat, 15 Dec 2007 20:55
12 lines
1375 bytes
Użytkownik "Jakub Gwozdz" <gwozdziu@rpg.pl> napisał w wiadomości 
news:dprn7zihpal2$.dlg@gwozdziu.rpg.pl...
> Cześć
> Może ktoś potrafiłby objaśnić mi, na jakiej podstawie .Netowy parser XML
> potrafi znaleźć "#myID" w dokumencie bez żadnej schemy czy DTD,
> wyglądającym tak:

A jakis kod? Bo to co napisaes sugeruje, ze nikoniecznie korzystasz z 
msxml'a...

sz. 
Re: MSXML i xml:id
#9597
Author: Jakub Gwozdz
Date: Mon, 17 Dec 2007 09:13
32 lines
1908 bytes
szomiz napisał(a):

> Użytkownik "Jakub Gwozdz" <gwozdziu@rpg.pl> napisał w wiadomości 
> news:dprn7zihpal2$.dlg@gwozdziu.rpg.pl...
>> Cześć
>> Może ktoś potrafiłby objaśnić mi, na jakiej podstawie .Netowy parser XML
>> potrafi znaleźć "#myID" w dokumencie bez żadnej schemy czy DTD,
>> wyglądającym tak:
> 
> A jakis kod? Bo to co napisaes sugeruje, ze nikoniecznie korzystasz z 
> msxml'a...

XmlDocument doc = new XmlDocument();      
doc.LoadXml("<MyXml><aaa id='jakisID'>cośtam2</aaa></MyXml>");
SignedXml signature = new SignedXml(doc);
Reference reference = new Reference("#jakisID");
reference.DigestMethod = SignedXml.XmlDsigSHA1Url;
signature.AddReference(reference);
signature.SigningKey = findKey();
signature.ComputeSignature();
doc.GetElementsByTagName("MyXml").Item(0).AppendChild(signature.GetXml());
System.Diagnostics.Debug.WriteLine(doc.OuterXml);

Jeżeli w ładowanym xml-u zmienię atrybut 'id' na jakiś inny (np 'blah'), to
poleci wyjątek, bo nie znajdzie referencji.

-- 
Jakub Gwóźdź    | 
gwozdziu@rpg.pl | 
                  
                  
                  
Re: MSXML i xml:id
#9598
Author: Jakub Gwozdz
Date: Mon, 17 Dec 2007 12:04
39 lines
2268 bytes
szomiz napisał(a):

> Użytkownik "Jakub Gwozdz" <gwozdziu@rpg.pl> napisał w wiadomości 
> news:dprn7zihpal2$.dlg@gwozdziu.rpg.pl...
>> Cześć
>> Może ktoś potrafiłby objaśnić mi, na jakiej podstawie .Netowy parser XML
>> potrafi znaleźć "#myID" w dokumencie bez żadnej schemy czy DTD,
>> wyglądającym tak:
> 
> A jakis kod? Bo to co napisaes sugeruje, ze nikoniecznie korzystasz z 
> msxml'a...

XmlDocument doc = new XmlDocument();      
doc.LoadXml("<MyXml><aaa id='jakisID'>cośtam2</aaa></MyXml>");
SignedXml signature = new SignedXml(doc);
Reference reference = new Reference("#jakisID");
reference.DigestMethod = SignedXml.XmlDsigSHA1Url;
signature.AddReference(reference);
signature.SigningKey = findKey();
signature.ComputeSignature();
doc.GetElementsByTagName("MyXml").Item(0).AppendChild(signature.GetXml());
System.Diagnostics.Debug.WriteLine(doc.OuterXml);

Jeżeli w ładowanym xml-u zmienię atrybut 'id' na jakiś inny (np 'blah'), to
poleci wyjątek, bo nie znajdzie referencji.

EDIT: Istotnie więc masz rację, używam System.XML.dll, błędnie założyłem,
że to tylko wrapper na MSXML. Co nie zmienia faktu, że nie rozumiem, na
podstawie jakiego standardu domyślnie przyjmuje, że atrybuty 'id', 'ID' i
'Id' to unikalne identyfikatory i o wyjaśnienie tego proszę :)

pozdr

-- 
Jakub Gwóźdź    | 
gwozdziu@rpg.pl | 
                  
                  
                  
Re: MSXML i xml:id
#9599
Author: szomiz
Date: Mon, 17 Dec 2007 22:48
11 lines
1475 bytes
Użytkownik "Jakub Gwozdz" <gwozdziu@rpg.pl> napisał w wiadomości 
news:cwe0dqock9dj$.dlg@gwozdziu.rpg.pl...

> Jeżeli w ładowanym xml-u zmienię atrybut 'id' na jakiś inny (np 'blah'), 
> to
> poleci wyjątek, bo nie znajdzie referencji.

A jak zmienisz id na ID aldo Id? I co msdn mowi o wymaganiach dotyczacych 
identyikacji dla Reference?

sz. 
Re: MSXML i xml:id
#9600
Author: Jakub Gwozdz
Date: Tue, 18 Dec 2007 08:35
14 lines
1288 bytes
szomiz napisał(a):

> aldo Id? I co msdn mowi o wymaganiach dotyczacych 
> identyikacji dla Reference?

No właśnie na te trzy zadziała. Doczytałem już, że w .Net 1.0 działało
tylko "Id", pozostałe dwie wersje wprowadzili w 1.1. A mnie boli to, że nie
wiem, na jakiej podstawie to działa - inaczej - jaki standard o tym mówi.
-- 
Jakub Gwóźdź    | 
gwozdziu@rpg.pl | 
                  
                  
                  
Re: MSXML i xml:id
#9601
Author: szomiz
Date: Tue, 18 Dec 2007 19:20
31 lines
2471 bytes
Użytkownik "Jakub Gwozdz" <gwozdziu@rpg.pl> napisał w wiadomości 
news:d7cgm54aj87n$.dlg@gwozdziu.rpg.pl...
> szomiz napisał(a):
>
>> aldo Id? I co msdn mowi o wymaganiach dotyczacych
>> identyikacji dla Reference?
>
> No właśnie na te trzy zadziała. Doczytałem już, że w .Net 1.0 działało
> tylko "Id", pozostałe dwie wersje wprowadzili w 1.1. A mnie boli to, że 
> nie
> wiem, na jakiej podstawie to działa - inaczej - jaki standard o tym mówi.

Moim zdaniem zaden. Ale moze siedzi to w jakiejs specyfikacji. Zaczalbym od 
http://www.w3.org/TR/xmldsig-core/ , ale nie sadze, zeby to tam siedzialo, 
bo trudno wymagac, zeby mozliwosc podpisania dokumentu byla warunkowana 
odpowiednia konstrukcja jego schemy.

Podejrzewam, ze to bajer majacy ulatwic zycie. Wszak rozne konwencje przy 
tagowaniu dokumentow sie stosuje.

Jezeli by ci sie chcialo: wez bardziej rozbudowany dokument, powkladaj w 
rozne wezly atrybuty id ID Id iD z _tymi_samymi_ wartosciami, sprawdz ktory 
bedzie znajdowal (z opcja zmiany kolejnosci atrybutow) i _podziel_sie_ 
obserwacjami.

Sam bym sie tym chetnie pobawil, ale mam cztery dni na zrobienie polek na 
ksiazki, polek na narzedzia, scianek dzialowych. W dodatku 28-go odbior 
duzego systemu, a nawet dokumentacji nie zaczalem pisac :/

sz. 
Re: MSXML i xml:id
#9602
Author: Jakub Gwozdz
Date: Wed, 19 Dec 2007 11:18
55 lines
3250 bytes
szomiz napisał(a):

> Użytkownik "Jakub Gwozdz" <gwozdziu@rpg.pl> napisał w wiadomości 
> news:d7cgm54aj87n$.dlg@gwozdziu.rpg.pl...
>> szomiz napisał(a):
>>
>>> aldo Id? I co msdn mowi o wymaganiach dotyczacych
>>> identyikacji dla Reference?
>>
>> No właśnie na te trzy zadziała. Doczytałem już, że w .Net 1.0 działało
>> tylko "Id", pozostałe dwie wersje wprowadzili w 1.1. A mnie boli to, że 
>> nie
>> wiem, na jakiej podstawie to działa - inaczej - jaki standard o tym mówi.
> 
> Moim zdaniem zaden. Ale moze siedzi to w jakiejs specyfikacji. Zaczalbym od 
> http://www.w3.org/TR/xmldsig-core/ , ale nie sadze, zeby to tam siedzialo, 
> bo trudno wymagac, zeby mozliwosc podpisania dokumentu byla warunkowana 
> odpowiednia konstrukcja jego schemy.

A właśnie według standardu (który przytoczyłeś) jak najbardziej jest to
warunek. Albo inaczej - refuri do podpisywanego dokumentu ma być
rozwiązywane wg XPath, a ten dla składni #jakisID wymaga, aby dokument miał
DTD ze zdefiniowanym atrybutem typu ID (w trakcie powstawania specyfikacji
xpath nie było jeszcze standardu schem, które też pozwalają zdefiniować
atrybut jako xsd:ID). 

> Podejrzewam, ze to bajer majacy ulatwic zycie. Wszak rozne konwencje przy 
> tagowaniu dokumentow sie stosuje.

Właśnie... konwencje konwencjami, ale ponieważ nie są zgodne ze standardami
(o mighty microsoft, we thank you again), tak utworzony dokument nie będzie
weryfikowalny w innych implementacjach (like Java). To, do czego próbuję
dojść, to jednoznaczna odpowiedź, że na pewno wina leży w implementacji
MS-a, a nie w moim programie w Javie :)

> Jezeli by ci sie chcialo: wez bardziej rozbudowany dokument, powkladaj w 
> rozne wezly atrybuty id ID Id iD z _tymi_samymi_ wartosciami, sprawdz ktory 
> bedzie znajdowal (z opcja zmiany kolejnosci atrybutow) i _podziel_sie_ 
> obserwacjami.

Sprawdziłem. Priorytet ma postać "Id". Co więcej, jak w dokumencie mam
kilka elementów takich, np: 
<MyRoot><MyElem Id="someId">aaa</MyElem><MyElem
Id="someId">bbb</MyElem></MyRoot>
To mechanizm nie będzie uprzejmy zgłosić żadnego błędu, tylko weźmie pod
uwagę pierwszy element z listy. 

pozdr

-- 
Jakub Gwóźdź    | 
gwozdziu@rpg.pl | 
                  
                  
                  
Re: MSXML i xml:id
#9603
Author: szomiz
Date: Thu, 20 Dec 2007 17:15
25 lines
2272 bytes
Użytkownik "Jakub Gwozdz" <gwozdziu@rpg.pl> napisał w wiadomości 
news:1pupc0wavzivw.dlg@gwozdziu.rpg.pl...

> A właśnie według standardu (który przytoczyłeś) jak najbardziej jest to
> warunek. Albo inaczej - refuri do podpisywanego dokumentu ma być
> rozwiązywane wg XPath, a ten dla składni #jakisID wymaga, aby dokument 
> miał

Jestes pewien, ze ten XPath _musi_ wskazywac na atrybut ID?

Poza tym: wskazujac na atrybut dokonasz podpisania tego wlasnie atrybutu. A 
zdaje sie, ze chcesz podpisac dokument / kawalek dokumentu...

> Właśnie... konwencje konwencjami, ale ponieważ nie są zgodne ze 
> standardami
> (o mighty microsoft, we thank you again), tak utworzony dokument nie 
> będzie
> weryfikowalny w innych implementacjach (like Java). To, do czego próbuję
> dojść, to jednoznaczna odpowiedź, że na pewno wina leży w implementacji
> MS-a, a nie w moim programie w Javie :)

Och jak ja bym chcial zeby reszta swiata traktowala swoje biblioteki do 
XML'a tak jak MS traktuje swoje...

sz. 
Re: MSXML i xml:id
#9604
Author: Jakub Gwozdz
Date: Fri, 21 Dec 2007 10:23
45 lines
2724 bytes
szomiz napisał(a):

> Użytkownik "Jakub Gwozdz" <gwozdziu@rpg.pl> napisał w wiadomości 
> news:1pupc0wavzivw.dlg@gwozdziu.rpg.pl...
> 
>> A właśnie według standardu (który przytoczyłeś) jak najbardziej jest to
>> warunek. Albo inaczej - refuri do podpisywanego dokumentu ma być
>> rozwiązywane wg XPath, a ten dla składni #jakisID wymaga, aby dokument 
>> miał
> 
> Jestes pewien, ze ten XPath _musi_ wskazywac na atrybut ID?
>
> Poza tym: wskazujac na atrybut dokonasz podpisania tego wlasnie atrybutu. A 
> zdaje sie, ze chcesz podpisac dokument / kawalek dokumentu...

Nie, wskazując w refUri na "#jakisID" podpiszę cały element, który ma
atrybut ID=="jakisID" (zakładając, że ID jest unikalnym atrybutem wg
XPath). Wytestowane na kilka sposobów :)

>> Właśnie... konwencje konwencjami, ale ponieważ nie są zgodne ze 
>> standardami
>> (o mighty microsoft, we thank you again), tak utworzony dokument nie 
>> będzie
>> weryfikowalny w innych implementacjach (like Java). To, do czego próbuję
>> dojść, to jednoznaczna odpowiedź, że na pewno wina leży w implementacji
>> MS-a, a nie w moim programie w Javie :)
> 
> Och jak ja bym chcial zeby reszta swiata traktowala swoje biblioteki do 
> XML'a tak jak MS traktuje swoje...

O'RLY? :)

Faktycznie jest taki dobry, czy "'sarkazm' to trudne słowo" ? Pytam, bo
prawdę powiedziawszy nie znam się na MSowym XMLu. 

Poza tym już zauważyłem błąd w swoim pierwotnym podejściu - nieuprawnionego
uznania atrybutu o nazwie "ID", "Id" czy "id" za identyfikator dokonuje nie
parser xml-a, tylko mechanizm SignedXml.

-- 
Jakub Gwóźdź    | 
gwozdziu@rpg.pl | 
                  
                  
                  
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