popolo-project / popolo-spec

International legislative data specifications
http://www.popoloproject.com/
99 stars 18 forks source link

Motion and voting classes feedback #57

Closed jpmckinney closed 9 years ago

jpmckinney commented 10 years ago

Possible new properties

Vote event

Note Motion has the lowest adoption of the new classes, so more evidence is needed before adding these properties.

Open questions

RichardTaylor commented 10 years ago

Potential additional properties for a motion:

  1. A title for the motion. ie. content for the title of any webpage on the motion; and how it ought be described in a list of motions. This is distinct from the subject.
  2. A description of the motion. This might well be different to the transcript or text of the motion. It might be an explanatory note provided by the mover of the motion, or a hand written description.
  3. A short description of the motion (perhaps tweet sized?).
  4. Human readable effect of voting "yes" and effect of voting "no"; for example the text: to introduce a ban on selling alcohol below a set minimum price.
  5. Type of motion eg. programming / administrative; substantively on legislation; or a "normal" motion. (This could be used for example to separate motions which in practice will never get debated "Early Day Motions"; from those likely to lead to a debate, and possibly vote). This property could distinguish motions from the chair vs others too for example.
  6. Various dates (date-times) might be involved, eg. when a motion is proposed (published?), when it's moved.
  7. As well as a proposer a motion may have one or many people as seconders (or "signatories")
  8. There may be many votes on different amendments to the same Bill. The property where we link to the Bill needs to be different to the one used to link to an amendment, or it needs to be possible to link to both a Bill and an amendment. (In the UK context you could have a piece of draft secondary legislation rather than a Bill so the term used probably needs to be flexible).
  9. A "source" link to where a motion was published (eg. an agenda / order of business).
  10. To replicate PublicWhip's functionality there would be a need to associate motions with policy positions which those who've voted a particular way a particular motion can be said to be to be supporting or opposing.

In thinking about applying this to the UK House of Commons there are things which aren't initially motions, but are closely related to motions. eg. amendments to Bills are published, there will be motions on some of those. To degree you can look at a Bill, or an amendment, as things which may become motions (or more accurately end up as the subjects of motions).

One thing I'd like to see is the identification of [potential] motions well in advance of votes on them so that people have a chance to lobby their representatives to vote one way or another on them. Viewing a Bill or proposed clause/amendment or even more abstractly a statement in a speech, or more specifically the "Queens' Speech" or programme for Government as something which might result in a motion, as a kind of potential motion, could help with this.

In the PublicWhip context I'm thinking why wait until there's been a vote on something, or even until a motion has been formally moved on something, before describing it, and getting information about it online. Having material on a motion as early as possible would help get content in the search engines ready for when the vote occurs, to add the vote information.

jpmckinney commented 10 years ago

Thanks, Richard. For many of these, I would recommend using terms from Dublin Core:

I will need +1s from more people to validate that these are common use cases. At any rate, reusing terms from Dublin Core is a good idea, whether or not these properties are added to Popolo.

  1. A title for the motion. ie. content for the title of any webpage on the motion; and how it ought be described in a list of motions.
  2. A description of the motion. This might well be different to the transcript or text of the motion. It might be an explanatory note provided by the mover of the motion, or a hand written description.
  3. A short description of the motion (perhaps tweet sized?).

Can you provide examples of titles, descriptions, and short descriptions from an official source? Where does Public Whip get its "subjects" (titles) and descriptions? Does it have any short descriptions?

4 Human readable effect of voting "yes" and effect of voting "no"; for example the text: to introduce a ban on selling alcohol below a set minimum price.

In other words, a human-readable motion text? The original motion in this case was "That this draft Licensing Act 2003 (Mandatory Conditions) Order 2014, which was laid before this House on 9 April, be approved." Couldn't the motion's description cover this use case?

5 Type of motion eg. programming / administrative; substantively on legislation; or a "normal" motion. (This could be used for example to separate motions which in practice will never get debated "Early Day Motions"; from those likely to lead to a debate, and possibly vote). This property could distinguish motions from the chair vs others too for example.

Yes, there may be a use case for a classification property on Motion.

6 Various dates (date-times) might be involved, eg. when a motion is proposed (published?), when it's moved.

