|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
Registrieren | Hilfe | Chat | Benutzerliste | Team | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
#31
|
||||
|
||||
@gki
Hi, ich denke, als erstes sollte geklärt werden - und dazu reicht erst mal einfaches Text-Format - welche Daten unbedingt dargestellt werden sollen und dann noch eine grobe Struktur des ganzen. Anschließend kann man mit LaTex oder HTML und CSS die Formatierung machen. Als Sortierung der Familien würde ich die Kekule-Zahlen empfehlen. Ich selber fasse gern alle Familien zusammen, die zu einem Ahnen gehören - sprich der Ahne mit seinen Partnern samt den entsprechenden Kindern und den Ehepartnern der Kinder. Und jetzt versuche ich mal die aktuelle XSL-Datei anzuhängen: Code:
<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="yes" encoding="ISO-8859-1" omit-xml-declaration="no"/> <xsl:template match="/"> <xsl:apply-templates select="*"/> </xsl:template> <xsl:template match="*:database"> <xsl:apply-templates select="*:families" /> <!-- <xsl:apply-templates select="*:people" /> --> </xsl:template> <xsl:template match="*:people"> <xsl:apply-templates select="*:person" /> </xsl:template> <xsl:template match="*:person"> <xsl:apply-templates select="*:name" /> <xsl:text> </xsl:text> </xsl:template> <xsl:template match="*:name"> <xsl:choose> <xsl:when test="@type='Birth Name'"> <xsl:value-of select="*:surname" /> </xsl:when> <xsl:otherwise> <xsl:text>???</xsl:text> </xsl:otherwise> </xsl:choose> <xsl:text>, </xsl:text> <xsl:value-of select="*:first" /> </xsl:template> <xsl:template match="*:families"> <xsl:apply-templates select="*:family" /> </xsl:template> <xsl:template match="*:family"> <xsl:if test="*:father"> <xsl:call-template name="search_person"> <xsl:with-param name="hlink" select="*:father/@hlink" /> </xsl:call-template> <xsl:text> </xsl:text> </xsl:if> <xsl:if test="*:mother"> <xsl:call-template name="search_person"> <xsl:with-param name="hlink" select="*:mother/@hlink" /> </xsl:call-template> <xsl:text> </xsl:text> </xsl:if> <xsl:for-each select="*:childref"> <xsl:text> - </xsl:text> <xsl:call-template name="search_person"> <xsl:with-param name="hlink" select="@hlink" /> </xsl:call-template> <xsl:text> </xsl:text> </xsl:for-each> <xsl:text> </xsl:text> </xsl:template> <xsl:template name="search_person"> <xsl:param name="hlink" /> <xsl:apply-templates select="/descendant::*:person[$hlink=@handle]/*:name" /> </xsl:template> </xsl:stylesheet> |
#32
|
|||
|
|||
Hallo Urmel!
Zitat:
Also etwa \gentree[3]{P00001} würde dann den Stammbaum von der Person mit der Gramps-ID P00001 auf drei Generationen an der Stelle ausgeben. Der würde natürlich ein gewisses Standard-Layout haben, was dann evtl. durch zusätzliche Befehle angepaßt werden könnte. Die LaTeX-Makros würden dann Saxon (geht xsltproc auch?) aufrufen, um die Daten aus dem XML zu saugen. Dadurch würden die Endbenutzer nur LaTeX anwenden müssen, nicht auch noch XSL. Zitat:
Allein: ich kann sie nicht anwenden... Irgendwas mach ich wohl falsch... saxonb-xslt -s:gki.xml -xsl:gramps_latex.xsl gramps_latex.xsl ist Deine Datei, gki.xml meine Daten als ausgepacktes Gramps-XML. Error on line 1 column 3 of grampsxml.dtd: SXXP0003: Error reported by XML parser: The markup declarations contained or pointed to by the document type declaration must be well-formed. Transformation failed: Run-time errors were reported Er nölt an der grampsxml.dtd rum, die das XML ja referenziert. Merkwürdig. Ne Idee? |
#33
|
||||
|
||||
Zitat:
<!DOCTYPE ... Die braucht man nicht wirklich - da stimmt entweder beim XSL-Prozessor was nicht oder bei GRAMPS. Gruß, Urmel. |
#34
|
||||
|
||||
Zitat:
Gruß, Urmel. |
#35
|
|||
|
|||
Hallo Urmel,
den Nutzer die Gramps-Datei bearbeiten zu lassen ist irgendwie keine Lösung, das müßte man anders lösen. Ich hab etwas gegoogelt, das schein allerdings kompliziert zu sein. Ich würde den Nutzer auch eher vom XSLT abkapseln wollen. Ich denke, daß LaTeX da eine etwas (aber auch nur etwas) freundlichere Unser-Interaktion zu bieten hat. |
#36
|
||||
|
||||
Ich habe jetzt als Beispiel das Script erweitert um eine Parametereingabe, mit der man zu einer Person und deren Kekule-Nummer eine Liste der Vorfahren mi deren Kekule-Nummer ausgeben kann á la
kekule-nr.: name, vornam(en) mittels java net.sf.saxon.Transform -s:data.gramps -xsl:gramps.xsl PROBAND=personen-id-aus-gramps KEKULE=gewünschte-start-nummer Code:
<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="yes" encoding="ISO-8859-1" omit-xml-declaration="no"/> <xsl:param name="PROBAND" /> <xsl:param name="KEKULE" /> <xsl:template match="/"> <xsl:choose> <xsl:when test="$PROBAND and $KEKULE"> <xsl:variable name="kekule"> <xsl:call-template name="make_kekule"> <xsl:with-param name="proband_ID" select="$PROBAND" /> <xsl:with-param name="kekule_nr" select="$KEKULE" /> </xsl:call-template> </xsl:variable> <xsl:variable name="database" select="/*:database" /> <xsl:for-each select="$kekule/kekule/numbers/person"> <xsl:value-of select="@kekule" /> <xsl:text>: </xsl:text> <xsl:call-template name="person_by_id"> <xsl:with-param name="person" select="@id" /> <xsl:with-param name="database" select="$database" /> </xsl:call-template> </xsl:for-each> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="*"/> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="*:database"> <xsl:apply-templates select="*:families" /> <!-- <xsl:apply-templates select="*:people" /> --> </xsl:template> <xsl:template match="*:people"> <xsl:apply-templates select="*:person" /> </xsl:template> <xsl:template match="*:person"> <xsl:apply-templates select="*:name" /> <xsl:text> </xsl:text> </xsl:template> <xsl:template match="*:name"> <xsl:choose> <xsl:when test="@type='Birth Name'"> <xsl:value-of select="*:surname" /> </xsl:when> <xsl:otherwise> <xsl:text>???</xsl:text> </xsl:otherwise> </xsl:choose> <xsl:text>, </xsl:text> <xsl:value-of select="*:first" /> </xsl:template> <xsl:template match="*:families"> <xsl:apply-templates select="*:family" /> </xsl:template> <xsl:template match="*:family"> <xsl:if test="*:father"> <xsl:call-template name="search_person"> <xsl:with-param name="hlink" select="*:father/@hlink" /> </xsl:call-template> <xsl:text> </xsl:text> </xsl:if> <xsl:if test="*:mother"> <xsl:call-template name="search_person"> <xsl:with-param name="hlink" select="*:mother/@hlink" /> </xsl:call-template> <xsl:text> </xsl:text> </xsl:if> <xsl:for-each select="*:childref"> <xsl:text> - </xsl:text> <xsl:call-template name="search_person"> <xsl:with-param name="hlink" select="@hlink" /> </xsl:call-template> <xsl:text> </xsl:text> </xsl:for-each> <xsl:text> </xsl:text> </xsl:template> <xsl:template name="search_person"> <xsl:param name="hlink" /> <xsl:apply-templates select="/descendant::*:person[$hlink=@handle]/*:name" /> </xsl:template> <xsl:template name="person_by_id"> <xsl:param name="person" /> <xsl:param name="database" /> <xsl:apply-templates select="$database/*:people/*:person[@id=$person]" /> </xsl:template> <xsl:template name="make_kekule"> <xsl:param name="proband_ID" select="I0000" /> <xsl:param name="kekule_nr" select="1" /> <xsl:variable name="kekule"> <kekule> <xsl:call-template name="kekule"> <xsl:with-param name="person_ID" select="$proband_ID" /> <xsl:with-param name="kekule_nr" select="$kekule_nr" /> </xsl:call-template> </kekule> </xsl:variable> <kekule> <numbers> <xsl:for-each select="$kekule/kekule/person"> <xsl:sort select="@kekule" data-type="number" /> <xsl:copy-of select="." /> </xsl:for-each> </numbers> <people> <xsl:for-each-group select="$kekule/kekule/person" group-by="@id"> <person id="{@id}"> <xsl:for-each select="current-group()"> <xsl:sort select="@kekule" data-type="number" /> <nr><xsl:value-of select="@kekule"/></nr> </xsl:for-each> </person> </xsl:for-each-group> </people> </kekule> </xsl:template> <xsl:template name="kekule"> <xsl:param name="person_ID" /> <xsl:param name="kekule_nr" /> <xsl:variable name="person" select="/*/*:people/*:person[@id=$person_ID]" /> <xsl:if test="$person"> <person id="{$person_ID}" kekule="{$kekule_nr}" /> <xsl:variable name="childof" select="$person/*:childof" /> <xsl:if test="$childof"> <xsl:variable name="family" select="/*/*:families/*:family[@handle=$childof/@hlink]" /> <xsl:if test="$family"> <xsl:if test="$family/*:father"> <xsl:variable name="father" select="/*/*:people/*:person[@handle=$family/*:father/@hlink]" /> <xsl:if test="$father"> <xsl:call-template name="kekule"> <xsl:with-param name="person_ID" select="$father/@id" /> <xsl:with-param name="kekule_nr" select="$kekule_nr * 2" /> </xsl:call-template> </xsl:if> </xsl:if> <xsl:if test="$family/*:mother"> <xsl:variable name="mother" select="/*/*:people/*:person[@handle=$family/*:mother/@hlink]" /> <xsl:if test="$mother"> <xsl:call-template name="kekule"> <xsl:with-param name="person_ID" select="$mother/@id" /> <xsl:with-param name="kekule_nr" select="$kekule_nr * 2 + 1" /> </xsl:call-template> </xsl:if> </xsl:if> </xsl:if> </xsl:if> </xsl:if> </xsl:template> </xsl:stylesheet> |
#37
|
|||
|
|||
Hallo Urmel,
funktioniert super! Ich werd mich mal bemühen, ein paar LaTeX-Formatierungen einzubauen. Mich würde interessieren, von anderen zu hören, ob sie diese Vorgehensweise für sinnvoll erachten. |
#38
|
|||
|
|||
So, anbei die modifizierte XSL-Datei (als .txt) und eine Beispielausgabe. Ich habe jede Person auf eine Seite getan, einfach damit der Index nicht nur auf eine Seite verweist.
|
#39
|
||||
|
||||
@gki
Super zurecht gefunden! Ich persöhnlich würde die Aufteilung Familien-orientiert anlegen wollen, d.h. jedes Familienoberhaupt - also jede gerade Kekule-Nummer - erhält einen Seitenanfang mit Partnerinnen und Kindern etc. Die bisherigen Scripts sollen ja nur eine grobe Orientierung geben und die Möglichkeiten andeuten - ich werde mal als nächstes eine Familienorientierte Auflistung angehen - sortiert nach Kekule. Man kann ja wie gesagt Optionen an das Script übergeben, was man haben will und wie es ausgegeben werden soll - muss halt ins Script programmieert werden. Gruß, Urmel. |
#40
|
||||
|
||||
@gki
Ich habe das letzte Script von mir noch einmal umstrukturiert und das LaTex eingearbeitet - bitte überprüfen! Vieleicht versuche ich doch erstmal die GRAMPS-Beziehungen pro Person darzustellen? Gruß, Urmel. |
Lesezeichen |
Stichworte |
gedcom , latex , tex |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|