restfulie 0.1.0.beta1 → 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. data/README.textile +87 -99
  2. data/Rakefile +14 -109
  3. data/lib/restfulie.rb +183 -23
  4. metadata +12 -197
  5. data/Gemfile +0 -28
  6. data/Gemfile.lock +0 -128
  7. data/LICENSE +0 -17
  8. data/lib/restfulie/client.rb +0 -26
  9. data/lib/restfulie/client/base.rb +0 -36
  10. data/lib/restfulie/client/cache.rb +0 -11
  11. data/lib/restfulie/client/cache/basic.rb +0 -76
  12. data/lib/restfulie/client/cache/fake.rb +0 -15
  13. data/lib/restfulie/client/cache/http_ext.rb +0 -123
  14. data/lib/restfulie/client/cache/restrictions.rb +0 -13
  15. data/lib/restfulie/client/configuration.rb +0 -67
  16. data/lib/restfulie/client/dsl.rb +0 -66
  17. data/lib/restfulie/client/entry_point.rb +0 -61
  18. data/lib/restfulie/client/ext/atom_ext.rb +0 -14
  19. data/lib/restfulie/client/ext/http_ext.rb +0 -22
  20. data/lib/restfulie/client/ext/json_ext.rb +0 -16
  21. data/lib/restfulie/client/feature.rb +0 -5
  22. data/lib/restfulie/client/feature/base.rb +0 -75
  23. data/lib/restfulie/client/feature/base_request.rb +0 -35
  24. data/lib/restfulie/client/feature/cache.rb +0 -16
  25. data/lib/restfulie/client/feature/enhance_response.rb +0 -12
  26. data/lib/restfulie/client/feature/follow_request.rb +0 -41
  27. data/lib/restfulie/client/feature/history.rb +0 -26
  28. data/lib/restfulie/client/feature/history_request.rb +0 -19
  29. data/lib/restfulie/client/feature/open_search.rb +0 -21
  30. data/lib/restfulie/client/feature/open_search/pattern_matcher.rb +0 -25
  31. data/lib/restfulie/client/feature/serialize_body.rb +0 -32
  32. data/lib/restfulie/client/feature/setup_header.rb +0 -22
  33. data/lib/restfulie/client/feature/throw_error.rb +0 -41
  34. data/lib/restfulie/client/feature/verb.rb +0 -119
  35. data/lib/restfulie/client/http.rb +0 -7
  36. data/lib/restfulie/client/http/cache.rb +0 -28
  37. data/lib/restfulie/client/http/error.rb +0 -77
  38. data/lib/restfulie/client/http/response_holder.rb +0 -29
  39. data/lib/restfulie/client/master_delegator.rb +0 -31
  40. data/lib/restfulie/client/mikyung.rb +0 -15
  41. data/lib/restfulie/client/mikyung/concatenator.rb +0 -18
  42. data/lib/restfulie/client/mikyung/core.rb +0 -70
  43. data/lib/restfulie/client/mikyung/languages.rb +0 -11
  44. data/lib/restfulie/client/mikyung/languages/german.rb +0 -24
  45. data/lib/restfulie/client/mikyung/languages/portuguese.rb +0 -23
  46. data/lib/restfulie/client/mikyung/rest_process_model.rb +0 -191
  47. data/lib/restfulie/client/mikyung/steady_state_walker.rb +0 -38
  48. data/lib/restfulie/client/mikyung/then_condition.rb +0 -39
  49. data/lib/restfulie/client/mikyung/when_condition.rb +0 -57
  50. data/lib/restfulie/common.rb +0 -18
  51. data/lib/restfulie/common/converter.rb +0 -43
  52. data/lib/restfulie/common/converter/atom.rb +0 -12
  53. data/lib/restfulie/common/converter/atom/base.rb +0 -91
  54. data/lib/restfulie/common/converter/atom/builder.rb +0 -111
  55. data/lib/restfulie/common/converter/atom/helpers.rb +0 -17
  56. data/lib/restfulie/common/converter/json.rb +0 -12
  57. data/lib/restfulie/common/converter/json/base.rb +0 -87
  58. data/lib/restfulie/common/converter/json/builder.rb +0 -102
  59. data/lib/restfulie/common/converter/json/helpers.rb +0 -17
  60. data/lib/restfulie/common/converter/open_search.rb +0 -16
  61. data/lib/restfulie/common/converter/open_search/descriptor.rb +0 -32
  62. data/lib/restfulie/common/converter/values.rb +0 -33
  63. data/lib/restfulie/common/converter/xml.rb +0 -14
  64. data/lib/restfulie/common/converter/xml/base.rb +0 -63
  65. data/lib/restfulie/common/converter/xml/builder.rb +0 -113
  66. data/lib/restfulie/common/converter/xml/helpers.rb +0 -17
  67. data/lib/restfulie/common/converter/xml/link.rb +0 -30
  68. data/lib/restfulie/common/converter/xml/links.rb +0 -21
  69. data/lib/restfulie/common/core_ext.rb +0 -1
  70. data/lib/restfulie/common/core_ext/hash.rb +0 -18
  71. data/lib/restfulie/common/error.rb +0 -19
  72. data/lib/restfulie/common/links.rb +0 -9
  73. data/lib/restfulie/common/logger.rb +0 -19
  74. data/lib/restfulie/common/representation.rb +0 -3
  75. data/lib/restfulie/common/representation/atom.rb +0 -20
  76. data/lib/restfulie/common/representation/atom/atom.rng +0 -597
  77. data/lib/restfulie/common/representation/atom/base.rb +0 -142
  78. data/lib/restfulie/common/representation/atom/category.rb +0 -41
  79. data/lib/restfulie/common/representation/atom/entry.rb +0 -59
  80. data/lib/restfulie/common/representation/atom/factory.rb +0 -43
  81. data/lib/restfulie/common/representation/atom/feed.rb +0 -110
  82. data/lib/restfulie/common/representation/atom/link.rb +0 -68
  83. data/lib/restfulie/common/representation/atom/person.rb +0 -48
  84. data/lib/restfulie/common/representation/atom/source.rb +0 -59
  85. data/lib/restfulie/common/representation/atom/tag_collection.rb +0 -38
  86. data/lib/restfulie/common/representation/atom/xml.rb +0 -90
  87. data/lib/restfulie/common/representation/generic.rb +0 -22
  88. data/lib/restfulie/common/representation/json.rb +0 -13
  89. data/lib/restfulie/common/representation/json/base.rb +0 -27
  90. data/lib/restfulie/common/representation/json/keys_as_methods.rb +0 -74
  91. data/lib/restfulie/common/representation/json/link.rb +0 -29
  92. data/lib/restfulie/common/representation/json/link_collection.rb +0 -23
  93. data/lib/restfulie/common/representation/links.rb +0 -11
  94. data/lib/restfulie/server.rb +0 -25
  95. data/lib/restfulie/server/action_controller.rb +0 -11
  96. data/lib/restfulie/server/action_controller/base.rb +0 -48
  97. data/lib/restfulie/server/action_controller/params_parser.rb +0 -100
  98. data/lib/restfulie/server/action_controller/patch.rb +0 -6
  99. data/lib/restfulie/server/action_controller/restful_responder.rb +0 -12
  100. data/lib/restfulie/server/action_controller/trait.rb +0 -9
  101. data/lib/restfulie/server/action_controller/trait/cacheable.rb +0 -81
  102. data/lib/restfulie/server/action_controller/trait/created.rb +0 -17
  103. data/lib/restfulie/server/action_view.rb +0 -10
  104. data/lib/restfulie/server/action_view/helpers.rb +0 -50
  105. data/lib/restfulie/server/action_view/template_handlers.rb +0 -30
  106. data/lib/restfulie/server/action_view/template_handlers/tokamak.rb +0 -21
  107. data/lib/restfulie/server/configuration.rb +0 -24
  108. data/lib/restfulie/server/controller.rb +0 -74
  109. data/lib/restfulie/server/core_ext.rb +0 -1
  110. data/lib/restfulie/server/core_ext/array.rb +0 -61
  111. data/lib/restfulie/version.rb +0 -14
