Dryverl - XML schema
Printer-friendly Version

Table of Contents

Schema Document Properties

Target Namespace http://objectweb.org/dryverl-0.1
Element and Attribute Namespaces
  • Global element and attribute declarations belong to this schema's target namespace.
  • By default, local element declarations belong to this schema's target namespace.
  • By default, local attribute declarations have no namespace.
Documentation Dryverl Erlang-to-C binding specification language schema Copyright 2006 Romain Lenglet All rights reserved. The contents of this file are subject to the Modified BSD License. See the file "COPYING" for licensing details.

Declared Namespaces

Prefix Namespace
xsd http://www.w3.org/2001/XMLSchema
dryverl http://objectweb.org/dryverl-0.1
Schema Component Representation
<xsd:schema targetNamespace="http://objectweb.org/dryverl-0.1" elementFormDefault="qualified">
...
</xsd:schema>

Global Declarations

Element: def-bindings

Name def-bindings
Type dryverl:DefBindings
Nillable no
Abstract no
Documentation Specifies a set of bindings between Erlang functions and C code.
XML Instance Representation
<dryverl:def-bindings>
<!--
Uniqueness Constraint - uniqueBindingNames
Selector - dryverl:def-erlang-to-c-binding
Field(s) - @name
-->
<!--
Key Constraint - keyValueMapNames
Selector - ./dryverl:def-value-map
Field(s) - @name
-->
<!--
Key Reference Constraint - keyrefValueMapNames
Selector - .//dryverl:value-map-lock|.//dryverl:value-map-unlock|.//dryverl:value-map-find-entry
Field(s) - @name
Refers to - dryverl:keyValueMapNames
-->

<dryverl:gen-driver> dryverl:GenDriver </dryverl:gen-driver> [0..1] ?
<dryverl:def-value-map> dryverl:DefValueMap </dryverl:def-value-map> [0..*] ?
<dryverl:def-erlang-to-c-binding> dryverl:DefErlangToCBinding
<!--
Key Constraint - keyCCallVariableNames
Selector - dryverl:def-c-call-variable
Field(s) - @name
-->
<!--
Key Reference Constraint - keyrefCCallVariableNames
Selector - .//dryverl:c-call-variable
Field(s) - @name
Refers to - dryverl:keyCCallVariableNames
-->
</dryverl:def-erlang-to-c-binding> [1..*] ?
</dryverl:def-bindings>
Schema Component Representation
<xsd:element name="def-bindings" type=" dryverl:DefBindings ">
<xsd:unique name="uniqueBindingNames">
<xsd:selector xpath="dryverl:def-erlang-to-c-binding"/>
<xsd:field xpath="@name"/>
</xsd:unique>
<-- Commented out, because count() is forbidden here by REC-xmlschema-1-20041028 <xsd:unique name="uniqueFunctionSignatures"> <xsd:selector xpath="dryverl:def-erlang-to-c-binding/dryverl:def-erlang-input"/> <xsd:field xpath="@function-name"/> <xsd:field xpath="count(dryverl:def-erlang-arg)"/> </xsd:unique> -->
<xsd:key name="keyValueMapNames">
<xsd:selector xpath="./dryverl:def-value-map"/>
<xsd:field xpath="@name"/>
</xsd:key>
<xsd:keyref name="keyrefValueMapNames" refer=" dryverl:keyValueMapNames ">
<xsd:selector xpath=".//dryverl:value-map-lock|.//dryverl:value-map-unlock|.//dryverl:value-map-find-entry"/>
<xsd:field xpath="@name"/>
</xsd:keyref>
</xsd:element>

Global Definitions

Complex Type: BodyCCode