What is the distinction between being proposed and moved? Can you list all the dates that matter?

7 As well as a proposer a motion may have one or many people as seconders (or "signatories")

We had originally considered adding seconders, but in most cases the identity of the seconder is irrelevant procedurally. Can you describe use cases for tracking seconders? (Besides the general use case of duplicating whatever is published)

8 There may be many votes on different amendments to the same Bill. The property where we link to the Bill needs to be different to the one used to link to an amendment, or it needs to be possible to link to both a Bill and an amendment.

I figure the subject of the Motion will be an amendment object, which itself links to a bill object. Popolo has no opinion on what amendments and bills look like, though maybe someday. Depending on how you model things, the Motion itself may be an amendment.

9 A "source" link to where a motion was published (eg. an agenda / order of business).

Almost all Popolo classes have a sources property, which is one of three common metadata properties. These aren't repeated everywhere for brevity.

jpmckinney commented 10 years ago

@RichardTaylor I've added an appendix to Popolo about the choice of metadata terms: http://www.popoloproject.com/appendices/adding-metadata.html

jpmckinney commented 10 years ago

@RichardTaylor I've added an example of a motion to amend a motion: http://popoloproject.com/appendices/examples.html#motion-amendment

RichardTaylor commented 10 years ago

Where does Public Whip get its "subjects" (titles) and descriptions? Does it have any short descriptions?

PublicWhip's division titles at first are automatically based on the titles from Hansard and are the same as the associated debate titles used on TheyWorkForYou; they can then be edited manually to fix any problems with them or make them more specific to the subject of the vote.

As for short descriptions, Public Whip doesn't have them as such, but the first sentence of each manually described division's description is kind of a short description. Ideally I think the short one sentence description of the result of the vote ie. what the majority of MPs did, would be written, and accessible for use, separately, from a detailed description of the technicalities of the impact of a vote.

4 Human readable effect of voting "yes" and effect of voting "no"; for example the text: to introduce a ban on selling alcohol below a set minimum price.

In other words, a human-readable motion text?

It's a tailored short text for voting either way on the motion eg. for the vote http://www.publicwhip.org.uk/division.php?date=2014-05-07&number=264

PublicWhip currently stores, in the free text description field, but in a form which can be extracted for use in the appropriate context something like:

@ MP voted aye to introduce a ban on selling alcohol below a set minimum price. 
@ MP voted no against introducing a ban on selling alcohol below a set minimum price. 

this is used to create statements like:

Julian Huppert MP, Cambridge voted to introduce a ban on selling alcohol below a set minimum price.

source

The original motion in this case was "That this draft Licensing Act 2003 (Mandatory Conditions) Order 2014, which was laid before this House on 9 April, be approved." Couldn't the motion's description cover this use case?

I don't think that a sentence like:

X MP voted for the motion: "That this draft Licensing Act 2003 (Mandatory Conditions) Order 2014, which was laid before this House on 9 April, be approved."

is as user-friendly and meaningful as:

X MP voted to introduce a ban on selling alcohol below a set minimum price.

I think the option for manual descriptions, and for summaries tailored to voting each way, is crucial, hence the suggestion to support them.

What is the distinction between being proposed and moved? Can you list all the dates that matter?

There are, for example, currently many motions listed at http://www.publications.parliament.uk/pa/cm201314/cmagenda/fb140513.htm eg. there's one saying:

That leave be given to bring in a Bill to provide that sugar content on food labelling be represented in terms of the number of 5ml spoonsful per 100g; and for connected purposes

This is due to be debated tomorrow; it won't be moved until it's moved in the House of Commons tomorrow. So it's been published at some point, and there'll be a link to where it was published, and at some point there'll be a link to the transcript of it being moved.
I don't think the dates are as key as the links; and in some way dealing with the fact motions exist before they're formally moved. A problem with most parliamentary monitoring is it's all after the fact; I'm keen to see more timeliness. At the moment PublicWhip's system involves waiting until the day following a vote to get a motion up on the site; whereas one could be getting the motion up the day, or even better a quite a few days, before.

