changed nano size XML implementation

and implemented clean XML versioning for new features
This commit is contained in:
following
2013-02-07 19:56:39 +01:00
parent b75afd18e2
commit 17e56684e3
5 changed files with 188 additions and 38 deletions

View File

@ -1,10 +1,10 @@
<html>
<head>
<title>Dokumentation Opencaching XML-Interface Version 1.1</title>
<title>Dokumentation Opencaching XML-Interface Version 1.2</title>
<meta name="vs_showGrid" content="True">
</head>
<body>
<h1>Dokumentation Opencaching XML-Interface Version 1.1</h1>
<h1>Dokumentation Opencaching XML-Interface Version 1.2</h1>
<p>
Das XML-Interface dient zum automatisierten abfragen aller Caches, Logeinträge,
Benutzer und/oder Bilder. Dieses Interface ist nicht für Endbenutzer gedacht,
@ -17,6 +17,12 @@
please contact us at <a href="mailto:contact@opencaching.de">contact@opencaching.de</a>
and tell us about the application you are going to develop; then we may translate it.</em>
</p>
<h2>Änderungen in Version 1.2</h2>
<ul>
<li>neues Attribut <em>ispublishdate</em> bei cache.datecreated</li>
<li>Ausgabe von Nano-Cachgrößen</li>
</ul>
<p>Der XML-Doctype lautet in allen Versionen "oc11xml".</p>
<h2>Ausgabeformat</h2>
<p>
Die Ausgabe ist eine oder mehrere xml,zip,gz&nbsp;oder bz2-Dateien. Es stehen 2
@ -106,7 +112,6 @@
verfügbar]]&gt;&lt;/status&gt;<br>
&nbsp; &lt;country id="DE"&gt;&lt;![CDATA[Deutschland]]&gt;&lt;/country&gt;<br>
&nbsp; &lt;size id="2"&gt;&lt;![CDATA[mikro]]&gt;&lt;/size&gt;<br>
&nbsp; &lt;size2 id="2"&gt;&lt;![CDATA[mikro]]&gt;&lt;/size&gt;<br>
&nbsp; &lt;desclanguages&gt;DE&lt;/desclanguages&gt;<br>
&nbsp; &lt;difficulty&gt;4&lt;/difficulty&gt;<br>
&nbsp; &lt;terrain&gt;2&lt;/terrain&gt;<BR>
@ -119,9 +124,8 @@
&nbsp;&nbsp;&nbsp;&nbsp;&lt;attribute id="6"&gt;&lt;![CDATA[ Nur bei Opencaching]]&gt;&lt;/attribute&gt;<br>
&nbsp; &lt;/attributes&gt;<br>
&lt;/cache&gt;</P>
<p><em>datecreated</em> will show date of listing creation for caches created with OC software versions 1 to 2
and date of publication &ndash; indicated by <em>ispublishdate="1"</em> &ndash; from OC version 3.</p>
<p><em>size</em> field will return nano cache size as 'other size', while <em>size2</em> supports the new 'nano' cache size.</p>
<p><em>datecreated</em> ist bei mit OC Version 1 und 2 angelegten Caches das Datum, an dem das Listing angelegt wurde, bei mit Version 3 angelegten Caches das Veröffentlichungsdatum. Ab Interface Version 1.2 zeigt das Attribut <em>ispublishdate="1"</em> an, dass es sich um das Veröffentlichungsdatum handelt.</p>
<p>Ab XML-Version 1.2 werden im <em>size</em>-Feld auch Nano-Größen zurückgeliefert. In älteren Interface-Versionen wird stattdessen "micro" ausgegeben.</p>
<h3>cachedesc (Cachebeschreibungen)</h3>
<p>
&lt;cachedesc&gt;<br>
@ -237,20 +241,21 @@
<p>Paramter uuid ... wie cacheid, ausser dass statt der cacheid die UUID des Caches verwendet wird.</p>
<h3>Beispiele</h3>
<p>1. Alle Daten inkrementell abrufen<br/>
<a>http://www.opencaching.de/xml/ocxml11.php?modifiedsince=&lt;date&gt;&amp;user=1&amp;cache=1&amp;cachedesc=1&amp;cachelog=1&amp;picture=1&amp;removedobject=1</a></p>
<a>http://www.opencaching.de/xml/ocxml12.php?modifiedsince=&lt;date&gt;&amp;user=1&amp;cache=1&amp;cachedesc=1&amp;cachelog=1&amp;picture=1&amp;removedobject=1</a></p>
<p>2. Alle Daten von Deutschland inkrementell abrufen<br/>
<A>http://www.opencaching.de/xml/ocxml11.php?modifiedsince=&lt;date&gt;&amp;cache=1&amp;cachedesc=1&amp;cachelog=1&amp;picture=1&amp;removedobject=1&amp;country=DE&amp;picturefromcachelog=1</a></p>
<A>http://www.opencaching.de/xml/ocxml12.php?modifiedsince=&lt;date&gt;&amp;cache=1&amp;cachedesc=1&amp;cachelog=1&amp;picture=1&amp;removedobject=1&amp;country=DE&amp;picturefromcachelog=1</a></p>
<p>3. Alle Caches ohne Logs von Deutschland inkrementell abrufen<br/>
<a>http://www.opencaching.de/xml/ocxml11.php?modifiedsince=&lt;date&gt;&amp;cache=1&amp;cachedesc=1&amp;picture=1&amp;removedobject=1&amp;country=DE</a></p>
<a>http://www.opencaching.de/xml/ocxml12.php?modifiedsince=&lt;date&gt;&amp;cache=1&amp;cachedesc=1&amp;picture=1&amp;removedobject=1&amp;country=DE</a></p>
<p>4. Alle Daten im Umkreis von 100 km abrufen<br/>
<a>http://www.opencaching.de/xml/ocxml11.php?modifiedsince=&lt;date&gt;&amp;cache=1&amp;cachedesc=1&amp;cachelog=1&amp;picture=1&amp;removedobject=1&amp;lat=48&amp;lon=9&amp;distance=100&amp;picturefromcachelog=1</a></p>
<a>http://www.opencaching.de/xml/ocxml12.php?modifiedsince=&lt;date&gt;&amp;cache=1&amp;cachedesc=1&amp;cachelog=1&amp;picture=1&amp;removedobject=1&amp;lat=48&amp;lon=9&amp;distance=100&amp;picturefromcachelog=1</a></p>
<p>5. Alle Bilder abrufen<br/>
<a>http://www.opencaching.de/xml/ocxml11.php?modifiedsince=&lt;date&gt;&amp;picture=1</a></p>
<a>http://www.opencaching.de/xml/ocxml12.php?modifiedsince=&lt;date&gt;&amp;picture=1</a></p>
<p>6. Alle Bilder von Caches abrufen die in Deutschland versteckt sind<br/>
<a>http://www.opencaching.de/xml/ocxml11.php?modifiedsince=&lt;date&gt;&amp;picture=1&amp;country=DE</a></p>
<a>http://www.opencaching.de/xml/ocxml2.php?modifiedsince=&lt;date&gt;&amp;picture=1&amp;country=DE</a></p>
<p>7. Alle Bilder von Caches und deren Logs abrufen die in Deutschland versteckt
sind<br/>
<a>http://www.opencaching.de/xml/ocxml11.php?modifiedsince=&lt;date&gt;&amp;picture=1&amp;country=DE</a>&amp;picturefromcachelog=1</p>
<a>http://www.opencaching.de/xml/ocxml12.php?modifiedsince=&lt;date&gt;&amp;picture=1&amp;country=DE</a>&amp;picturefromcachelog=1</p>
<p>Mit ocxml11.php kann stattdessen die Interface-Version 1.1 verwendet werden.</p>
<p>Diese Anfragen werden mit einem kurzen XML-Stream beantwortet, der die
XML-Session-Id zurückgibt. Mit dieser Id können dann die Daten abgerufen
werden.</p>
@ -266,21 +271,21 @@
Summe der Datensätze ist in diesem Beispiel 1205 - es werden also 3 Aufrufe
benötigt (500, 500, 205 Datensätze).</p>
<p>Die Daten können dann mit folgender Anfrage abgerufen werden:<br/>
<a>http://www.opencaching.de/xml/ocxml11.php?sessionid=12345&amp;file=1</a><br/>
<a>http://www.opencaching.de/xml/ocxml11.php?sessionid=12345&amp;file=2</a><br/>
<a>http://www.opencaching.de/xml/ocxml11.php?sessionid=12345&amp;file=3</a></p>
<a>http://www.opencaching.de/xml/ocxml12.php?sessionid=12345&amp;file=1</a><br/>
<a>http://www.opencaching.de/xml/ocxml12.php?sessionid=12345&amp;file=2</a><br/>
<a>http://www.opencaching.de/xml/ocxml12.php?sessionid=12345&amp;file=3</a></p>
<h3>Alle Ergebnisse mit einem Aufruf abfragen</h3>
<p>Um alle Ergebnisse in einer Datei abzurufen muss bei dem Aufruf der Paramter
session auf 0 gesetzt werden.</p>
<p>Beispeil:<br/>
<a>http://www.opencaching.de/xml/ocxml11.php?modifiedsince=&lt;date&gt;&amp;user=1&amp;cache=1&amp;cachedesc=1&amp;cachelog=1&amp;picture=1&amp;removedobject=1&amp;session=0</a></p>
<a>http://www.opencaching.de/xml/ocxml12.php?modifiedsince=&lt;date&gt;&amp;user=1&amp;cache=1&amp;cachedesc=1&amp;cachelog=1&amp;picture=1&amp;removedobject=1&amp;session=0</a></p>
<h3>Dateikomprimierung einstellen</h3>
<p>Dei Dateikomprimierung kann mit dem Paramter zip eingestellt weren. Mögliche
Werte sind 0, zip, bzip2, gzip. Null bedeutet hier keine Kompression. Wird
keine Kompression angegeben, wird zip verwendet.</p>
<p>Beispeil:<br/>
<a>http://www.opencaching.de/xml/ocxml11.php?modifiedsince=&lt;date&gt;&amp;user=1&amp;cache=1&amp;cachedesc=1&amp;cachelog=1&amp;picture=1&amp;removedobject=1&amp;session=0&amp;zip=bzip2</a><br/>
<a>http://www.opencaching.de/xml/ocxml11.php?sessionid=12345&amp;file=1&amp;zip=gzip</a></p>
<a>http://www.opencaching.de/xml/ocxml12.php?modifiedsince=&lt;date&gt;&amp;user=1&amp;cache=1&amp;cachedesc=1&amp;cachelog=1&amp;picture=1&amp;removedobject=1&amp;session=0&amp;zip=bzip2</a><br/>
<a>http://www.opencaching.de/xml/ocxml12.php?sessionid=12345&amp;file=1&amp;zip=gzip</a></p>
<h3>XML-Optionen</h3>
<p>Die folgenden XML-Optionen müssen bei jedem Aufruf übergeben
werden.</p>
@ -294,8 +299,8 @@
charset ... (Default) iso-8859-1 / utf-8<br />
attrlist ... (Default) 0 = keine Attributliste &uuml;bertragen / 1 = Attributliste &uuml;bertragen</p>
<h4><a>Beispiele</a></h4>
<p>http://www.opencaching.de/xml/ocxml11.php?modifiedsince=20060320000000&amp;user=1&amp;cache=1&amp;cachelog=1&amp;cachedesc=1&amp;picture=1&amp;removedobject=1&amp;session=1&amp;charset=utf-8&amp;cdata=1&amp;xmldecl=0&amp;ocxmltag=0&amp;doctype=0<br/>
http://www.opencaching.de/xml/ocxml11.php?sessionid=4711&amp;file=1&amp;charset=utf-8&amp;cdata=1&amp;xmldecl=0&amp;ocxmltag=0&amp;doctype=0</p>
<p>http://www.opencaching.de/xml/ocxml12.php?modifiedsince=20060320000000&amp;user=1&amp;cache=1&amp;cachelog=1&amp;cachedesc=1&amp;picture=1&amp;removedobject=1&amp;session=1&amp;charset=utf-8&amp;cdata=1&amp;xmldecl=0&amp;ocxmltag=0&amp;doctype=0<br/>
http://www.opencaching.de/xml/ocxml12.php?sessionid=4711&amp;file=1&amp;charset=utf-8&amp;cdata=1&amp;xmldecl=0&amp;ocxmltag=0&amp;doctype=0</p>
<h3>Sonstige Anmerkungen</h3>
<ul>
<li>
@ -311,7 +316,7 @@
<br/>
<span><span class="d">&lt;!DOCTYPE oc11xml<I>...</I>&gt;</span>&nbsp;<br/></span>&nbsp;
<span class="m">&lt;</span><span class="t">oc11xml</span><span class="t">
version</span><span class="m">="</span>1.1<span class="m">"</span><span class="t">
version</span><span class="m">="</span>1.2<span class="m">"</span><span class="t">
date</span><span class="m">="</span><strong>2006-03-10 18:37:34</strong><span class="m">"</span><span class="t"> since</span><span class="m">="</span>2006-03-08
22:02:42<span class="m">"</span><span class="m">&gt;</span><br /><br />
</li>
@ -321,7 +326,7 @@
<h3>Ressourcen</h3>
<ul>
<li>Das XML-Dokument enthält folgende DTD (Document Type Definition):
http://www.opencaching.de/xml/ocxml11.dtd</li>
http://www.opencaching.de/xml/ocxml11.dtd (Version 1.1) bzw. http://www.opencaching.de/xml/ocxml12.dtd (Version 1.2)</li>
<li>Der Quellcode ist hier erhältlich: <a href="https://github.com/OpencachingDeutschland/oc-server3/tree/stable/htdocs/xml">
https://github.com/OpencachingDeutschland/oc-server3/tree/stable/htdocs/xml</a></li>
<li>Eine Referenzimplementierung kann hier heruntergeladen werden:

View File

@ -7,7 +7,7 @@
<!ELEMENT attrlist (attr*)>
<!ELEMENT user (id, username, pmr, datecreated, lastmodified)>
<!ELEMENT cache (id, userid, name, longitude, latitude, type, status, country, size, size2, desclanguages, difficulty, terrain, rating, waypoints, datehidden, datecreated, lastmodified)>
<!ELEMENT cache (id, userid, name, longitude, latitude, type, status, country, size, desclanguages, difficulty, terrain, rating, waypoints, datehidden, datecreated, lastmodified)>
<!ELEMENT cachedesc (id, cacheid, language, shortdesc, desc, hint, lastmodified)>
<!ELEMENT cachelog (id, cacheid, userid, logtype, date, text, datecreated, lastmodified)>
<!ELEMENT picture (id, url, title, object, attributes, datecreated, lastmodified)>
@ -20,9 +20,6 @@
node CDATA #IMPLIED
>
<!ELEMENT datecreated (#PCDATA)>
<!ATTLIST datecreated
ispublishdate CDATA #IMPLIED
>
<!ELEMENT lastmodified (#PCDATA)>
<!-- attrlist -->

View File

@ -11,6 +11,12 @@
***************************************************************************/
/* begin configuration */
if (!isset($ocxmlversion))
{
$ocxmlversion = 11;
$doctype = "oc11xml";
}
$opt['rootpath'] = '../';
require($opt['rootpath'] . 'lib/common.inc.php');
@ -295,6 +301,7 @@
function outputXmlFile($sessionid, $filenr, $bXmlDecl, $bOcXmlTag, $bDocType, $ziptype)
{
global $zip_basedir, $zip_wwwdir, $sDateformat, $sDateshort, $t1, $t2, $t3, $safemode_zip, $safemode_zip, $sCharset, $bAttrlist, $absolute_server_URI;
global $ocxmlversion;
// alle records aus tmpxml_* übertragen
if (!mb_ereg_match('^[0-9]{1,11}', $sessionid))
@ -387,12 +394,13 @@ function outputXmlFile($sessionid, $filenr, $bXmlDecl, $bOcXmlTag, $bDocType, $z
else if ($sCharset == 'utf-8')
fwrite($f, '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>' . "\n");
}
if ($bDocType == '1') fwrite($f, '<!DOCTYPE oc11xml PUBLIC "-//Opencaching Network//DTD OCXml V 1.1//EN" "http://www.opencaching.de/xml/ocxml11.dtd">' . "\n");
if ($bDocType == '1') fwrite($f, '<!DOCTYPE oc11xml PUBLIC "-//Opencaching Network//DTD OCXml V 1.' . ($ocxmlversion % 10) . '//EN" "http://www.opencaching.de/xml/ocxml' . $ocxmlversion . '.dtd">' . "\n");
if ($bOcXmlTag == '1')
{
$rs = sql('SELECT `date_created`, `modified_since` FROM `xmlsession` WHERE `id`=&1', $sessionid);
$r = sql_fetch_array($rs);
fwrite($f, '<oc11xml version="1.1" date="' . date($sDateformat, strtotime($r['date_created'])) . '" since="' . date($sDateformat, strtotime($r['modified_since'])) . '">' . "\n");
fwrite($f, '<oc11xml version="1.' . ($ocxmlversion % 10) . '" date="' . date($sDateformat, strtotime($r['date_created'])) . '" since="' . date($sDateformat, strtotime($r['modified_since'])) . '">' . "\n");
mysql_free_result($rs);
}
@ -440,12 +448,8 @@ function outputXmlFile($sessionid, $filenr, $bXmlDecl, $bOcXmlTag, $bDocType, $z
{
$bAllowView = ($r['allow_user_view'] == 1);
// To avoid breaking existing XML clients, the new nano size is returned as other in "size" field
// and as nano in new "size2" field.
if ($r['size'] > 7)
$size1_id = 1;
else
$size1_id = $r['size'];
if ($r['size'] == 8 && $ocxmlversion < 12)
$r['size'] = 2; // return as micro in old interface version
fwrite($f, $t1 . '<cache>' . "\n");
@ -457,15 +461,16 @@ function outputXmlFile($sessionid, $filenr, $bXmlDecl, $bOcXmlTag, $bDocType, $z
fwrite($f, $t2 . '<type id="' . $r['type'] . '" short="' . xmlentities($cachetypes[$r['type']]['short']) . '">' . xmlcdata($cachetypes[$r['type']]['de']) . '</type>' . "\n");
fwrite($f, $t2 . '<status id="' . $r['status'] . '">' . xmlcdata($cachestatus[$r['status']]['de']) . '</status>' . "\n");
fwrite($f, $t2 . '<country id="' . $r['country'] . '">' . xmlcdata($counties[$r['country']]['de']) . '</country>' . "\n");
fwrite($f, $t2 . '<size id="' . $size1_id . '">' . xmlcdata($cachesizes[$size1_id]['de']) . '</size>' . "\n");
fwrite($f, $t2 . '<size2 id="' . $r['size'] . '">' . xmlcdata($cachesizes[$r['size']]['de']) . '</size2>' . "\n");
fwrite($f, $t2 . '<size id="' . $r['size'] . '">' . xmlcdata($cachesizes[$r['size']]['de']) . '</size>' . "\n");
fwrite($f, $t2 . '<desclanguages>' . $r['desclanguages'] . '</desclanguages>' . "\n");
fwrite($f, $t2 . '<difficulty>' . sprintf('%01.1f', $r['difficulty'] / 2) . '</difficulty>' . "\n");
fwrite($f, $t2 . '<terrain>' . sprintf('%01.1f', $r['terrain'] / 2) . '</terrain>' . "\n");
fwrite($f, $t2 . '<rating waylength="' . $r['way_length'] . '" needtime="' . $r['search_time'] . '" />' . "\n");
fwrite($f, $t2 . '<waypoints gccom="' . xmlentities($r['wp_gc']) . '" nccom="' . xmlentities($r['wp_nc']) . '" oc="' . xmlentities($r['wp_oc']) . '" />' . "\n");
fwrite($f, $t2 . '<datehidden>' . date($sDateformat, strtotime($r['date_hidden'])) . '</datehidden>' . "\n");
fwrite($f, $t2 . '<datecreated ispublishdate="' . $r['is_publishdate'] . '">' . date($sDateformat, strtotime($r['date_created'])) . '</datecreated>' . "\n");
if ($ocxmlversion >= 12) $pd = ' ispublishdate="' . $r['is_publishdate'] . '"';
else $pd = "";
fwrite($f, $t2 . '<datecreated' . $pd . '>' . date($sDateformat, strtotime($r['date_created'])) . '</datecreated>' . "\n");
fwrite($f, $t2 . '<lastmodified>' . date($sDateformat, strtotime($r['last_modified'])) . '</lastmodified>' . "\n");
$rsAttributes = sql("SELECT `cache_attrib`.`id`, `cache_attrib`.`name` FROM `caches_attributes` INNER JOIN `cache_attrib` ON `caches_attributes`.`attrib_id`=`cache_attrib`.`id` WHERE `caches_attributes`.`cache_id`='&1'", $r['id']);

129
htdocs/xml/ocxml12.dtd Normal file
View File

@ -0,0 +1,129 @@
<!ELEMENT oc11xml (attrlist*, user*, cache*, cachedesc*, cachelog*, picture*, removedobject*)>
<!ATTLIST oc11xml
version CDATA #REQUIRED
date CDATA #REQUIRED
since CDATA #REQUIRED
>
<!ELEMENT attrlist (attr*)>
<!ELEMENT user (id, username, pmr, datecreated, lastmodified)>
<!ELEMENT cache (id, userid, name, longitude, latitude, type, status, country, size, desclanguages, difficulty, terrain, rating, waypoints, datehidden, datecreated, lastmodified)>
<!ELEMENT cachedesc (id, cacheid, language, shortdesc, desc, hint, lastmodified)>
<!ELEMENT cachelog (id, cacheid, userid, logtype, date, text, datecreated, lastmodified)>
<!ELEMENT picture (id, url, title, object, attributes, datecreated, lastmodified)>
<!ELEMENT removedobject (id, object, removeddate)>
<!-- common elements -->
<!ELEMENT id (#PCDATA)>
<!ATTLIST id
id CDATA #IMPLIED
node CDATA #IMPLIED
>
<!ELEMENT datecreated (#PCDATA)>
<!ATTLIST datecreated
ispublishdate CDATA #IMPLIED
>
<!ELEMENT lastmodified (#PCDATA)>
<!-- attrlist -->
<!ELEMENT attr (#PCDATA)>
<!ATTLIST attr
id CDATA #REQUIRED
icon_large CDATA #REQUIRED
icon_no CDATA #REQUIRED
icon_undef CDATA #REQUIRED
>
<!-- user -->
<!ELEMENT username (#PCDATA)>
<!ELEMENT pmr (#PCDATA)>
<!-- cache -->
<!ELEMENT userid (#PCDATA)>
<!ATTLIST userid
id CDATA #IMPLIED
uuid CDATA #REQUIRED
>
<!ELEMENT name (#PCDATA)>
<!ELEMENT latitude (#PCDATA)>
<!ELEMENT longitude (#PCDATA)>
<!ELEMENT type (#PCDATA)>
<!ATTLIST type
id CDATA #REQUIRED
short CDATA #IMPLIED
>
<!ELEMENT status (#PCDATA)>
<!ATTLIST status
id CDATA #REQUIRED
>
<!ELEMENT country (#PCDATA)>
<!ATTLIST country
id CDATA #REQUIRED
>
<!ELEMENT size (#PCDATA)>
<!ATTLIST size
id CDATA #REQUIRED
>
<!ELEMENT desclanguages (#PCDATA)>
<!ELEMENT difficulty (#PCDATA)>
<!ELEMENT terrain (#PCDATA)>
<!ELEMENT rating (#PCDATA)>
<!ATTLIST rating
waylength CDATA #REQUIRED
needtime CDATA #REQUIRED
>
<!ELEMENT waypoints (#PCDATA)>
<!ATTLIST waypoints
gccom CDATA #IMPLIED
nccom CDATA #IMPLIED
oc CDATA #REQUIRED
>
<!ELEMENT datehidden (#PCDATA)>
<!-- cachedesc -->
<!ELEMENT cacheid (#PCDATA)>
<!ATTLIST cacheid
id CDATA #IMPLIED
>
<!ELEMENT language (#PCDATA)>
<!ATTLIST language
id CDATA #REQUIRED
>
<!ELEMENT shortdesc (#PCDATA)>
<!ELEMENT desc (#PCDATA)>
<!ATTLIST desc
html CDATA #REQUIRED
>
<!ELEMENT hint (#PCDATA)>
<!-- cachelog -->
<!-- cacheid see cachedesc -->
<!-- userid see cache -->
<!ELEMENT logtype (#PCDATA)>
<!ATTLIST logtype
id CDATA #REQUIRED
recommended CDATA #IMPLIED
>
<!ELEMENT date (#PCDATA)>
<!ELEMENT text (#PCDATA)>
<!-- picture -->
<!ELEMENT url (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT object (#PCDATA)>
<!ATTLIST object
id CDATA #IMPLIED
type CDATA #REQUIRED
typename CDATA #IMPLIED
>
<!ELEMENT attributes (#PCDATA)>
<!ATTLIST attributes
spoiler CDATA #IMPLIED
display CDATA #REQUIRED
>
<!-- removedobject -->
<!-- object see picture -->
<!ELEMENT removeddate (#PCDATA)>

14
htdocs/xml/ocxml12.php Normal file
View File

@ -0,0 +1,14 @@
<?php
/***************************************************************************
./xml/ocxml12.php
For license information see doc/license.txt
Unicode Reminder メモ
***************************************************************************/
$ocxmlversion = 12;
include("ocxml11.php");
?>