Super-types: None
Sub-types: None
Name BodyCCode
Abstract no
Documentation An actual main C code block of a binding. Typically, this code calls a C function with C call variables as arguments, and assigns the returned values to C call variables.
XML Instance Representation
<...>
<!-- Mixed content -->
Start Choice [0..*]
Start Choice [1]
<dryverl:c-local-variable> dryverl:CVariableAccess </dryverl:c-local-variable> [1] ?
<dryverl:c-call-variable> dryverl:CVariableAccess </dryverl:c-call-variable> [1] ?
<dryverl:value-map-lock> dryverl:ValueMapLockUnlock </dryverl:value-map-lock> [1] ?
<dryverl:value-map-unlock> dryverl:ValueMapLockUnlock </dryverl:value-map-unlock> [1] ?
End Choice
<dryverl:value-map-find-entry
name=" dryverl:Identifier [1] ?"> [1] ?
Start Choice [1]
Start Choice [1]
<dryverl:value-map-find-entry-id/> [1] ?
<dryverl:value-map-remove-entry-id/> [1] ?
<dryverl:value-map-destroy-entry-id/> [1] ?
End Choice
<dryverl:value-map-entry-id-ref> dryverl:BodyCCode </dryverl:value-map-entry-id-ref> [1] ?
<dryverl:value-map-entry-value-ref> dryverl:BodyCCode </dryverl:value-map-entry-value-ref> [0..1] ?
Start Choice [1]
<dryverl:value-map-find-entry-value/> [1] ?
<dryverl:value-map-remove-entry-value/> [1] ?
<dryverl:value-map-destroy-entry-value/> [1] ?
<dryverl:value-map-find-or-add-entry-value/> [1] ?
End Choice
<dryverl:value-map-entry-id-ref> dryverl:BodyCCode </dryverl:value-map-entry-id-ref> [0..1] ?
<dryverl:value-map-entry-value-ref> dryverl:BodyCCode </dryverl:value-map-entry-value-ref> [1] ?
End Choice
<dryverl:value-map-if-entry-found> dryverl:BodyCCode </dryverl:value-map-if-entry-found> [0..1] ?
<dryverl:value-map-if-entry-not-found> dryverl:BodyCCode </dryverl:value-map-if-entry-not-found> [0..1] ?
</dryverl:value-map-find-entry>
<dryverl:failure-atom> dryverl:BodyCCode </dryverl:failure-atom> [1] ?
<dryverl:failure-posix> dryverl:BodyCCode </dryverl:failure-posix> [1] ?
<dryverl:failure> dryverl:BodyCCode </dryverl:failure> [1] ?
End Choice
</...>
Schema Component Representation
<xsd:complexType name="BodyCCode" mixed="true">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<-- Elements for manipulating value maps -->
<xsd:group ref=" dryverl:commonCCode "/>
<xsd:element name="value-map-find-entry">
<xsd:complexType>
<xsd:sequence>
<xsd:choice>
<xsd:sequence>
<xsd:choice>
<xsd:element name="value-map-find-entry-id">
<xsd:complexType/>
</xsd:element>
<xsd:element name="value-map-remove-entry-id">
<xsd:complexType/>
</xsd:element>
<xsd:element name="value-map-destroy-entry-id">
<xsd:complexType/>
</xsd:element>
</xsd:choice>
<xsd:element name="value-map-entry-id-ref" type=" dryverl:BodyCCode "/>
<xsd:element name="value-map-entry-value-ref" type=" dryverl:BodyCCode " minOccurs="0"/>
</xsd:sequence>
<xsd:sequence>
<xsd:choice>
<xsd:element name="value-map-find-entry-value">
<xsd:complexType/>
</xsd:element>
<xsd:element name="value-map-remove-entry-value">
<xsd:complexType/>
</xsd:element>
<xsd:element name="value-map-destroy-entry-value">
<xsd:complexType/>
</xsd:element>
<xsd:element name="value-map-find-or-add-entry-value">
<xsd:complexType/>
</xsd:element>
</xsd:choice>
<xsd:element name="value-map-entry-id-ref" type=" dryverl:BodyCCode " minOccurs="0"/>
<xsd:element name="value-map-entry-value-ref" type=" dryverl:BodyCCode "/>
</xsd:sequence>
</xsd:choice>
<xsd:element name="value-map-if-entry-found" type=" dryverl:BodyCCode " minOccurs="0"/>
<xsd:element name="value-map-if-entry-not-found" type=" dryverl:BodyCCode " minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" type=" dryverl:Identifier " use="required"/>
</xsd:complexType>
</xsd:element>
<-- Elements for notifying unrecoverable failures. -->
<xsd:element name="failure-atom" type=" dryverl:BodyCCode "/>
<xsd:element name="failure-posix" type=" dryverl:BodyCCode "/>
<xsd:element name="failure" type=" dryverl:BodyCCode "/>
</xsd:choice>
</xsd:complexType>

