モデルインターフェース定義の構文
モデルインターフェースはXMLテキストによって定義されます。 そのXMLの構文の定義を以下に示します。
XML 構文定義
ABNF による XML の構文定義は下記の通りです:
-
記法は IETF-RFC 5234 (https://datatracker.ietf.org/doc/html/rfc5234) に従う。
例えば DQUOTE は二重引用符、LWSP は改行を含む空白文字列を表す。
-
以下で未定義の規則 http-uri および https-uri は IETF-RFC 3986 に従う、HTTP および HTTPS の URL 文字列を表す。
-
以下で未定義の規則 javascript-variable-name および javascript-property-name はそれぞれ、JavaScript で使用可能な、変数名およびプロパティ名を表す文字列である。
変数名およびプロパティ名を表す識別子に関しては以下を参照: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers
-
以下で未定義の規則 javascript-property-type は、JavaScript のプロパティのデータ型を表す文字列である。
プリミティブ値のデータ型に関しては以下を参照: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Data_structures#primitive_values
-
以下で定義する規則は実際より厳格である
例えば XML として許容すべき空白の挿入や二重引用符の不在などを一部考慮していないし、通常複数あり得る属性の記述順序に関しても一つの順序だけを示しているに過ぎない。
; XML SPEC
interface-definition ::= model-tag
; TAG SPEC
model-tag ::= "<" "model" LWSP ">"
LWSP
*( import-tag / interface-tag )
LWSP
"</" "model" ">"
import-tag ::= "<" "import" LWSP
import-tag-attributes
LWSP "/>"
interface-tag ::= "<" "interface" LWSP interface-tag-attributes LWSP ">"
LWSP
*( unit-tag / model-property-tag )
LWSP
"</" "interface" ">"
model-property-tag ::= function-tag /
event-handler-tag /
observable-object-tag /
observable-array-tag /
restful-object-tag
unit-tag ::= "<" "unit" LWSP unit-tag-attributes LWSP ">"
LWSP
*( unit-tag / model-property-tag )
LWSP
"</" "unit" ">"
function-tag ::= "<" "function" LWSP function-tag-attributes LWSP ">"
LWSP
*( arg-tag )
LWSP
"</" "function" ">"
arg-tag ::= "<" "arg" LWSP
arg-tag-attributes
LWSP "/>"
event-handler-tag ::= "<" "event-handler" LWSP
event-handler-tag-attributes
LWSP "/>"
observable-object-tag ::= "<" "observable-object" LWSP
observable-object-tag-attributes
LWSP "/>"
observable-array-tag ::= "<" "observable-array" LWSP
observable-array-tag-attributes
LWSP "/>"
restful-object-tag ::= "<" "restful-object" LWSP restful-object-tag-attributes LWSP ">"
LWSP
*( method-tag )
LWSP
"</" "restful-object" ">"
method-tag ::= get-tag /
post-tag /
put-tag /
delete-tag
get-tag ::= "<" "get" LWSP
get-tag-attributes
LWSP "/>"
post-tag ::= "<" "post" LWSP
post-tag-attributes
LWSP "/>"
put-tag ::= "<" "put" LWSP
put-tag-attributes
LWSP "/>"
delete-tag ::= "<" "delete" LWSP
delete-tag-attributes
LWSP "/>"
; TAG ATTRIBUTES SPEC
import-tag-attributes ::= path-attribute
interface-tag-attributes
::= [ class-attribute ]
unit-tag-attributes ::= name-attribute [ LWSP class-attribute ]
function-tag-attributes
::= name-attribute LWSP
"locale" "=" DQUOTE ( "local" / "native" ) DQUOTE LWSP
path-attribute
[ LWSP class-attribute ]
; それぞれの属性は順不同
arg-tag-attributes ::= name-attribute LWSP type-attribute
event-handler-tag-attributes
::= name-attribute LWSP
"locale" "=" DQUOTE ( "local" / "native" ) DQUOTE LWSP
path-attribute
[ LWSP class-attribute ]
; それぞれの属性は順不同
observable-object-tag-attributes
::= name-attribute LWSP
"locale" "=" DQUOTE "local" DQUOTE LWSP
path-attribute
[ LWSP class-attribute ]
; それぞれの属性は順不同
observable-array-tag-attributes
::= name-attribute LWSP
"locale" "=" DQUOTE "local" DQUOTE LWSP
path-attribute
[ LWSP class-attribute ]
; それぞれの属性は順不同
restful-object-tag-attributes
::= local-restful-object-tag-attributes /
native-restful-object-tag-attributes /
remote-restful-object-tag-attributes
local-restful-object-tag-attributes
::= name-attribute LWSP
"locale" "=" DQUOTE "local" DQUOTE LWSP
path-attribute
[ LWSP class-attribute ]
; それぞれの属性は順不同
native-restful-object-tag-attributes
::= name-attribute LWSP
"locale" "=" DQUOTE "native" DQUOTE LWSP
path-attribute
[ LWSP class-attribute ]
; それぞれの属性は順不同
remote-restful-object-tag-attributes
::= name-attribute LWSP
"locale" "=" DQUOTE "remote" DQUOTE LWSP
uri-attribute
[ LWSP auth-attribute ]
; それぞれの属性は順不同
get-tag-attributes ::= name-attribute LWSP type-attribute
post-tag-attributes ::= name-attribute LWSP type-attribute
put-tag-attributes ::= name-attribute LWSP type-attribute
delete-tag-attributes ::= name-attribute LWSP type-attribute
; ATTRIBUTE SPEC
class-attribute ::= "class" "=" DQUOTE class-value DQUOTE
class-value ::= javascript-variable-name
name-attribute ::= "name" "=" DQUOTE name-value DQUOTE
name-value ::= javascript-property-name
type-attribute ::= "type" "=" DQUOTE type-value DQUOTE
type-value ::= javascript-property-type
locale-attribute ::= "locale" "=" DQUOTE locale-value DQUOTE
locale-value ::= "local" /
"native" /
"remote"
path-attribute ::= "path" "=" DQUOTE path-value DQUOTE
path-value ::= javascript-property-name / file-path
uri-attribute ::= "uri" "=" DQUOTE uri-value DQUOTE
uri-value ::= http-uri / https-uri
auth-attribute ::= "auth" "=" DQUOTE auth-value DQUOTE
auth-value ::= auth-id