# HG changeset patch # User Patrick PIERRE <patrick.pierre@prismallia.fr> # Date 1311024932 -7200 # Node ID c51d5097d06516858e514580177506e7112f58f2 # Parent c70de8fae29df29adc9cf2d643126a4523e27e77 Amélioration de la gestion des auteurs et des éditeurs diff -r c70de8fae29d -r c51d5097d065 RelaxNG/publidoc.rnc --- a/RelaxNG/publidoc.rnc lun. juil. 18 19:10:28 2011 +0200 +++ b/RelaxNG/publidoc.rnc lun. juil. 18 23:35:32 2011 +0200 @@ -61,6 +61,7 @@ top.head.content = (title, subtitle?)? + & identifier* & language? & author* & publisher? @@ -93,11 +94,22 @@ title.content = inlines +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ identifier ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +identifier = element identifier { identifier.content, identifier.attributes } + +identifier.attributes = + class.attribute +class.attribute = attribute class { "uri" | "ean" } + +identifier.content = xsd:anyURI | xsd:NMTOKEN + # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language = element language { language.attributes } -language.attributes = lang.attribute +language.attributes = + lang.attribute lang.attribute = attribute xml:lang { xsd:language } # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ author, publisher ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -114,16 +126,12 @@ lastname, role* -role = element role { role.attributes } - -role.attributes = - role.of.attribute -role.of.attribute = attribute of { "author" | "illustrator" } - # ~~~~~~ publisher publisher = element publisher { publisher.content } -publisher.content = inlines +publisher.content = + label, + url? # ~~~~~~ firstname firstname = element firstname { firstname.content } @@ -135,6 +143,23 @@ lastname.content = inlines +# ~~~~~~ label +label = element label { label.content } + +label.content = inlines + +# ~~~~~~ role +role = element role { role.attributes } + +role.attributes = + role.of.attribute +role.of.attribute = attribute of { "author" | "illustrator" } + +# ~~~~~~ url +url = element url { url.content } + +url.content = xsd:anyURI + # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ place ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ place = element place { place.content } @@ -302,11 +327,6 @@ label, block+ -# ~~~~~~ label -label = element label { label.content } - -label.content = inlines - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ table ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ table = element table { table.content } diff -r c70de8fae29d -r c51d5097d065 RelaxNG/publidoc.rng --- a/RelaxNG/publidoc.rng lun. juil. 18 19:10:28 2011 +0200 +++ b/RelaxNG/publidoc.rng lun. juil. 18 23:35:32 2011 +0200 @@ -129,6 +129,9 @@ <ref name="subtitle"/> </optional> </optional> + <zeroOrMore> + <ref name="identifier"/> + </zeroOrMore> <optional> <ref name="language"/> </optional> @@ -231,6 +234,30 @@ <define name="title.content"> <ref name="inlines"/> </define> + <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ identifier ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> + <define name="identifier"> + <element name="identifier"> + <ref name="identifier.content"/> + <ref name="identifier.attributes"/> + </element> + </define> + <define name="identifier.attributes"> + <ref name="class.attribute"/> + </define> + <define name="class.attribute"> + <attribute name="class"> + <choice> + <value>uri</value> + <value>ean</value> + </choice> + </attribute> + </define> + <define name="identifier.content"> + <choice> + <data type="anyURI"/> + <data type="NMTOKEN"/> + </choice> + </define> <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> <define name="language"> <element name="language"> @@ -274,22 +301,6 @@ <ref name="role"/> </zeroOrMore> </define> - <define name="role"> - <element name="role"> - <ref name="role.attributes"/> - </element> - </define> - <define name="role.attributes"> - <ref name="role.of.attribute"/> - </define> - <define name="role.of.attribute"> - <attribute name="of"> - <choice> - <value>author</value> - <value>illustrator</value> - </choice> - </attribute> - </define> <!-- ~~~~~~ publisher --> <define name="publisher"> <element name="publisher"> @@ -297,7 +308,10 @@ </element> </define> <define name="publisher.content"> - <ref name="inlines"/> + <ref name="label"/> + <optional> + <ref name="url"/> + </optional> </define> <!-- ~~~~~~ firstname --> <define name="firstname"> @@ -317,6 +331,41 @@ <define name="lastname.content"> <ref name="inlines"/> </define> + <!-- ~~~~~~ label --> + <define name="label"> + <element name="label"> + <ref name="label.content"/> + </element> + </define> + <define name="label.content"> + <ref name="inlines"/> + </define> + <!-- ~~~~~~ role --> + <define name="role"> + <element name="role"> + <ref name="role.attributes"/> + </element> + </define> + <define name="role.attributes"> + <ref name="role.of.attribute"/> + </define> + <define name="role.of.attribute"> + <attribute name="of"> + <choice> + <value>author</value> + <value>illustrator</value> + </choice> + </attribute> + </define> + <!-- ~~~~~~ url --> + <define name="url"> + <element name="url"> + <ref name="url.content"/> + </element> + </define> + <define name="url.content"> + <data type="anyURI"/> + </define> <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ place ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> <define name="place"> <element name="place"> @@ -632,15 +681,6 @@ <ref name="block"/> </oneOrMore> </define> - <!-- ~~~~~~ label --> - <define name="label"> - <element name="label"> - <ref name="label.content"/> - </element> - </define> - <define name="label.content"> - <ref name="inlines"/> - </define> <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ table ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> <define name="table"> <element name="table"> diff -r c70de8fae29d -r c51d5097d065 RelaxNG/publiset.rnc --- a/RelaxNG/publiset.rnc lun. juil. 18 19:10:28 2011 +0200 +++ b/RelaxNG/publiset.rnc lun. juil. 18 23:35:32 2011 +0200 @@ -74,6 +74,7 @@ top.head.content = (title, subtitle?)? + & identifier* & language? & author* & publisher? @@ -89,6 +90,16 @@ title.content = inlines +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ identifier ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +identifier = element identifier { identifier.content, identifier.attributes } + +identifier.attributes = + class.attribute +class.attribute = attribute class { "uri" | "ean" } + +identifier.content = xsd:anyURI | xsd:NMTOKEN + # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language = element language { language.attributes } @@ -101,14 +112,21 @@ # ~~~~~~ author author = element author { author.content } +author.attributes = + role.attribute? +role.attribute = attribute role { "author" | "illustrator" } + author.content = firstname?, - lastname + lastname, + role* # ~~~~~~ publisher publisher = element publisher { publisher.content } -publisher.content = inlines +publisher.content = + label, + url? # ~~~~~~ firstname firstname = element firstname { firstname.content } @@ -120,6 +138,23 @@ lastname.content = inlines +# ~~~~~~ label +label = element label { label.content } + +label.content = inlines + +# ~~~~~~ role +role = element role { role.attributes } + +role.attributes = + role.of.attribute +role.of.attribute = attribute of { "author" | "illustrator" } + +# ~~~~~~ url +url = element url { url.content } + +url.content = xsd:anyURI + # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~ source diff -r c70de8fae29d -r c51d5097d065 RelaxNG/publiset.rng --- a/RelaxNG/publiset.rng lun. juil. 18 19:10:28 2011 +0200 +++ b/RelaxNG/publiset.rng lun. juil. 18 23:35:32 2011 +0200 @@ -147,6 +147,9 @@ <ref name="subtitle"/> </optional> </optional> + <zeroOrMore> + <ref name="identifier"/> + </zeroOrMore> <optional> <ref name="language"/> </optional> @@ -188,6 +191,30 @@ <define name="title.content"> <ref name="inlines"/> </define> + <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ identifier ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> + <define name="identifier"> + <element name="identifier"> + <ref name="identifier.content"/> + <ref name="identifier.attributes"/> + </element> + </define> + <define name="identifier.attributes"> + <ref name="class.attribute"/> + </define> + <define name="class.attribute"> + <attribute name="class"> + <choice> + <value>uri</value> + <value>ean</value> + </choice> + </attribute> + </define> + <define name="identifier.content"> + <choice> + <data type="anyURI"/> + <data type="NMTOKEN"/> + </choice> + </define> <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> <define name="language"> <element name="language"> @@ -209,11 +236,27 @@ <ref name="author.content"/> </element> </define> + <define name="author.attributes"> + <optional> + <ref name="role.attribute"/> + </optional> + </define> + <define name="role.attribute"> + <attribute name="role"> + <choice> + <value>author</value> + <value>illustrator</value> + </choice> + </attribute> + </define> <define name="author.content"> <optional> <ref name="firstname"/> </optional> <ref name="lastname"/> + <zeroOrMore> + <ref name="role"/> + </zeroOrMore> </define> <!-- ~~~~~~ publisher --> <define name="publisher"> @@ -222,7 +265,10 @@ </element> </define> <define name="publisher.content"> - <ref name="inlines"/> + <ref name="label"/> + <optional> + <ref name="url"/> + </optional> </define> <!-- ~~~~~~ firstname --> <define name="firstname"> @@ -242,6 +288,41 @@ <define name="lastname.content"> <ref name="inlines"/> </define> + <!-- ~~~~~~ label --> + <define name="label"> + <element name="label"> + <ref name="label.content"/> + </element> + </define> + <define name="label.content"> + <ref name="inlines"/> + </define> + <!-- ~~~~~~ role --> + <define name="role"> + <element name="role"> + <ref name="role.attributes"/> + </element> + </define> + <define name="role.attributes"> + <ref name="role.of.attribute"/> + </define> + <define name="role.of.attribute"> + <attribute name="of"> + <choice> + <value>author</value> + <value>illustrator</value> + </choice> + </attribute> + </define> + <!-- ~~~~~~ url --> + <define name="url"> + <element name="url"> + <ref name="url.content"/> + </element> + </define> + <define name="url.content"> + <data type="anyURI"/> + </define> <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> <!-- ~~~~~~ source --> <define name="source"> diff -r c70de8fae29d -r c51d5097d065 Xml/Documents/demi-douce.xml --- a/Xml/Documents/demi-douce.xml lun. juil. 18 19:10:28 2011 +0200 +++ b/Xml/Documents/demi-douce.xml lun. juil. 18 23:35:32 2011 +0200 @@ -9,7 +9,7 @@ <author> <firstname>Henri</firstname><lastname>Ostrowiecki</lastname> </author> - <publisher>Les éditions des Rosiers</publisher> + <publisher><label>Les éditions des Rosiers</label></publisher> <abstract> <p> C'est l'histoire d'un petit garçon qui faillit ne jamais avoir 5 ans diff -r c70de8fae29d -r c51d5097d065 Xml/Documents/torture_test.xml --- a/Xml/Documents/torture_test.xml lun. juil. 18 19:10:28 2011 +0200 +++ b/Xml/Documents/torture_test.xml lun. juil. 18 23:35:32 2011 +0200 @@ -5,6 +5,9 @@ <head> <title>Torture test</title> <subtitle>Test des capacités de <name>publidoc</name></subtitle> + <identifier class="ean">978-2-35184-011-4</identifier> + <identifier class="uri">http://www.prismallia.fr/Xml/torture_test</identifier> + <language xml:lang="fr"/> <author> <firstname>Patrick</firstname><lastname>PIERRE</lastname> </author> @@ -12,8 +15,10 @@ <firstname>Tien Haï</firstname><lastname>NGUYEN</lastname> <role of="illustrator"/> </author> - <publisher>Prismallia</publisher> - <language xml:lang="fr"/> + <publisher> + <label>Prismallia</label> + <url>http://www.prismallia.fr</url> + </publisher> <date value="2001-06"/> <place>Paris</place> <source type="book" id="9782843550362"> diff -r c70de8fae29d -r c51d5097d065 Xml/Sets/composition.xml --- a/Xml/Sets/composition.xml lun. juil. 18 19:10:28 2011 +0200 +++ b/Xml/Sets/composition.xml lun. juil. 18 23:35:32 2011 +0200 @@ -5,7 +5,15 @@ <division as="document" attributes="xml:id=composition"> <head> <title>Exemple d'assemblage de sujets</title> + <identifier class="ean">978-2-35184-011-4</identifier> <language xml:lang="fr"/> + <author> + <firstname>Patrick</firstname><lastname>PIERRE</lastname> + </author> + <publisher> + <label>Prismallia</label> + <url>http://www.prismallia.fr</url> + </publisher> </head> <!-- ========================== Événements ========================== -->