Complex Type: CVariableAccess

Super-types: None
Sub-types: None
Name CVariableAccess
Abstract no
Documentation The equivalent to a C expression that is evaluated as the value of the call variable or local variable with the given name.
XML Instance Representation
<...
name=" dryverl:Identifier [1] ?"/>
Schema Component Representation
<xsd:complexType name="CVariableAccess">
<xsd:attribute name="name" type=" dryverl:Identifier " use="required"/>
</xsd:complexType>

Complex Type: DecodeInput

Super-types: None
Sub-types: None
Name DecodeInput
Abstract no
Documentation C code that decodes the optional Erlang term passed by copy, analyzes the optional list of Erlang binary terms passed by reference, and assigns values to C call variables.
XML Instance Representation
<...>
<dryverl:def-c-local-variable> dryverl:DefCVariable </dryverl:def-c-local-variable> [0..*] ?
<dryverl:assign-c-call-variables> dryverl:DecodeInputCCode </dryverl:assign-c-call-variables> [1] ?
</...>
Schema Component Representation
<xsd:complexType name="DecodeInput">
<xsd:sequence>
<xsd:group ref=" dryverl:defCLocalVariables "/>
<xsd:element name="assign-c-call-variables" type=" dryverl:DecodeInputCCode "/>
</xsd:sequence>
</xsd:complexType>

Complex Type: DecodeInputCCode

