slaw 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +154 -17
- data/lib/slaw/act.rb +151 -20
- data/lib/slaw/bylaw.rb +36 -20
- data/lib/slaw/schemas/akomantoso20.xsd +6834 -0
- data/lib/slaw/schemas/xml.xsd +120 -0
- data/lib/slaw/version.rb +1 -1
- data/spec/bylaw_spec.rb +68 -0
- data/spec/fixtures/community-fire-safety.xml +3838 -0
- metadata +8 -2
@@ -0,0 +1,120 @@
|
|
1
|
+
<?xml version='1.0'?>
|
2
|
+
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
3
|
+
xml:lang="en">
|
4
|
+
|
5
|
+
<xs:annotation>
|
6
|
+
<xs:documentation>
|
7
|
+
See http://www.w3.org/XML/1998/namespace.html and
|
8
|
+
http://www.w3.org/TR/REC-xml for information about this namespace.
|
9
|
+
|
10
|
+
This schema document describes the XML namespace, in a form
|
11
|
+
suitable for import by other schema documents.
|
12
|
+
|
13
|
+
Note that local names in this namespace are intended to be defined
|
14
|
+
only by the World Wide Web Consortium or its subgroups. The
|
15
|
+
following names are currently defined in this namespace and should
|
16
|
+
not be used with conflicting semantics by any Working Group,
|
17
|
+
specification, or document instance:
|
18
|
+
|
19
|
+
base (as an attribute name): denotes an attribute whose value
|
20
|
+
provides a URI to be used as the base for interpreting any
|
21
|
+
relative URIs in the scope of the element on which it
|
22
|
+
appears; its value is inherited. This name is reserved
|
23
|
+
by virtue of its definition in the XML Base specification.
|
24
|
+
|
25
|
+
lang (as an attribute name): denotes an attribute whose value
|
26
|
+
is a language code for the natural language of the content of
|
27
|
+
any element; its value is inherited. This name is reserved
|
28
|
+
by virtue of its definition in the XML specification.
|
29
|
+
|
30
|
+
space (as an attribute name): denotes an attribute whose
|
31
|
+
value is a keyword indicating what whitespace processing
|
32
|
+
discipline is intended for the content of the element; its
|
33
|
+
value is inherited. This name is reserved by virtue of its
|
34
|
+
definition in the XML specification.
|
35
|
+
|
36
|
+
Father (in any context at all): denotes Jon Bosak, the chair of
|
37
|
+
the original XML Working Group. This name is reserved by
|
38
|
+
the following decision of the W3C XML Plenary and
|
39
|
+
XML Coordination groups:
|
40
|
+
|
41
|
+
In appreciation for his vision, leadership and dedication
|
42
|
+
the W3C XML Plenary on this 10th day of February, 2000
|
43
|
+
reserves for Jon Bosak in perpetuity the XML name
|
44
|
+
xml:Father
|
45
|
+
</xs:documentation>
|
46
|
+
</xs:annotation>
|
47
|
+
|
48
|
+
<xs:annotation>
|
49
|
+
<xs:documentation>This schema defines attributes and an attribute group
|
50
|
+
suitable for use by
|
51
|
+
schemas wishing to allow xml:base, xml:lang or xml:space attributes
|
52
|
+
on elements they define.
|
53
|
+
|
54
|
+
To enable this, such a schema must import this schema
|
55
|
+
for the XML namespace, e.g. as follows:
|
56
|
+
<schema . . .>
|
57
|
+
. . .
|
58
|
+
<import namespace="http://www.w3.org/XML/1998/namespace"
|
59
|
+
schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
|
60
|
+
|
61
|
+
Subsequently, qualified reference to any of the attributes
|
62
|
+
or the group defined below will have the desired effect, e.g.
|
63
|
+
|
64
|
+
<type . . .>
|
65
|
+
. . .
|
66
|
+
<attributeGroup ref="xml:specialAttrs"/>
|
67
|
+
|
68
|
+
will define a type which will schema-validate an instance
|
69
|
+
element with any of those attributes
|
70
|
+
</xs:documentation>
|
71
|
+
</xs:annotation>
|
72
|
+
|
73
|
+
<xs:annotation>
|
74
|
+
<xs:documentation>In keeping with the XML Schema WG's standard versioning
|
75
|
+
policy, this schema document will persist at
|
76
|
+
http://www.w3.org/2001/03/xml.xsd.
|
77
|
+
At the date of issue it can also be found at
|
78
|
+
http://www.w3.org/2001/xml.xsd.
|
79
|
+
The schema document at that URI may however change in the future,
|
80
|
+
in order to remain compatible with the latest version of XML Schema
|
81
|
+
itself. In other words, if the XML Schema namespace changes, the version
|
82
|
+
of this document at
|
83
|
+
http://www.w3.org/2001/xml.xsd will change
|
84
|
+
accordingly; the version at
|
85
|
+
http://www.w3.org/2001/03/xml.xsd will not change.
|
86
|
+
</xs:documentation>
|
87
|
+
</xs:annotation>
|
88
|
+
|
89
|
+
<xs:attribute name="lang" type="xs:language">
|
90
|
+
<xs:annotation>
|
91
|
+
<xs:documentation>In due course, we should install the relevant ISO 2- and 3-letter
|
92
|
+
codes as the enumerated possible values . . .
|
93
|
+
</xs:documentation>
|
94
|
+
</xs:annotation>
|
95
|
+
</xs:attribute>
|
96
|
+
|
97
|
+
<xs:attribute name="space" default="preserve">
|
98
|
+
<xs:simpleType>
|
99
|
+
<xs:restriction base="xs:NCName">
|
100
|
+
<xs:enumeration value="default"/>
|
101
|
+
<xs:enumeration value="preserve"/>
|
102
|
+
</xs:restriction>
|
103
|
+
</xs:simpleType>
|
104
|
+
</xs:attribute>
|
105
|
+
|
106
|
+
<xs:attribute name="base" type="xs:anyURI">
|
107
|
+
<xs:annotation>
|
108
|
+
<xs:documentation>See http://www.w3.org/TR/xmlbase/ for
|
109
|
+
information about this attribute.
|
110
|
+
</xs:documentation>
|
111
|
+
</xs:annotation>
|
112
|
+
</xs:attribute>
|
113
|
+
|
114
|
+
<xs:attributeGroup name="specialAttrs">
|
115
|
+
<xs:attribute ref="xml:base"/>
|
116
|
+
<xs:attribute ref="xml:lang"/>
|
117
|
+
<xs:attribute ref="xml:space"/>
|
118
|
+
</xs:attributeGroup>
|
119
|
+
|
120
|
+
</xs:schema>
|
data/lib/slaw/version.rb
CHANGED
data/spec/bylaw_spec.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'slaw'
|
5
|
+
|
6
|
+
describe Slaw::ByLaw do
|
7
|
+
let(:filename) { File.dirname(__FILE__) + "/fixtures/community-fire-safety.xml" }
|
8
|
+
subject { Slaw::ByLaw.new(filename) }
|
9
|
+
|
10
|
+
it 'should have correct basic properties' do
|
11
|
+
subject.title.should == 'Community Fire Safety By-law as amended'
|
12
|
+
subject.amended?.should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should set the title correctly' do
|
16
|
+
subject.title = 'foo'
|
17
|
+
subject.meta.at_xpath('./a:identification/a:FRBRWork/a:FRBRalias', a: Slaw::NS)['value'].should == 'foo'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should set the title if it doesnt exist' do
|
21
|
+
subject.meta.at_xpath('./a:identification/a:FRBRWork/a:FRBRalias', a: Slaw::NS).remove
|
22
|
+
subject.title = 'bar'
|
23
|
+
subject.title.should == 'bar as amended'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should set the publication details' do
|
27
|
+
subject.meta.at_xpath('./a:publication', a: Slaw::NS).remove
|
28
|
+
|
29
|
+
subject.published!(name: 'foo', number: '1234', date: '2014-01-01')
|
30
|
+
subject.publication['name'].should == 'foo'
|
31
|
+
subject.publication['showAs'].should == 'foo'
|
32
|
+
subject.publication['number'].should == '1234'
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should get/set the work date' do
|
36
|
+
subject.date.should == '2002-02-28'
|
37
|
+
|
38
|
+
subject.date = '2014-01-01'
|
39
|
+
subject.date.should == '2014-01-01'
|
40
|
+
subject.meta.at_xpath('./a:identification/a:FRBRWork/a:FRBRdate[@name="Generation"]', a: Slaw::NS)['date'].should == '2014-01-01'
|
41
|
+
subject.meta.at_xpath('./a:identification/a:FRBRExpression/a:FRBRdate[@name="Generation"]', a: Slaw::NS)['date'].should == '2014-01-01'
|
42
|
+
|
43
|
+
subject.id_uri.should == '/za/by-law/cape-town/2014/community-fire-safety'
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should update the uri when the year changes' do
|
47
|
+
subject.id_uri.should == '/za/by-law/cape-town/2002/community-fire-safety'
|
48
|
+
subject.year = '1980'
|
49
|
+
subject.id_uri.should == '/za/by-law/cape-town/1980/community-fire-safety'
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should update the uri when the region changes' do
|
53
|
+
subject.id_uri.should == '/za/by-law/cape-town/2002/community-fire-safety'
|
54
|
+
subject.region = 'foo-bar'
|
55
|
+
subject.id_uri.should == '/za/by-law/foo-bar/2002/community-fire-safety'
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should update the uri when the name changes' do
|
59
|
+
subject.id_uri.should == '/za/by-law/cape-town/2002/community-fire-safety'
|
60
|
+
subject.name = 'foo-bar'
|
61
|
+
subject.id_uri.should == '/za/by-law/cape-town/2002/foo-bar'
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should validate' do
|
65
|
+
subject.validate.should == []
|
66
|
+
subject.validates?.should be_true
|
67
|
+
end
|
68
|
+
end
|