]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - schemas/rakka-page-1.0.rng
page XML should be able to contain attachments
[Rakka.git] / schemas / rakka-page-1.0.rng
index ecd61b78d4f84bf033601f324082083609279190..812e1e16700cccbf520e22b3ae0dd19c4a039707 100644 (file)
@@ -1,17 +1,62 @@
 <?xml version="1.0" encoding="utf-8"?>
-<element name="page"
-         ns="http://cielonegro.org/schema/Rakka/Page/1.0"
+<grammar ns="http://cielonegro.org/schema/Rakka/Page/1.0"
          datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
          xmlns="http://relaxng.org/ns/structure/1.0">
 
-  <choice>
-    <!-- リダイレクトの場合 -->
+  <start>
+    <element name="page">
+      <optional>
+        <element name="updateInfo">
+          <!-- 旧リビジョン -->
+          <attribute name="oldRevision">
+            <!-- HXT が對應してゐない。
+                 <data type="nonNegativeInteger" />
+            -->
+            <text />
+          </attribute>
+
+          <!-- ページ移動 -->
+          <optional>
+            <element name="move">
+              <attribute name="from">
+                <text />
+              </attribute>
+            </element>
+          </optional>
+        </element>
+
+        <!-- 猶、更新時に type 屬性を空欄にすると自動判別される。但し
+             binaryData の場合のみ許される。 -->
+      </optional>
+
+      <optional>
+        <!-- ログインしてゐないユーザーの編集を禁止するフラグ -->
+        <attribute name="isLocked">
+          <choice>
+            <value>yes</value>
+            <value>no</value>
+          </choice>
+        </attribute>
+      </optional>
+
+      <choice>
+        <!-- リダイレクトの場合 -->
+        <ref name="redirection" />
+    
+        <!-- リダイレクトでない場合 -->
+        <ref name="entity" />
+      </choice>
+    </element>
+  </start>
+
+  <define name="redirection">
     <attribute name="redirect">
       <!-- ページ名 -->
       <data type="anyURI" />
     </attribute>
-    
-    <!-- リダイレクトでない場合 -->
+  </define>
+
+  <define name="entity">
     <group>
       <attribute name="type">
         <!-- MIME Type -->
         </attribute>
       </optional>
 
-      <optional>
-        <attribute name="filename">
-          <text />
-        </attribute>
-      </optional>
-
       <optional>
         <!-- text/css でなければ無視される -->
         <attribute name="isTheme">
-          <!-- これは HXT が對應してゐない。
-               <data type="string">
-               <param name="pattern">yes|no</param>
-               </data>
-          -->
-          <text />
+          <choice>
+            <value>yes</value>
+            <value>no</value>
+          </choice>
         </attribute>
       </optional>
 
       <optional>
         <!-- text/x-rakka でなければ無視される -->
         <attribute name="isFeed">
-          <!-- yes/no -->
-          <text />
-        </attribute>
-      </optional>
-
-      <optional>
-        <!-- ログインしてゐないユーザーの編集を禁止するフラグ -->
-        <attribute name="isLocked">
-          <!-- yes/no -->
-          <text />
-        </attribute>
-      </optional>
-
-      <optional>
-        <!-- 更新履歴や RSS から削除されるフラグ -->
-        <attribute name="isBoring">
-          <!-- yes/no -->
-          <text />
+          <choice>
+            <value>yes</value>
+            <value>no</value>
+          </choice>
         </attribute>
       </optional>
 
           <text />
         </element>
       </choice>
+
+      <optional>
+        <element name="attachment">
+          <zeroOrMore>
+            <element name="entry">
+              <attribute name="name" />
+              <ref name="anyElement" />
+            </element>
+          </zeroOrMore>
+        </element>
+      </optional>
     </group>
-  </choice>
-</element>
+  </define>
+
+  <define name="anyElement">
+    <element>
+      <anyName />
+      <zeroOrMore>
+        <choice>
+          <attribute>
+            <anyName />
+          </attribute>
+          <text />
+          <ref name="anyElement" />
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+</grammar>