@@ -1,63 +0,0 @@
1
- require 'active_support/core_ext/hash/conversions'
2
-
3
- module Restfulie
4
- module Common
5
- module Converter
6
- module Xml
7
- module Base
8
- module ClassMethods
9
- mattr_reader :media_type_name
10
- @@media_type_name = 'application/xml'
11
-
12
- mattr_reader :headers
13
- @@headers = {
14
- :post => { 'Content-Type' => media_type_name }
15
- }
16
-
17
- def marshal(entity, options = {})
18
- to_xml(entity, options)
19
- end
20
-
21
- def unmarshal(string)
22
- Hash.from_xml string
23
- end
24
-
25
- mattr_reader :recipes
26
- @@recipes = {}
27
-
28
- def describe_recipe(recipe_name, options={}, &block)
29
- raise 'Undefined recipe' unless block_given?
30
- raise 'Undefined recipe_name' unless recipe_name
31
- @@recipes[recipe_name] = block
32
- end
33
-
34
- def to_xml(obj, options = {}, &block)
35
- return obj if obj.kind_of?(String)
36
-
37
- if block_given?
38
- recipe = block
39
- elsif options[:recipe]
40
- recipe = @@recipes[options[:recipe]]
41
- elsif obj.kind_of?(Hash) && obj.size==1
42
- return obj.values.first.to_xml(:root => obj.keys.first)
43
- else
44
- return obj.to_xml
45
- end
46
-
47
- # Create representation and proxy
48
- builder = Builder.new(obj, options)
49
-
50
- # Check recipe arity size before calling it
51
- recipe.call(*[builder, obj, options][0,recipe.arity])
52
- builder.doc.to_xml
53
- end
54
-
55
- def helper
56
- Helpers
57
- end
58
- end
59
- end
60
- end
61
- end
62
- end
63
- end
@@ -1,113 +0,0 @@
1
- module Restfulie
2
- module Common
3
- module Converter
4
- module Xml
5
- # Implements the interface for marshal Xml media type requests (application/xml)
6
- class Builder
7
- attr_reader :doc
8
- def initialize(obj, options = {})
9
- @doc = Nokogiri::XML::Document.new
10
- @obj = obj
11
- root = options[:root] || Restfulie::Common::Converter.root_element_for(obj)
12
- @parent = @doc.create_element(root)
13
- @parent.parent = @doc
14
- end
15
-
16
- def values(options = {}, &block)
17
- options.each do |key,value|
18
- attr = key.to_s
19
- if attr =~ /^xmlns(:\w+)?$/
20
- ns = attr.split(":", 2)[1]
21
- @parent.add_namespace_definition(ns, value)
22
- end
23
- end
24
- yield Values.new(self)
25
- end
26
-
27
- def insert_value(name, prefix, *args, &block)
28
- node = create_element(name.to_s, prefix, *args)
29
- node.parent = @parent
30
-
31
- if block_given?
32
- @parent = node
33
- block.call
34
- @parent = node.parent
35
- end
36
- end
37
-
38
- def link(relationship, uri, options = {})
39
- options["rel"] = relationship.to_s
40
- options["href"] = uri
41
- options["type"] ||= "application/xml"
42
- insert_value("link", nil, options)
43
- end
44
-
45
- def members(a_collection = nil, options = {}, &block)
46
- collection = a_collection || @obj
47
- raise Error::BuilderError("Members method require a collection to execute") unless collection.respond_to?(:each)
48
- collection.each do |member|
49
- root = options[:root] || Restfulie::Common::Converter.root_element_for(member)
50
- entry = @doc.create_element(root)
51
- entry.parent = @parent
52
- @parent = entry
53
- block.call(self, member)
54
- @parent = entry.parent
55
- end
56
- end
57
-
58
- private
59
-
60
- def create_element(node, prefix, *args)
61
- node = @doc.create_element(node) do |n|
62
- if prefix
63
- if namespace = prefix_valid?(prefix)
64
- # Adding namespace prefix
65
- n.namespace = namespace
66
- namespace = nil
67
- end
68
- end
69
-
70
- args.each do |arg|
71
- case arg
72
- # Adding XML attributes
73
- when Hash
74
- arg.each { |k,v|
75
- key = k.to_s
76
- if key =~ /^xmlns(:\w+)?$/
77
- ns_name = key.split(":", 2)[1]
78
- n.add_namespace_definition(ns_name, v)
79
- next
80
- end
81
- n[k.to_s] = v.to_s
82
- }
83
- # Adding XML node content
84
- else
85
- content = if arg.kind_of?(Time) || arg.kind_of?(DateTime)
86
- arg.xmlschema
87
- else
88
- arg
89
- end
90
- n.content = content
91
- end
92
- end
93
- end
94
- end
95
-
96
- def prefix_valid?(prefix)
97
- ns = @parent.namespace_definitions.find { |x| x.prefix == prefix.to_s }
98
-
99
- unless ns
100
- @parent.ancestors.each do |a|
101
- next if a == @doc
102
- ns = a.namespace_definitions.find { |x| x.prefix == prefix.to_s }
103
- break if ns
104
- end
105
- end
106
-
107
- return ns
108
- end
109
- end
110
- end
111
- end
112
- end
113
- end
@@ -1,17 +0,0 @@
1
- module Restfulie
2
- module Common
3
- module Converter
4
- module Xml
5
- module Helpers
6
- def collection(obj, opts = {}, &block)
7
- Xml.to_xml(obj, opts, &block)
8
- end
9
-
10
- def member(obj, opts = {}, &block)
11
- Xml.to_xml(obj, opts, &block)
12
- end
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,30 +0,0 @@
1
- module Restfulie
2
- module Common
3
- module Converter
4
- module Xml
5
- class Link
6
- def initialize(options = {})
7
- @options = options
8
- end
9
- def href
10
- @options["href"]
11
- end
12
- def rel
13
- @options["rel"]
14
- end
15
- def content_type
16
- @options["type"]
17
- end
18
- def type
19
- content_type
20
- end
21
- def follow
22
- r = Restfulie.at(href)
23
- r = r.as(content_type) if content_type
24
- r
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,21 +0,0 @@
1
- module Restfulie
2
- module Common
3
- module Converter
4
- module Xml
5
- class Links
6
- def initialize(links)
7
- links = [links] unless links.kind_of? Array
8
- links = [] unless links
9
- @links = links.map { |l| Restfulie::Common::Converter::Xml::Link.new(l) }
10
- end
11
-
12
- def method_missing(sym, *args)
13
- @links.find do |link|
14
- link.rel == sym.to_s
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1 +0,0 @@
1
- require 'restfulie/common/core_ext/hash'
@@ -1,18 +0,0 @@
1
- class Hash
2
-
3
- def links(*args)
4
- links = fetch("link", [])
5
- Restfulie::Common::Converter::Xml::Links.new(links)
6
- end
7
-
8
- include Restfulie::Common::Links
9
-
10
- def method_missing(sym, *args)
11
- self[sym.to_s].nil? ? super(sym, args) : self[sym.to_s]
12
- end
13
-
14
- def respond_to?(sym)
15
- include?(sym.to_s) || super(sym)
16
- end
17
-
18
- end
@@ -1,19 +0,0 @@
1
- module Restfulie
2
- module Common
3
- module Error
4
- class RestfulieError < StandardError; end
5
- class MarshallingError < RestfulieError; end
6
- class UndefinedMarshallingError < MarshallingError; end
7
-
8
- # Atom marshallinh error
9
- class AtomMarshallingError < MarshallingError; end
10
- class NameSpaceError < AtomMarshallingError; end
11
-
12
- # Converter
13
- class ConverterError < RestfulieError; end
14
-
15
- # builder
16
- class BuilderError < RestfulieError; end
17
- end
18
- end
19
- end
@@ -1,9 +0,0 @@
1
- module Restfulie
2
- module Common
3
- module Links
4
- def refresh
5
- links.self.follow.get
6
- end
7
- end
8
- end
9
- end
@@ -1,19 +0,0 @@
1
- module Restfulie
2
- module Common
3
- class Logger
4
- # Configure the logger used by Restfulie
5
- #
6
- # The logger defaults to ActiveSupport::BufferedLogger.new(STDOUT)
7
- def self.logger
8
- @@logger
9
- end
10
-
11
- def self.logger=(value)
12
- @@logger = value
13
- end
14
-
15
- @@logger = ActiveSupport::BufferedLogger.new(STDOUT)
16
- @@logger.level = ::Logger::DEBUG
17
- end
18
- end
19
- end
@@ -1,3 +0,0 @@
1
- module Restfulie::Common::Representation
2
- Dir["#{File.dirname(__FILE__)}/representation/*.rb"].each {|f| autoload File.basename(f)[0..-4].camelize.to_sym, f }
3
- end
@@ -1,20 +0,0 @@
1
- require 'nokogiri'
2
-
3
- module Restfulie
4
- module Common
5
- module Representation
6
- module Atom
7
- autoload :Factory, 'restfulie/common/representation/atom/factory'
8
- autoload :XML, 'restfulie/common/representation/atom/xml'
9
- autoload :Base, 'restfulie/common/representation/atom/base'
10
- autoload :TagCollection, 'restfulie/common/representation/atom/tag_collection'
11
- autoload :Link, 'restfulie/common/representation/atom/link'
12
- autoload :Person, 'restfulie/common/representation/atom/person'
13
- autoload :Category, 'restfulie/common/representation/atom/category'
14
- autoload :Feed, 'restfulie/common/representation/atom/feed'
15
- autoload :Entry, 'restfulie/common/representation/atom/entry'
16
- autoload :Source, 'restfulie/common/representation/atom/source'
17
- end
18
- end
19
- end
20
- end
@@ -1,597 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!--
3
- -*- rnc -*-
4
- RELAX NG Compact Syntax Grammar for the
5
- Atom Format Specification Version 11
6
- -->
7
- <grammar xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:s="http://www.ascc.net/xml/schematron" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
8
- <start>
9
- <choice>
10
- <ref name="atomFeed"/>
11
- <ref name="atomEntry"/>
12
- </choice>
13
- </start>
14
- <!-- Common attributes -->
15
- <define name="atomCommonAttributes">
16
- <optional>
17
- <attribute name="xml:base">
18
- <ref name="atomUri"/>
19
- </attribute>
20
- </optional>
21
- <optional>
22
- <attribute name="xml:lang">
23
- <ref name="atomLanguageTag"/>
24
- </attribute>
25
- </optional>
26
- <zeroOrMore>
27
- <ref name="undefinedAttribute"/>
28
- </zeroOrMore>
29
- </define>
30
- <!-- Text Constructs -->
31
- <define name="atomPlainTextConstruct">
32
- <ref name="atomCommonAttributes"/>
33
- <optional>
34
- <attribute name="type">
35
- <choice>
36
- <value>text</value>
37
- <value>html</value>
38
- </choice>
39
- </attribute>
40
- </optional>
41
- <text/>
42
- </define>
43
- <define name="atomXHTMLTextConstruct">
44
- <ref name="atomCommonAttributes"/>
45
- <attribute name="type">
46
- <value>xhtml</value>
47
- </attribute>
48
- <ref name="xhtmlDiv"/>
49
- </define>
50
- <define name="atomTextConstruct">
51
- <choice>
52
- <ref name="atomPlainTextConstruct"/>
53
- <ref name="atomXHTMLTextConstruct"/>
54
- </choice>
55
- </define>
56
- <!-- Person Construct -->
57
- <define name="atomPersonConstruct">
58
- <ref name="atomCommonAttributes"/>
59
- <interleave>
60
- <element name="atom:name">
61
- <text/>
62
- </element>
63
- <optional>
64
- <element name="atom:uri">
65
- <ref name="atomUri"/>
66
- </element>
67
- </optional>
68
- <optional>
69
- <element name="atom:email">
70
- <ref name="atomEmailAddress"/>
71
- </element>
72
- </optional>
73
- <zeroOrMore>
74
- <ref name="extensionElement"/>
75
- </zeroOrMore>
76
- </interleave>
77
- </define>
78
- <!-- Date Construct -->
79
- <define name="atomDateConstruct">
80
- <ref name="atomCommonAttributes"/>
81
- <data type="dateTime"/>
82
- </define>
83
- <!-- atom:feed -->
84
- <define name="atomFeed">
85
- <element name="atom:feed">
86
- <s:rule context="atom:feed">
87
- <s:assert test="atom:author or not(atom:entry[not(atom:author)])">An atom:feed must have an atom:author unless all of its atom:entry children have an atom:author.</s:assert>
88
- </s:rule>
89
- <ref name="atomCommonAttributes"/>
90
- <interleave>
91
- <zeroOrMore>
92
- <ref name="atomAuthor"/>
93
- </zeroOrMore>
94
- <zeroOrMore>
95
- <ref name="atomCategory"/>
96
- </zeroOrMore>
97
- <zeroOrMore>
98
- <ref name="atomContributor"/>
99
- </zeroOrMore>
100
- <optional>
101
- <ref name="atomGenerator"/>
102
- </optional>
103
- <optional>
104
- <ref name="atomIcon"/>
105
- </optional>
106
- <ref name="atomId"/>
107
- <zeroOrMore>
108
- <ref name="atomLink"/>
109
- </zeroOrMore>
110
- <optional>
111
- <ref name="atomLogo"/>
112
- </optional>
113
- <optional>
114
- <ref name="atomRights"/>
115
- </optional>
116
- <optional>
117
- <ref name="atomSubtitle"/>
118
- </optional>
119
- <ref name="atomTitle"/>
120
- <ref name="atomUpdated"/>
121
- <zeroOrMore>
122
- <ref name="extensionElement"/>
123
- </zeroOrMore>
124
- </interleave>
125
- <zeroOrMore>
126
- <ref name="atomEntry"/>
127
- </zeroOrMore>
128
- </element>
129
- </define>
130
- <!-- atom:entry -->
131
- <define name="atomEntry">
132
- <element name="atom:entry">
133
- <s:rule context="atom:entry">
134
- <s:assert test="atom:link[@rel='alternate'] or atom:link[not(@rel)] or atom:content">An atom:entry must have at least one atom:link element with a rel attribute of 'alternate' or an atom:content.</s:assert>
135
- </s:rule>
136
- <s:rule context="atom:entry">
137
- <s:assert test="atom:author or ../atom:author or atom:source/atom:author">An atom:entry must have an atom:author if its feed does not.</s:assert>
138
- </s:rule>
139
- <ref name="atomCommonAttributes"/>
140
- <interleave>
141
- <zeroOrMore>
142
- <ref name="atomAuthor"/>
143
- </zeroOrMore>
144
- <zeroOrMore>
145
- <ref name="atomCategory"/>
146
- </zeroOrMore>
147
- <optional>
148
- <ref name="atomContent"/>
149
- </optional>
150
- <zeroOrMore>
151
- <ref name="atomContributor"/>
152
- </zeroOrMore>
153
- <ref name="atomId"/>
154
- <zeroOrMore>
155
- <ref name="atomLink"/>
156
- </zeroOrMore>
157
- <optional>
158
- <ref name="atomPublished"/>
159
- </optional>
160
- <optional>
161
- <ref name="atomRights"/>
162
- </optional>
163
- <optional>
164
- <ref name="atomSource"/>
165
- </optional>
166
- <optional>
167
- <ref name="atomSummary"/>
168
- </optional>
169
- <ref name="atomTitle"/>
170
- <ref name="atomUpdated"/>
171
- <zeroOrMore>
172
- <ref name="extensionElement"/>
173
- </zeroOrMore>
174
- </interleave>
175
- </element>
176
- </define>
177
- <!-- atom:content -->
178
- <define name="atomInlineTextContent">
179
- <element name="atom:content">
180
- <ref name="atomCommonAttributes"/>
181
- <optional>
182
- <attribute name="type">
183
- <choice>
184
- <value>text</value>
185
- <value>html</value>
186
- </choice>
187
- </attribute>
188
- </optional>
189
- <zeroOrMore>
190
- <text/>
191
- </zeroOrMore>
192
- </element>
193
- </define>
194
- <define name="atomInlineXHTMLContent">
195
- <element name="atom:content">
196
- <ref name="atomCommonAttributes"/>
197
- <attribute name="type">
198
- <value>xhtml</value>
199
- </attribute>
200
- <ref name="xhtmlDiv"/>
201
- </element>
202
- </define>
203
- <define name="atomInlineOtherContent">
204
- <element name="atom:content">
205
- <ref name="atomCommonAttributes"/>
206
- <optional>
207
- <attribute name="type">
208
- <ref name="atomMediaType"/>
209
- </attribute>
210
- </optional>
211
- <zeroOrMore>
212
- <choice>
213
- <text/>
214
- <ref name="anyElement"/>
215
- </choice>
216
- </zeroOrMore>
217
- </element>
218
- </define>
219
- <define name="atomOutOfLineContent">
220
- <element name="atom:content">
221
- <ref name="atomCommonAttributes"/>
222
- <optional>
223
- <attribute name="type">
224
- <ref name="atomMediaType"/>
225
- </attribute>
226
- </optional>
227
- <attribute name="src">
228
- <ref name="atomUri"/>
229
- </attribute>
230
- <empty/>
231
- </element>
232
- </define>
233
- <define name="atomContent">
234
- <choice>
235
- <ref name="atomInlineTextContent"/>
236
- <ref name="atomInlineXHTMLContent"/>
237
- <ref name="atomInlineOtherContent"/>
238
- <ref name="atomOutOfLineContent"/>
239
- </choice>
240
- </define>
241
- <!-- atom:author -->
242
- <define name="atomAuthor">
243
- <element name="atom:author">
244
- <ref name="atomPersonConstruct"/>
245
- </element>
246
- </define>
247
- <!-- atom:category -->
248
- <define name="atomCategory">
249
- <element name="atom:category">
250
- <ref name="atomCommonAttributes"/>
251
- <attribute name="term"/>
252
- <optional>
253
- <attribute name="scheme">
254
- <ref name="atomUri"/>
255
- </attribute>
256
- </optional>
257
- <optional>
258
- <attribute name="label"/>
259
- </optional>
260
- <ref name="undefinedContent"/>
261
- </element>
262
- </define>
263
- <!-- atom:contributor -->
264
- <define name="atomContributor">
265
- <element name="atom:contributor">
266
- <ref name="atomPersonConstruct"/>
267
- </element>
268
- </define>
269
- <!-- atom:generator -->
270
- <define name="atomGenerator">
271
- <element name="atom:generator">
272
- <ref name="atomCommonAttributes"/>
273
- <optional>
274
- <attribute name="uri">
275
- <ref name="atomUri"/>
276
- </attribute>
277
- </optional>
278
- <optional>
279
- <attribute name="version"/>
280
- </optional>
281
- <text/>
282
- </element>
283
- </define>
284
- <!-- atom:icon -->
285
- <define name="atomIcon">
286
- <element name="atom:icon">
287
- <ref name="atomCommonAttributes"/>
288
- <ref name="atomUri"/>
289
- </element>
290
- </define>
291
- <!-- atom:id -->
292
- <define name="atomId">
293
- <element name="atom:id">
294
- <ref name="atomCommonAttributes"/>
295
- <ref name="atomUri"/>
296
- </element>
297
- </define>
298
- <!-- atom:logo -->
299
- <define name="atomLogo">
300
- <element name="atom:logo">
301
- <ref name="atomCommonAttributes"/>
302
- <ref name="atomUri"/>
303
- </element>
304
- </define>
305
- <!-- atom:link -->
306
- <define name="atomLink">
307
- <element name="atom:link">
308
- <ref name="atomCommonAttributes"/>
309
- <attribute name="href">
310
- <ref name="atomUri"/>
311
- </attribute>
312
- <optional>
313
- <attribute name="rel">
314
- <choice>
315
- <ref name="atomNCName"/>
316
- <ref name="atomUri"/>
317
- </choice>
318
- </attribute>
319
- </optional>
320
- <optional>
321
- <attribute name="type">
322
- <ref name="atomMediaType"/>
323
- </attribute>
324
- </optional>
325
- <optional>
326
- <attribute name="hreflang">
327
- <ref name="atomLanguageTag"/>
328
- </attribute>
329
- </optional>
330
- <optional>
331
- <attribute name="title"/>
332
- </optional>
333
- <optional>
334
- <attribute name="length"/>
335
- </optional>
336
- <ref name="undefinedContent"/>
337
- </element>
338
- </define>
339
- <!-- atom:published -->
340
- <define name="atomPublished">
341
- <element name="atom:published">
342
- <ref name="atomDateConstruct"/>
343
- </element>
344
- </define>
345
- <!-- atom:rights -->
346
- <define name="atomRights">
347
- <element name="atom:rights">
348
- <ref name="atomTextConstruct"/>
349
- </element>
350
- </define>
351
- <!-- atom:source -->
352
- <define name="atomSource">
353
- <element name="atom:source">
354
- <ref name="atomCommonAttributes"/>
355
- <interleave>
356
- <zeroOrMore>
357
- <ref name="atomAuthor"/>
358
- </zeroOrMore>
359
- <zeroOrMore>
360
- <ref name="atomCategory"/>
361
- </zeroOrMore>
362
- <zeroOrMore>
363
- <ref name="atomContributor"/>
364
- </zeroOrMore>
365
- <optional>
366
- <ref name="atomGenerator"/>
367
- </optional>
368
- <optional>
369
- <ref name="atomIcon"/>
370
- </optional>
371
- <optional>
372
- <ref name="atomId"/>
373
- </optional>
374
- <zeroOrMore>
375
- <ref name="atomLink"/>
376
- </zeroOrMore>
377
- <optional>
378
- <ref name="atomLogo"/>
379
- </optional>
380
- <optional>
381
- <ref name="atomRights"/>
382
- </optional>
383
- <optional>
384
- <ref name="atomSubtitle"/>
385
- </optional>
386
- <optional>
387
- <ref name="atomTitle"/>
388
- </optional>
389
- <optional>
390
- <ref name="atomUpdated"/>
391
- </optional>
392
- <zeroOrMore>
393
- <ref name="extensionElement"/>
394
- </zeroOrMore>
395
- </interleave>
396
- </element>
397
- </define>
398
- <!-- atom:subtitle -->
399
- <define name="atomSubtitle">
400
- <element name="atom:subtitle">
401
- <ref name="atomTextConstruct"/>
402
- </element>
403
- </define>
404
- <!-- atom:summary -->
405
- <define name="atomSummary">
406
- <element name="atom:summary">
407
- <ref name="atomTextConstruct"/>
408
- </element>
409
- </define>
410
- <!-- atom:title -->
411
- <define name="atomTitle">
412
- <element name="atom:title">
413
- <ref name="atomTextConstruct"/>
414
- </element>
415
- </define>
416
- <!-- atom:updated -->
417
- <define name="atomUpdated">
418
- <element name="atom:updated">
419
- <ref name="atomDateConstruct"/>
420
- </element>
421
- </define>
422
- <!-- Low-level simple types -->
423
- <define name="atomNCName">
424
- <data type="string">
425
- <param name="minLength">1</param>
426
- <param name="pattern">[^:]*</param>
427
- </data>
428
- </define>
429
- <!-- Whatever a media type is, it contains at least one slash -->
430
- <define name="atomMediaType">
431
- <data type="string">
432
- <param name="pattern">.+/.+</param>
433
- </data>
434
- </define>
435
- <!-- As defined in RFC 3066 -->
436
- <define name="atomLanguageTag">
437
- <data type="string">
438
- <param name="pattern">[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*</param>
439
- </data>
440
- </define>
441
- <!--
442
- Unconstrained; it's not entirely clear how IRI fit into
443
- xsd:anyURI so let's not try to constrain it here
444
- -->
445
- <define name="atomUri">
446
- <text/>
447
- </define>
448
- <!-- Whatever an email address is, it contains at least one @ -->
449
- <define name="atomEmailAddress">
450
- <data type="string">
451
- <param name="pattern">.+@.+</param>
452
- </data>
453
- </define>
454
- <!-- Simple Extension -->
455
- <define name="simpleExtensionElement">
456
- <element>
457
- <anyName>
458
- <except>
459
- <nsName ns="http://www.w3.org/2005/Atom"/>
460
- </except>
461
- </anyName>
462
- <text/>
463
- </element>
464
- </define>
465
- <!-- Structured Extension -->
466
- <define name="structuredExtensionElement">
467
- <element>
468
- <anyName>
469
- <except>
470
- <nsName ns="http://www.w3.org/2005/Atom"/>
471
- </except>
472
- </anyName>
473
- <choice>
474
- <group>
475
- <oneOrMore>
476
- <attribute>
477
- <anyName/>
478
- </attribute>
479
- </oneOrMore>
480
- <zeroOrMore>
481
- <choice>
482
- <text/>
483
- <ref name="anyElement"/>
484
- </choice>
485
- </zeroOrMore>
486
- </group>
487
- <group>
488
- <zeroOrMore>
489
- <attribute>
490
- <anyName/>
491
- </attribute>
492
- </zeroOrMore>
493
- <group>
494
- <optional>
495
- <text/>
496
- </optional>
497
- <oneOrMore>
498
- <ref name="anyElement"/>
499
- </oneOrMore>
500
- <zeroOrMore>
501
- <choice>
502
- <text/>
503
- <ref name="anyElement"/>
504
- </choice>
505
- </zeroOrMore>
506
- </group>
507
- </group>
508
- </choice>
509
- </element>
510
- </define>
511
- <!-- Other Extensibility -->
512
- <define name="extensionElement">
513
- <choice>
514
- <ref name="simpleExtensionElement"/>
515
- <ref name="structuredExtensionElement"/>
516
- </choice>
517
- </define>
518
- <define name="undefinedAttribute">
519
- <attribute>
520
- <anyName>
521
- <except>
522
- <name>xml:base</name>
523
- <name>xml:lang</name>
524
- <nsName ns=""/>
525
- </except>
526
- </anyName>
527
- </attribute>
528
- </define>
529
- <define name="undefinedContent">
530
- <zeroOrMore>
531
- <choice>
532
- <text/>
533
- <ref name="anyForeignElement"/>
534
- </choice>
535
- </zeroOrMore>
536
- </define>
537
- <define name="anyElement">
538
- <element>
539
- <anyName/>
540
- <zeroOrMore>
541
- <choice>
542
- <attribute>
543
- <anyName/>
544
- </attribute>
545
- <text/>
546
- <ref name="anyElement"/>
547
- </choice>
548
- </zeroOrMore>
549
- </element>
550
- </define>
551
- <define name="anyForeignElement">
552
- <element>
553
- <anyName>
554
- <except>
555
- <nsName ns="http://www.w3.org/2005/Atom"/>
556
- </except>
557
- </anyName>
558
- <zeroOrMore>
559
- <choice>
560
- <attribute>
561
- <anyName/>
562
- </attribute>
563
- <text/>
564
- <ref name="anyElement"/>
565
- </choice>
566
- </zeroOrMore>
567
- </element>
568
- </define>
569
- <!-- XHTML -->
570
- <define name="anyXHTML">
571
- <element>
572
- <nsName ns="http://www.w3.org/1999/xhtml"/>
573
- <zeroOrMore>
574
- <choice>
575
- <attribute>
576
- <anyName/>
577
- </attribute>
578
- <text/>
579
- <ref name="anyXHTML"/>
580
- </choice>
581
- </zeroOrMore>
582
- </element>
583
- </define>
584
- <define name="xhtmlDiv">
585
- <element name="xhtml:div">
586
- <zeroOrMore>
587
- <choice>
588
- <attribute>
589
- <anyName/>
590
- </attribute>
591
- <text/>
592
- <ref name="anyXHTML"/>
593
- </choice>
594
- </zeroOrMore>
595
- </element>
596
- </define>
597
- </grammar>