restfulie 0.1.0.beta1 → 0.1

Sign up to get free protection for your applications and to get access to all the features.
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>