Skip to content

Instantly share code, notes, and snippets.

@takahashim
Created March 31, 2012 04:45
Show Gist options
  • Save takahashim/2259389 to your computer and use it in GitHub Desktop.
Save takahashim/2259389 to your computer and use it in GitHub Desktop.
電子書籍交換フォーマットV1.1仕様書をエスパーして、そのスキーマ(推測)をRELAX NG Compact Syntaxで記述してみました。
# Schema for Global setting in E-book Interchange Format V1.1
#
# by Masayoshi Takahashi (@takahashim)
default namespace = "http://ebformat.jp"
datatype.integer = xsd:integer
datatype.vendor_name = text
datatype.charsets = text
datatype.page_direction = ('rl'|'rtl'|'lr'|'ltr')
start = eif_g.global_setting
eif_g.global_setting = element global_setting { eif_g.global_setting.content }
eif_g.global_setting.content = eif_g.default_ccs & eif_g.page_progression_direction & eif_g.window & eif_g.proprietary
eif_g.default_ccs = element default_ccs { datatype.charsets }
eif_g.page_progression_direction = element page_progression_direction { datatype.page_direction }
eif_g.window = element window { eif_g.window.attrlist }
eif_g.window.attrlist = eif_g.window.width? & eif_g.window.height?
eif_g.window.width = attribute width { datatype.integer }
eif_g.window.height = attribute height { datatype.integer }
eif_g.proprietary = element proprietary { eif_g.proprietary.vendor & eif_g.proprietary.content }
eif_g.proprietary.vendor = attribute vendor { datatype.vendor_name }
eif_g.proprietary.content = text
# Schema for package file in E-book Interchange Format V1.1
#
# by Masayoshi Takahashi (@takahashim)
default namespace = "http://ebformat.jp"
datatype.integer = xsd:integer
datatype.version = text
datatype.mimetype = xsd:string { pattern='[a-zA-Z0-9!#$&+\-\^_]+/[a-zA-Z0-9!#$&+\-\^_]+.*' }
datatype.URI = xsd:anyURI
datatype.ID = xsd:NCName
datatype.permission_type = ('print'|'copy'|'reading'|'export'|'download'|'irda'|'reading_on_ppc'|'conv_to_palm')
datatype.permission_value = ('authorized'|'in_device_only'|'no')
datatype.page_type = ('cover'|'title_page'|'preface'|'contents'|'body'|'column'|'note'|'figure'|'ad'|'afterword'|'appendix'|'answer'|'glossary'|'bibliography'|'commentary'|'index'|'imprint'|'author_info'|'other'|'flow_title')
start = eif_p.package
eif_p.package = element package { eif_p.package.attrlist & eif_p.package.content }
eif_p.package.attrlist = eif_p.package.version?
eif_p.package.version = attribute version { datatype.version }
eif_p.package.content = eif_p.manifest, eif_p.spine, eif_p.special_page_link?
eif_p.manifest = element manifest { eif_p.manifest.attrlist & eif_p.manifest.content }
eif_p.manifest.attrlist = eif_p.manifest.version?
eif_p.manifest.version = attribute version { datatype.version }
eif_p.manifest.content = eif_p.item+
eif_p.item = element item { eif_p.item.attrlist & eif_p.item.content }
eif_p.item.attrlist = eif_p.item.id & eif_p.item.href & eif_p.item.media-type
eif_p.item.id = attribute id { datatype.ID }
eif_p.item.href = attribute href { datatype.URI }
eif_p.item.media-type = attribute media-type { datatype.mimetype }
eif_p.item.content = eif_p.permission*
eif_p.permission = element permission { eif_p.permission.attrlist & eif_p.permission.content }
eif_p.permission.attrlist = eif_p.permission.type & eif_p.permission.value?
eif_p.permission.type = attribute type { datatype.permission_type }
eif_p.permission.value = attribute value { datatype.permission_value }
eif_p.permission.content = empty
eif_p.spine = element spine { eif_p.spine.attrlist & eif_p.spine.content }
eif_p.spine.attrlist = eif_p.spine.toc? & eif_p.spine.global_setting? & eif_p.spine.search_table? & eif_p.spine.bibliography?
eif_p.spine.toc = attribute toc { datatype.ID }
eif_p.spine.global_setting = attribute global_setting { datatype.ID }
eif_p.spine.search_table = attribute search_table { datatype.ID }
eif_p.spine.bibliography = attribute bibliography { datatype.ID }
eif_p.spine.content = eif_p.itemref+
eif_p.itemref = element itemref { eif_p.itemref.attrlist & eif_p.itemref.content }
eif_p.itemref.attrlist = eif_p.itemref.idref
eif_p.itemref.idref = attribute idref { datatype.ID }
eif_p.itemref.content = empty
eif_p.special_page_link = element special_page_link { eif_p.special_page* }
eif_p.special_page = element special_page { eif_p.special_page.attrlist & eif_p.special_page.content }
eif_p.special_page.attrlist = eif_p.special_page.type? & eif_p.special_page.title
eif_p.special_page.type = attribute type { datatype.page_type }
eif_p.special_page.title = attribute title { text }
eif_p.special_page.content = datatype.ID
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment