XML – Zadanie zaliczeniowe nr 3 – najczęściej zadawane pytania

2008-02-19

Pytanie 1

Czy rozwiązanie zadania 2 (poprawkowego) można zaimplementować w XQuery?

Ja bym tu widział raczej XSLT, ale OK, zgadzam się na XQuery.

Ponieważ będę testował to pod Saxonem, proszę korzystać z Saxonowego sposobu deklaracji parametrów serializacji, jest to opisane tutaj. Niestety (o ile dobrze się orientuję) nie jest to określane przez standard i każda implementacja realizuje to na swój sposób.

2008-02-21

Pytanie 2

Co oznacza automatyczne przetwarzanie w treści zadania i priorytety dla atrybutów bądź podelementów?

Wypisując treść przepisu należy używać zawartości elementów co, ile i jm w takiej kolejności, w jakiej występują one w źródle. Gdy brakuje danego elementu (np. ilości) najlepiej nie wypisywać tej własności, ale ponieważ treść zadania sugerowała użycie w takim przypadku wartości atrybutu, przyjmę także rozwiązania wypisujące wartości atrybutów, w każdej kolejności.

Natomiast przy „grupowaniu” i sumowaniu ilości składników na początku przepisu należy w pierwszej kolejności brać pod uwagę wartości atrybutów co, ile i jm, a dopiero gdyby danego atrybutu nie było, brać zawartość odpowiedniego podelementu. Można założyć, że uzyskana w ten sposób wartość jest poprawna.

Pytanie 3

Jak zaimplementować sumowanie składników? :)

Po pierwsze dla każdego przepisu należy uzyskać listę składników bez powtórzeń. Bardzo przydatne może być grupowanie w XSLT 2.0. W XSLT 1.0 i XQuery też da się to zrobić, np. używając osi preceding-sibling, było to jednym z zadań na ćwiczeniach z XQuery.

Następnie dla każdego składnika trzeba przejrzeć przepis i zsumować ilości składników, oczywiście uwzględniając rózne jednostki miary. Znowu może więc przydać się grupowanie. Jeśli pojawia się składnik bez określonej ilości, trzeba dopisać do wyliczonej sumy jeszcze +.

Bardziej nie podpowiem...

Pytanie 4

Czy można nie testować rozwiązania w Saxonie, tylko założyć, że XML Spy działa tak samo?

Jeśli chodzi o XSLT – tak.

Jeśli chodzi o XQuery – w różnych implementacjach różnie zapisuje się parametry serializacji, a będę wymagał, aby wynik zawierał deklaracje HTML/XHTML, dlatego lepiej pewnie przetestować to w Saxonie.

2008-03-01

Pytanie 5

Gdy używam <xsl:copy> do kopiowania elementów HTML, w wyniku pojawia się np. <html:p> i przeglądarka nie chce tego zinterpretować jako akapitu.

Bo w wyniku powinno być <p> bez prefiksu. Niestety nie umiem tego elegancko zrobić, jedyne co przychodzi mi do głowy to <xsl:element name="local-name()"> zamiast <xsl:copy>.

Pytanie 6

Czy atrybut nazwa w komponent nie powinien być obowiązkowy? Nie bardzo wyobrażam sobie formatowanie, gdy nie będzie.

Tak, powinien być obowiązkowy i można założyć, że będzie występował. To ważne także dla kompo-ref.

Pytanie 7

Rozumiem, że jeżeli nie ma elementu <co>, to można nie wypisywać informacji o danym składniku (o jego nazwie). Ale czy jeżeli są elementy <ile> oraz <jm> (albo tylko jeden z nich), to mamy je wypisywać? Bo to może prowadzić do bezsensowych zapisów. Czy mogę zrobić tak, że jeżeli nie ma elementu <co>, to w ogóle nie wypisuję nic o składniku?

To co jest w treści powinno być wypisane w wyniku, nawet jeśli nie ma <co>co>. Tak jak pisałem, można wtedy posłużyć się wartością atrybutu, ale można też w ogóle nie wypisywać wartości co.

Pytanie 8

Dodatkowo uogólniając troszkę poprzednie. Czy jeżeli jest element <co>, nie ma elementu <ile>, ale jest <jm>, to można <jm> nie wypisywać? Bo to też wydaje się trochę pozbawione sensu?

To może mieć sens:

Upiecz <skladnik jm="szt" co="mięso"><jm>sztukę</jm> <co>mięsa</co></skladnik>. :)

Przyjmujemy wtedy (do obliczeń) ile = 1, ale nie musimy tego wypisywać.


Valid XHTML 1.1Valid CSS