In the UK House of Commons amendments to Bills are published sometimes weeks, sometimes just hours, before some of them are turned into motions. Actually often the motion text is technically just:

That the amendment be made.

which illustrates that the motion text itself often isn't informative.

Another fairly typical form of motion text which needs some description to make sense of it is:

Amendment (a) proposed to Lords amendment 7.

.

Can you describe use cases for tracking seconders?

Personally I don't think even the identity of those proposing a motion is particularly important. It can be interesting though when interpreting a vote for example to see who has proposed or seconded something but not voted for it. I only raised this as I was noting it is information that's generally available in relation to a motion. I'm aware some people think who has proposed or seconded a motion is key, and they refer to a motion in these terms ("the motion from MPs X,Y and Z"). In the UK House of Commons who proposes and seconds a motion appears to be key to the speaker's decision on if the motion gets selected for a debate and potentially a vote (though here the speaker's decisions are not explained).

If the relevant select committee chair, relevant constituency MPs, or the leaders of opposition parties had seconded motions which weren't selected for debate by the Speaker there'd probably be complaints about the Speaker (and a change to a more transparent system for the selection of motions to debate!).

In the special case of UK Early Day Motions (which are never in practice debated or voted on) the whole point of them is for MPs to show their support for the cause contained in them by signing up to second them.

Can you provide examples of titles, descriptions, and short descriptions from an official source?

Not really. There's an example of in my view poor practice (in terms of a public facing website, it's great they're releasing something) with relatively indecipherable motion descriptions/titles/short titles : http://www.scottish.parliament.uk/parliamentarybusiness/28925.aspx In the UK House of Commons though MPs are increasingly providing an explanation of the effect of their amendments which amount to a short description of the subsequent motion. An example of one of these descriptions/explanations is the text shown mostly green starting with "The Scotland Act 2012 enables..." at:

http://www.theyworkforyou.com/debates/?id=2014-05-06b.71.0#g85.0

jpmckinney commented 10 years ago

Ok, so I think the proposed reuse of Dublin Core's title, description, and abstract terms serves the first use cases you describe (1,2,3)

For the effect of voting for each option (4), I’ve added to the issue description as a possible new term:

VoteEvent#options: A array of Option objects which have a label ("yes", "no") and a note (a human-readable explanation of what it means to vote for that option)

I'd already added a possible classification property to the issue description for your point (5).

Re: dates (6), we’ve so far indicated a publication date and an introduction date. I suggest Dublin Core’s issued term for publication. For introduction, we can keep the current date term, or use something more specific like introduction_date or proposal_date.

Thanks for the use cases for seconder (7). I've updated the issue description.

The sources property can be used for all links (9). It’s possible to add a note to each source link, describing what’s at that link, or what information was retrieved from that link.

I think the link to a policy position (10) would have to be something that is custom to an implementation. According to Popolo's conformance section, you can add your own properties as you see fit.

Bills and amendments are certainly things that would need to be added to the spec to fully model a legislature. We haven't started research on those, but we're happy to work with others if anyone wants to take the lead.

I think it makes sense to publish bills and amendments in advance of any motions. If a legislature publishes motions in advance of their being moved, it makes sense to publish those, too.

akuckartz commented 10 years ago

classification is currently used by OParl for keywords (skos:Concept) etc. by several classes not for other specific properties which also use skos:Concept.

tmtmtmtm commented 10 years ago

As a top level concept, a 'Count' class seems a little too broad to be slurped up entirely by vote counts. Should it perhaps explicitly be 'Vote Count'?

jpmckinney commented 10 years ago

@akuckartz What are examples of other specific properties from OParl which also use skos:Concept? For keywords, I would prefer a term like keyword.

@tmtmtmtm I had been thinking Count might be more generic. Do we have a use case for the vote_event_id property? Will we ever have a free-floating Count object that we need to relate back to something?

akuckartz commented 10 years ago

@jpmckinney Within the last few hours I also came to the conclusion that keyword is better. Will be changed in OParl. (OT: Do you have any written rule regarding singular versus plural?)

oparl:Consultation currently has a role-property which can for example be a decision. oparl:Organization currently has organizationType which can for example be committee or something like "working group". All is still in flux.

jpmckinney commented 10 years ago

@akuckartz In Popolo, plural is used for lists of objects, for example, memberships and posts on an Organization. This was done to match how ORMs typically name relations. Otherwise, singular is used throughout, like in RDF.

What does it mean for a consultation to have a role in OParl? The Google translation of the role property's definition unfortunately didn't work well.

For Organization, Popolo uses classification, from the W3C ORG ontology.

girogiro commented 10 years ago

Which property is used to reference related items in the new vote-related classes - id or identifier? For example description of motion_id property of Vote event says "The ID of the motion being decided" but there is no id property in the Motion class. Does it mean reference to Motion's identifier property?

The same issue with Area.

Concerning the identifier property of Vote event - does it mean a unique identifier among all vote events as the term identifier suggests or is it an identifier just within a certain group of vote events, e.g. within one legislative session as seems from the example value "42"?

jpmckinney commented 10 years ago

I forgot to add the id property to the new classes; I've added them now. Thanks for reporting that! identifier doesn't need to be globally unique. It's usually the identifier used by the source document, like "42" in the example.

girogiro commented 10 years ago

And what about adding of values "absent" and "not voting" mentioned in 1. footnote in Vote class to code lists of Vote and Count?

Also I would introduce the required rule to more properties in the schemas. What first comes to my mind now is vote_event_id property in Vote and Count classes. There is no use of information about a vote or a vote count without knowing the vote event it relates to.

jpmckinney commented 10 years ago

I've added those to the code lists.

If the vote is embedded inside a vote event, it is not necessary to repeat the vote_event_id. In general, Popolo does not describe how to validate your data. It is up to you to add additional validations as necessary.

michalskop commented 10 years ago

I find "political party" problematic. It is not clear wheather it means "the voter is member of the party" (e.g., pays membership fees, which is probably the cleanest definition, but many representatives are not official members of a party) or "the voter is member of the political club/group in the parliament" (probably the most relevant in reality) and "the voter candidated for/with support of the party" (also relevant in reality until the voter switches sides/parties).

Similarly, there are national political parties in the European Parliament nominating the MEPs (but the MEPs do not have to be members of the parties) and there are "political groups" functioning as trans-national "political parties" (the MEPs usually vote according the political groups).

akuckartz commented 10 years ago

@michalskop That is an interesting issue. In OParl we do not yet modelled votes etc. but we intend to do so (ideally by using what Popolo has created by then ;-).

If one knows all the individual votes of all persons this issue does not arise because one then should have complete information and can calculate all potentially interesting numbers.

But I think your question in the end perhaps is about something different. A person can have different relations (org:Membership) to different organizations at the same time. It can be a membership in a political party, membership in a commitee, membership in a committee without the right to vote, membership in a faction within a committee, or the person might have been elected as a candidate of a political group or party, etc. Formally a person usually votes for him or herself. But it obviously is interesting to know how representatives of specific parties or groups are voting. In practice the membership in a faction within a committee seems to be most relevant information regarding the vote. That is the reason why such information is often officially documented in German municipalities - but nothing more.

jpmckinney commented 10 years ago

@michalskop I've renamed party to caucus and changed its definition to "the voter's primary political caucus, group, or party", which I think sufficiently clarifies its meaning. What do you think?

I agree that party was the wrong term to use, since parties exist outside legislatures. I meant to refer to the part of the party/group within the legislature, which is often called a caucus.

Update: Actually, I just did some quick research and will use group to avoid English-centrism.

michalskop commented 10 years ago

@jpmckinney group seems fine to me, it is definitely clearer what it means. We were using also club (the Czech parliament or city councils) or caucus (English term used in Slovak parliament) - but political group (used also in the European parl.) seems to me also the best option (from all those mentioned now in the note http://popoloproject.com/specs/vote.html#note2 )

akuckartz commented 10 years ago

Isn't group redundant and/or should be formulated as a property of Person instead, linking people with organizations using Membership?

The graph on this page indicates that there should be such a property: http://popoloproject.com/specs/membership.html

Maybe several kinds of memberships or membership properties make sense so that membership in a committee can be differentiated from membership in a political group. (At the moment it is an open issue in OParl how to deal with that.)

jpmckinney commented 10 years ago

@akuckartz group on Vote is a case of denormalization. It's possible to determine a person's group using only memberships; however, to make it easier to determine a person's group at the time of voting, we denormalize group onto Vote.

I don't think we need a special class of Membership when the membership is in a committee, group, etc. What's different in those cases is the Organization in which the person is a member. There is nothing special about the memberships in those cases.

akuckartz commented 10 years ago

@jpmckinney A problem can arrise if this leads to large amounts of redundant data being delivered from server to client. The rules or relations which are applied during such denormalization need to be made explicit. As the Wiki page states:

This is done by creating rules in the database called constraints, that specify how the redundant copies of information must be kept synchronised.

A denormalized data model is not the same as a data model that has not been normalized, and denormalization should only take place after a satisfactory level of normalization has taken place and that any required constraints and/or rules have been created to deal with the inherent anomalies in the design.

In the RDF world concepts somewhat similar to normalization exist. inferencing or reasoning can be done using rules (which can for example be formulated in OWL or using SPARQL CONSTRUCT statements).

tmtmtmtm commented 10 years ago

@akuckartz, if storing this field is a problem for someone, then they can just omit it.

But when constructing a Vote record, it's going to be fairly common to not have a fully-constructed, detailed history of a Person's historical memberships to hand. If I'm scraping voting records from a Parliament that doesn't also offer good MP data (or, as is quite common, only gives current information for people, not historic), trying to dynamically construct those records out of the Vote information is going to be rather complex, messy, and error-prone, and is almost guaranteed to lead to incorrect information. I can set a calculated start_date and end_date for a Membership based on the earliest and latest votes I've seen, but those are pretty much never going to be actually correct, and dealing with people changing Group starts getting very complex very quickly. It's much simpler — and guaranteed to be accurate — to simply replicate the source data into the Vote record.

I don't believe that avoiding all potential duplication is a goal for Popolo — nor do I believe it should be. Optimising for the most common use cases seems much better than abstract data purity to me.

akuckartz commented 10 years ago

@tmtmtmtm Thanks for the explanation. Historic data often is incomplete and sometimes contradictory. OParl is first of all about use cases where all data is as complete as necessary and contains no contradictions. I am interested in solutions for both types of use cases. Such solutions could use more specific rules which are limited to specific parliaments or time intervals.

jpmckinney commented 10 years ago

@akuckartz I'm not expert enough in SPARQL or OWL to be able to write a constraint that describes what value group should have, but if you can contribute one, I can add it to Popolo. I will eventually have to add an OWL file to define the new RDF properties in Popolo.

As @tmtmtmtm wrote, if someone prefers to just use Memberships, there is no obligation to use group.

jpmckinney commented 9 years ago

Thanks to everyone for improving the motion and voting specs! There are a few possible new properties documented in the issue description. If demand increases for those properties, they will be added. The best candidates are currently VoteEvent#options and #method; the code list for #method will need more work, but we might base a first version on the code lists of the countries publishing this information.

girogiro commented 9 years ago

I miss the most an identifier property in Motion class. It is needed to determine whether the motion is already scraped or not when scraping new data. None of text, date or sources.url is guaranteed to be unique.

jpmckinney commented 9 years ago

What would be an example value of your identifier?

michalskop commented 9 years ago

The problem arises here: We use 1:1 mapping of motions to vote events (it is necessary, because the "requirement" is part of motion and not of a vote event, however the requirement may change for different vote events during a single topic). I create a motion (e.g., from http://www.psp.cz/sqw/hlasy.sqw?g=5000) and than I attach vote events (a single vote event in this case) to it. However, there is no identifier to find the right motion after it has been created. Sometimes there are more vote events/motions on a single link, like here: http://www.plasy.cz/e_download.php?file=data/editor/440cs_4.pdf&original=Zast1-2014.pdf

girogiro commented 9 years ago

I expect the identifier value would usually be an integer (position within a legislative session) or a value like 12/c, 2014/556.

jpmckinney commented 9 years ago

I've added a Motion#identifier property. Thanks for the examples!

girogiro commented 9 years ago

Thanks for adding! We are gonna use it immediately.