Super-types: None
Sub-types: None
Name DecodeInputCCode
Abstract no
Documentation An actual C code block that decodes the optional Erlang term passed by copy, analyzes the optional list of Erlang binary terms passed by reference, and assigns C call variables.
XML Instance Representation
<...>
<!-- Mixed content -->
Start Choice [0..*]
Start Choice [1]
<dryverl:c-local-variable> dryverl:CVariableAccess </dryverl:c-local-variable> [1] ?
<dryverl:c-call-variable> dryverl:CVariableAccess </dryverl:c-call-variable> [1] ?
<dryverl:value-map-lock> dryverl:ValueMapLockUnlock </dryverl:value-map-lock> [1] ?
<dryverl:value-map-unlock> dryverl:ValueMapLockUnlock </dryverl:value-map-unlock> [1] ?
End Choice
<dryverl:value-map-find-entry
name=" dryverl:Identifier [1] ?"> [1] ?
Start Choice [1]
Start Choice [1]
<dryverl:value-map-find-entry-id/> [1] ?
<dryverl:value-map-remove-entry-id/> [1] ?
<dryverl:value-map-destroy-entry-id/> [1] ?
End Choice
<dryverl:value-map-entry-id-ref> dryverl:DecodeInputCCode </dryverl:value-map-entry-id-ref> [1] ?
<dryverl:value-map-entry-value-ref> dryverl:DecodeInputCCode </dryverl:value-map-entry-value-ref> [0..1] ?
Start Choice [1]
<dryverl:value-map-find-entry-value/> [1] ?
<dryverl:value-map-remove-entry-value/> [1] ?
<dryverl:value-map-destroy-entry-value/> [1] ?
<dryverl:value-map-find-or-add-entry-value/> [1] ?
End Choice
<dryverl:value-map-entry-id-ref> dryverl:DecodeInputCCode </dryverl:value-map-entry-id-ref> [0..1] ?
<dryverl:value-map-entry-value-ref> dryverl:DecodeInputCCode </dryverl:value-map-entry-value-ref> [1] ?
End Choice
<dryverl:value-map-if-entry-found> dryverl:DecodeInputCCode </dryverl:value-map-if-entry-found> [0..1] ?
<dryverl:value-map-if-entry-not-found> dryverl:DecodeInputCCode </dryverl:value-map-if-entry-not-found> [0..1] ?
</dryverl:value-map-find-entry>
<dryverl:failure-atom> dryverl:DecodeInputCCode </dryverl:failure-atom> [1] ?
<dryverl:failure-posix> dryverl:DecodeInputCCode </dryverl:failure-posix> [1] ?
<dryverl:failure> dryverl:DecodeInputCCode </dryverl:failure> [1] ?
<dryverl:byref-binaries-count/> [1] ?
<dryverl:decode-input-byref-binary> [1] ?
<dryverl:decode-input-byref-binary-ref-into> dryverl:DecodeInputCCode </dryverl:decode-input-byref-binary-ref-into> [1] ?
<dryverl:decode-input-byref-binary-buf-ref-into> dryverl:DecodeInputCCode </dryverl:decode-input-byref-binary-buf-ref-into> [1] ?
<dryverl:decode-input-byref-binary-size-into> dryverl:DecodeInputCCode </dryverl:decode-input-byref-binary-size-into> [1] ?
<dryverl:decode-input-byref-binary-offset-into> dryverl:DecodeInputCCode </dryverl:decode-input-byref-binary-offset-into> [1] ?
</dryverl:decode-input-byref-binary>
<dryverl:decode-input-long-into> dryverl:DecodeInputCCode </dryverl:decode-input-long-into> [1] ?
<dryverl:decode-input-ulong-into> dryverl:DecodeInputCCode </dryverl:decode-input-ulong-into> [1] ?
<dryverl:decode-input-double-into> dryverl:DecodeInputCCode </dryverl:decode-input-double-into> [1] ?
<dryverl:decode-input-boolean-into> dryverl:DecodeInputCCode </dryverl:decode-input-boolean-into> [1] ?
<dryverl:decode-input-char-into> dryverl:DecodeInputCCode </dryverl:decode-input-char-into> [1] ?
<dryverl:decode-input-string-into> dryverl:DecodeInputCCode </dryverl:decode-input-string-into> [1] ?
<dryverl:decode-input-atom-into> dryverl:DecodeInputCCode </dryverl:decode-input-atom-into> [1] ?
<dryverl:decode-input-binary> [1] ?
<dryverl:decode-input-binary-data-into> dryverl:DecodeInputCCode </dryverl:decode-input-binary-data-into> [1] ?
<dryverl:decode-input-binary-size-into> dryverl:DecodeInputCCode </dryverl:decode-input-binary-size-into> [1] ?
</dryverl:decode-input-binary>
<dryverl:decode-input-fun-into> dryverl:DecodeInputCCode </dryverl:decode-input-fun-into> [1] ?
<dryverl:decode-input-pid-into> dryverl:DecodeInputCCode </dryverl:decode-input-pid-into> [1] ?
<dryverl:decode-input-port-into> dryverl:DecodeInputCCode </dryverl:decode-input-port-into> [1] ?
<dryverl:decode-input-ref-into> dryverl:DecodeInputCCode </dryverl:decode-input-ref-into> [1] ?
<dryverl:decode-input-trace-into> dryverl:DecodeInputCCode </dryverl:decode-input-trace-into> [1] ?
<dryverl:decode-input-tuple> [1] ?
<dryverl:decode-input-tuple-size-into> dryverl:DecodeInputCCode </dryverl:decode-input-tuple-size-into> [1] ?
<dryverl:decode-input-tuple-contents> dryverl:DecodeInputCCode </dryverl:decode-input-tuple-contents> [1] ?
</dryverl:decode-input-tuple>
<dryverl:decode-input-list> [1] ?
<dryverl:decode-input-list-size-into> dryverl:DecodeInputCCode </dryverl:decode-input-list-size-into> [1] ?
<dryverl:decode-input-list-contents> dryverl:DecodeInputCCode </dryverl:decode-input-list-contents> [1] ?
</dryverl:decode-input-list>
<dryverl:decode-input-next-term-info> [1] ?
<dryverl:decode-input-next-term-type-into> dryverl:DecodeInputCCode </dryverl:decode-input-next-term-type-into> [1] ?
<dryverl:decode-input-next-term-size-into> dryverl:DecodeInputCCode </dryverl:decode-input-next-term-size-into> [1] ?
</dryverl:decode-input-next-term-info>
End Choice
</...>
Schema Component Representation
<xsd:complexType name="DecodeInputCCode" mixed="true">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<-- Elements for manipulating value maps -->
<xsd:group ref=" dryverl:commonCCode "/>
<xsd:element name="value-map-find-entry">
<xsd:complexType>
<xsd:sequence>
<xsd:choice>
<xsd:sequence>
<xsd:choice>
<xsd:element name="value-map-find-entry-id">
<xsd:complexType/>
</xsd:element>
<xsd:element name="value-map-remove-entry-id">
<xsd:complexType/>
</xsd:element>
<xsd:element name="value-map-destroy-entry-id">
<xsd:complexType/>
</xsd:element>
</xsd:choice>
<xsd:element name="value-map-entry-id-ref" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="value-map-entry-value-ref" type=" dryverl:DecodeInputCCode " minOccurs="0"/>
</xsd:sequence>
<xsd:sequence>
<xsd:choice>
<xsd:element name="value-map-find-entry-value">
<xsd:complexType/>
</xsd:element>
<xsd:element name="value-map-remove-entry-value">
<xsd:complexType/>
</xsd:element>
<xsd:element name="value-map-destroy-entry-value">
<xsd:complexType/>
</xsd:element>
<xsd:element name="value-map-find-or-add-entry-value">
<xsd:complexType/>
</xsd:element>
</xsd:choice>
<xsd:element name="value-map-entry-id-ref" type=" dryverl:DecodeInputCCode " minOccurs="0"/>
<xsd:element name="value-map-entry-value-ref" type=" dryverl:DecodeInputCCode "/>
</xsd:sequence>
</xsd:choice>
<xsd:element name="value-map-if-entry-found" type=" dryverl:DecodeInputCCode " minOccurs="0"/>
<xsd:element name="value-map-if-entry-not-found" type=" dryverl:DecodeInputCCode " minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" type=" dryverl:Identifier " use="required"/>
</xsd:complexType>
</xsd:element>
<-- Elements for notifying unrecoverable failures. -->
<xsd:element name="failure-atom" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="failure-posix" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="failure" type=" dryverl:DecodeInputCCode "/>
<-- Elements for decoding the list of Erlang binaries passed by ref. -->
<xsd:element name="byref-binaries-count">
<xsd:complexType/>
</xsd:element>
<xsd:element name="decode-input-byref-binary">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="decode-input-byref-binary-ref-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-byref-binary-buf-ref-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-byref-binary-size-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-byref-binary-offset-into" type=" dryverl:DecodeInputCCode "/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<-- Elements for decoding the Erlang term passed by copy. -->
<xsd:element name="decode-input-long-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-ulong-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-double-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-boolean-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-char-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-string-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-atom-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-binary">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="decode-input-binary-data-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-binary-size-into" type=" dryverl:DecodeInputCCode "/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="decode-input-fun-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-pid-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element name="decode-input-port-into" type=" dryverl:DecodeInputCCode "/>
<xsd:element