Thread View: pl.comp.xml
10 messages
10 total messages
Started by Jakub Gwozdz
Fri, 14 Dec 2007 16:12
MSXML i xml:id
Author: Jakub Gwozdz
Date: Fri, 14 Dec 2007 16:12
Date: Fri, 14 Dec 2007 16:12
33 lines
1844 bytes
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
Author: szomiz
Date: Sat, 15 Dec 2007 20:55
Date: Sat, 15 Dec 2007 20:55
12 lines
1375 bytes
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
Author: Jakub Gwozdz
Date: Mon, 17 Dec 2007 09:13
Date: Mon, 17 Dec 2007 09:13
32 lines
1908 bytes
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
Author: Jakub Gwozdz
Date: Mon, 17 Dec 2007 12:04
Date: Mon, 17 Dec 2007 12:04
39 lines
2268 bytes
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
Author: szomiz
Date: Mon, 17 Dec 2007 22:48
Date: Mon, 17 Dec 2007 22:48
11 lines
1475 bytes
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
Author: Jakub Gwozdz
Date: Tue, 18 Dec 2007 08:35
Date: Tue, 18 Dec 2007 08:35
14 lines
1288 bytes
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
Author: szomiz
Date: Tue, 18 Dec 2007 19:20
Date: Tue, 18 Dec 2007 19:20
31 lines
2471 bytes
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
Author: Jakub Gwozdz
Date: Wed, 19 Dec 2007 11:18
Date: Wed, 19 Dec 2007 11:18
55 lines
3250 bytes
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
Author: szomiz
Date: Thu, 20 Dec 2007 17:15
Date: Thu, 20 Dec 2007 17:15
25 lines
2272 bytes
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
Author: Jakub Gwozdz
Date: Fri, 21 Dec 2007 10:23
Date: Fri, 21 Dec 2007 10:23
45 lines
2724 bytes
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