20 Commits

Author SHA1 Message Date
nanov
e9f7c11bbb v0.1.1 2019-11-05 06:48:24 +02:00
nanov
9aabe933e9 chore: update license 2019-11-05 06:41:31 +02:00
nanov
dc5f52198b v0.1.0 2019-11-05 06:26:02 +02:00
nanov
bb5e551057 chore: cleanup readme 2019-11-05 06:24:39 +02:00
nanov
0a3a4631df update readme 2019-11-05 06:23:45 +02:00
nanov
3ffa323264 chore: commit test keys for tests to pass 2019-11-05 06:22:16 +02:00
nanov
e56dc082d0 chore: add travis config 2019-11-05 06:13:27 +02:00
nanov
0c01420c1e chore: cleanup 2019-11-05 06:09:07 +02:00
nanov
0964992164 chore: drop node-rsa 2019-11-05 06:00:09 +02:00
Dimitar Nanov
5c419630c1 Merge pull request #16 from eCollect/feat/handle-unsual-exponent
Feat: handle unsual exponent migrate to node-forge
2019-11-05 05:58:50 +02:00
Dimitar Nanov
594f2a2623 Merge pull request #15 from eCollect/chore/tests
Add order generation tests and fix linting
2019-11-05 05:55:33 +02:00
nanov
fa557f5e9b feat: tests 2019-11-05 05:54:32 +02:00
nanov
cf16abc843 chire: jsdoc 2019-11-05 05:54:16 +02:00
nanov
c60fed4d58 chore: lint 2019-11-05 05:54:09 +02:00
nanov
9aa2ab7380 chore: lint 2019-11-05 05:53:20 +02:00
nanov
fe2ad67139 chore: update linter 2019-11-05 05:49:07 +02:00
nanov
422821fbbd feat: test all H004 orders 2019-11-01 11:27:36 +02:00
nanov
e40f79cee6 feat: prepare order generation tests 2019-11-01 08:13:53 +02:00
Dimitar Nanov
837fdaa08c Merge pull request #14 from yagop/test/mocha-script
test script run mocha
2019-11-01 05:59:38 +02:00
Yago Perez
361acf89d0 test script run mocha 2019-10-31 21:40:07 +01:00
29 changed files with 6396 additions and 387 deletions

View File

@@ -1,4 +1,5 @@
node_modules/
examples/
build/
static/
config/

View File

@@ -1,35 +1,4 @@
{
"extends": "airbnb-base",
"env": {
"node": true,
"mocha": true
},
"parserOptions": {
"ecmaVersion": 8,
"sourceType": "script",
"ecmaFeatures": {
"modules": false
}
},
"rules": {
"max-len": 0,
"linebreak-style": 0,
"no-plusplus": [
2,
{
"allowForLoopAfterthoughts": true
}
],
"no-continue": 0,
"indent": [2, "tab"],
"no-tabs": 0,
"strict": [2, "safe"],
"curly": [2, "multi", "consistent"],
"import/no-extraneous-dependencies": 0,
"import/no-unresolved": 0,
"no-underscore-dangle": 0,
"no-param-reassign": 0,
"generator-star-spacing": 0,
"jsx-a11y/href-no-hash": "off"
}
"extends": "ecollect-base",
"root": true
}

1
.gitignore vendored
View File

@@ -10,5 +10,4 @@ yarn.lock
*.pid
/coverage
package-lock.json
*.key
*.html

7
.travis.yml Normal file
View File

@@ -0,0 +1,7 @@
language: node_js
node_js:
- "8"
- "9"
- "10"
- "11"
- "12"

View File

@@ -1,5 +1,14 @@
# node-ebics-client
---
<p align="center">
<a href="https://travis-ci.org/eCollect/node-ebics-client" title="Build Status"><img src="https://travis-ci.org/eCollect/node-ebics-client.svg?branch=master" alt="Build Status" /></a>
<a href="https://www.npmjs.com/package/ebics-client" title="Build Status">
<img alt="ebics-client" src="https://img.shields.io/npm/v/ebics-client">
</a>
<a href="https://snyk.io/test/github/ecollect/node-ebics-client" title="Known Vulnerabilities">
<img src="https://snyk.io/test/github/ecollect/node-ebics-client/badge.svg" alt="Known Vulnerabilities">
</a>
<a href="/eCollect/node-ebics-client/blob/master/LICENSE" title="GPL-3.0"><img alt="GPL-3.0" src="https://img.shields.io/github/license/eCollect/node-ebics-client"></a>
</p>
Pure node.js ( >=8 ) implementation of [EBICS](https://en.wikipedia.org/wiki/Electronic_Banking_Internet_Communication_Standard) ( Electronic Banking Internet Communication ).
@@ -12,6 +21,7 @@ The client is currently tested and verified to work with the following banks:
* [Credit Suisse (Schweiz) AG](https://www.credit-suisse.com/ch/en.html)
* [Zürcher Kantonalbank](https://www.zkb.ch/en/lg/ew.html)
* [Raiffeisen Schweiz](https://www.raiffeisen.ch/rch/de.html)
* [BW Bank](https://www.bw-bank.de/de/home.html)
## Inspiration
@@ -21,4 +31,6 @@ The basic concept of this library was inspired by the [EPICS](https://github.com
## Copyright
Copyright: eCollect AG, 2018-9.
Copyright: eCollect AG, 2018-9.
Licensed under the [GPLv3](LICENSE) license.

View File

@@ -13,14 +13,47 @@ const response = require('./middleware/response');
const stringifyKeys = (keys) => {
Object.keys(keys).map((key) => {
keys[key] = keys[key] === null ? null : keys[key].toPem();
return key;
});
return JSON.stringify(keys);
};
/**
* Keys persistent object
* @typedef {Object} KeysObject
* @property {string} A006 - PEM representation of the A006 private key
* @property {string} E002 - PEM representation of the E002 private key
* @property {string} X002 - PEM representation of the X002 private key
* @property {string} bankX002 - PEM representation of the bankX002 public key
* @property {string} bankE002 - PEM representation of the bankE002 public key
*/
/**
* Key storage implementation
* @typedef {Object} KeyStorage
* @property {(data: KeysObject):Promise<void>} write - writes the keys to storage
* @property {():Promise<KeysObject>} read - reads the keys from storage
*/
/**
* Client initilization options
* @typedef {Object} EbicClientOptions
* @property {string} url - EBICS URL provided by the bank
* @property {string} partnerId - PARTNERID provided by the bank
* @property {string} hostId - HOSTID provided by the bank
* @property {string} userId - USERID provided by the bank
* @property {string} passphrase - passphrase for keys encyprion
* @property {KeyStorage} keyStorage - keyStorage implementation
* @property {object} [tracesStorage] - traces (logs) storage implementation
*/
module.exports = class Client {
/**
*Creates an instance of Client.
* @param {EbicClientOptions} clientOptions
*/
constructor({
url,
partnerId,
@@ -174,6 +207,12 @@ module.exports = class Client {
});
}
async signOrder(order) {
const { version } = order;
const keys = await this.keys();
return signer.version(version).sign((await serializer.use(order, this)).toXML(), keys.x());
}
async keys() {
try {
const keysString = await this._readKeys();

View File

@@ -1,6 +1,5 @@
'use strict';
// const Key = require('./keyRSA');
const Key = require('./Key');
const keyOrNull = (key) => {

View File

@@ -1,59 +0,0 @@
'use strict';
const Key = require('./keyRSA');
const keyOrNull = key => (key ? Key(key) : null);
module.exports = class Keys {
constructor({
A006,
E002,
X002,
bankX002,
bankE002,
}) {
this.keys = {
A006: keyOrNull(A006),
E002: keyOrNull(E002),
X002: keyOrNull(X002),
bankX002: keyOrNull(bankX002),
bankE002: keyOrNull(bankE002),
};
console.log('debug');
}
static generate() {
const keys = {};
Object.keys({ A006: '', X002: '', E002: '' }).forEach((key) => {
keys[key] = Key().generate();
});
return new Keys(keys);
}
setBankKeys(bankKeys) {
this.keys.bankX002 = Key().importKey(bankKeys.bankX002);
this.keys.bankE002 = Key().importKey(bankKeys.bankE002);
}
a() {
return this.keys.A006;
}
e() {
return this.keys.E002;
}
x() {
return this.keys.X002;
}
bankX() {
return this.keys.bankX002;
}
bankE() {
return this.keys.bankE002;
}
};

View File

@@ -1,228 +0,0 @@
'use strict';
/* eslint-disable camelcase */
function rsaPublicKeyPem(modulus_b64, exponent_b64) {
function prepadSigned(hexStr) {
const msb = hexStr[0];
if (
(msb >= '8' && msb <= '9') ||
(msb >= 'a' && msb <= 'f') ||
(msb >= 'A' && msb <= 'F'))
return `00${hexStr}`;
return hexStr;
}
function toHex(number) {
const nstr = number.toString(16);
if (nstr.length % 2 === 0) return nstr;
return `0${nstr}`;
}
// encode ASN.1 DER length field
// if <=127, short from
// if >=128, long from
function encodeLengthHex(n) {
if (n <= 127) return toHex(n);
const n_hex = toHex(n);
const length_of_length_byte = 128 + (n_hex.length / 2); // 0x80+numbytes
return toHex(length_of_length_byte) + n_hex;
}
const modulus = Buffer.from(modulus_b64, 'base64');
const exponent = Buffer.from(exponent_b64, 'base64');
let modulus_hex = modulus.toString('hex');
let exponent_hex = exponent.toString('hex');
modulus_hex = prepadSigned(modulus_hex);
exponent_hex = prepadSigned(exponent_hex);
const modlen = modulus_hex.length / 2;
const explen = exponent_hex.length / 2;
const encoded_modlen = encodeLengthHex(modlen);
const encoded_explen = encodeLengthHex(explen);
const encoded_pubkey = `30${
encodeLengthHex(modlen + explen + (encoded_modlen.length / 2) + (encoded_explen.length / 2) + 2)
}02${encoded_modlen}${modulus_hex
}02${encoded_explen}${exponent_hex}`;
let seq2 =
`${'30 0d ' +
'06 09 2a 86 48 86 f7 0d 01 01 01' +
'05 00 ' +
'03'}${encodeLengthHex((encoded_pubkey.length / 2) + 1)
}00${encoded_pubkey}`;
seq2 = seq2.replace(/ /g, '');
let der_hex = `30${encodeLengthHex(seq2.length / 2)}${seq2}`;
der_hex = der_hex.replace(/ /g, '');
const der = Buffer.from(der_hex, 'hex');
const der_b64 = der.toString('base64');
const pem = `-----BEGIN PUBLIC KEY-----\n${
der_b64.match(/.{1,64}/g).join('\n')
}\n-----END PUBLIC KEY-----\n`;
return pem.trim();
}
const BN = require('bn.js');
const NodeRSA = require('node-rsa');
const {
pki: {
rsa,
publicKeyToPem,
privateKeyToPem,
publicKeyFromPem,
privateKeyFromPem,
},
jsbn: {
BigInteger,
},
} = require('node-forge');
const isKeyInstance = (obj) => {
if (typeof obj !== 'object')
return false;
return ('publicKey' in obj && 'privateKey' in obj);
};
const getKeyType = (str) => {
const matches = str.match(/(PRIVATE|PUBLIC) KEY/);
if (!matches)
return null;
return matches[1].toLowerCase();
};
/*
class RsaKeyPair {
constructor() {
this._isPublic = null;
this._publicKey = null;
this._privateKey = null;
}
fromString(str) {
}
}
*/
const keyOrNull = (encodedKey) => {
if (encodedKey === null) return {};
if (typeof encodedKey === 'string') {
const type = getKeyType(encodedKey);
const isPublic = type === 'public';
const key = isPublic ? publicKeyFromPem(encodedKey) : privateKeyFromPem(encodedKey);
key.isPublic = isPublic;
return key;
}
return encodedKey;
// return (isKeyInstance(encodedKey)) ? encodedKey;
/* const k = (encodedKey instanceof NodeRSA) ? encodedKey : new NodeRSA(encodedKey);
if (k.keyPair.e === 16777216)
k.keyPair.e = 4294967311;
return k; */
};
module.exports = (encodedKey) => {
if (encodedKey && encodedKey.__RsaKey)
return encodedKey;
return {
__RsaKey: true,
key: keyOrNull(encodedKey),
generate(keySize = 2048) {
const keyPair = rsa.generateKeyPair(keySize);
this.key = keyPair.privateKey;
this.key.isPublic = false;
this.publicKey = keyPair.publicKey;
return this;
// return rsa.generateKeyPair(keySize);
// return new NodeRSA({ b: keySize });
},
importKey({
mod,
exp,
modulus,
exponent,
}) {
this.key = rsa.setPublicKey(new BigInteger(mod.toString('hex'), 16), new BigInteger(exp.toString('hex'), 16));
this.key.isPublic = true;
// const k = rsa.generateKeyPair();
// k.publicKey = rsa.setPublicKey(mod, exp);
// this.key = k;
// this.key.publicKey.
// .this.key.importKey({ n: mod, e: exp }, 'components-public');
/*
this.pempem = modulus && exponent ? {
modulus,
exponent,
} : null;
*/
return this;
},
n(to = 'buff') {
const key = this.publicKey || this.key;
const keyN = Buffer.from(key.n.toByteArray());
return to === 'hex'
? keyN.toString('hex', 1)
: keyN;
},
e(to = 'buff') {
const key = this.publicKey || this.key;
const eKey = Buffer.from(key.e.toByteArray()); // new BN(this.key.exportKey('components-public').e).toBuffer();
return to === 'hex'
? eKey.toString('hex')
: eKey;
},
d() {
return Buffer.from(this.key.d.toByteArray());
// return this.key.keyPair.d.toBuffer();
},
isPrivate() {
return !this.key.isPublic;
},
isPublic() {
return this.key.isPublic;
// return this.key.isPublic();
},
size() {
return 2048;
// return this.key.getKeySize();
},
toPem() {
if (this.isPublic())
return publicKeyToPem(this.key);
return privateKeyToPem(this.key);
/*
if (this.pempem)
return rsaPublicKeyPem(this.pempem.modulus, this.pempem.exponent);
const isPrivate = this.key.isPrivate();
const pem = isPrivate ? this.key.exportKey('pkcs1-private-pem') : this.key.exportKey('pkcs8-public-pem');
return pem;
*/
},
};
};

View File

@@ -2,7 +2,6 @@
const zlib = require('zlib');
const crypto = require('crypto');
const BN = require('bn.js');
const Crypto = require('../../crypto/Crypto');
@@ -72,7 +71,7 @@ module.exports = (xml, keys) => ({
businessCode() {
const select = xpath.useNamespaces({ xmlns: 'urn:org:ebics:H004' });
const node = select('//xmlns:body/xmlns:ReturnCode', this.doc)
const node = select('//xmlns:body/xmlns:ReturnCode', this.doc);
return node.length ? node[0].textContent : '';
},

View File

@@ -3,7 +3,6 @@
const js2xmlparser = require('js2xmlparser');
const Crypto = require('../../../crypto/Crypto');
const genericSerializer = require('./generic');
module.exports = {

View File

@@ -4,9 +4,7 @@ const fs = require('fs');
const uuidv1 = require('uuid/v1');
const traceName = (uuid, label, type, ext = 'xml') => {
return `${uuid}_${label}_${type}.${ext}`;
};
const traceName = (uuid, label, type, ext = 'xml') => `${uuid}_${label}_${type}.${ext}`;
module.exports = dir => ({
traceData: '',

View File

@@ -1,10 +1,11 @@
{
"name": "ebics-client",
"version": "0.0.8",
"version": "0.1.1",
"description": "Node.js ISO 20022 Compliant EBICS Client",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"lint": "eslint .",
"test": "mocha test/**/*.js"
},
"repository": {
"type": "git",
@@ -27,14 +28,13 @@
"url": "https://github.com/yagop"
}
],
"license": "MIT",
"license": "GPLv3",
"dependencies": {
"bn.js": "^5.0.0",
"handlebars": "^4.4.3",
"js2xmlparser": "^4.0.0",
"moment": "^2.24.0",
"node-forge": "^0.9.1",
"node-rsa": "^1.0.6",
"request": "^2.88.0",
"uuid": "^3.3.3",
"xml-crypto": "^1.4.0",
@@ -43,9 +43,10 @@
},
"devDependencies": {
"chai": "^4.2.0",
"eslint": "^4.19.1",
"eslint-config-airbnb-base": "^12.1.0",
"eslint-plugin-import": "^2.12.0",
"mocha": "^6.1.4"
"eslint": "^6.6.0",
"eslint-config-ecollect-base": "^0.1.2",
"eslint-plugin-import": "^2.18.2",
"libxmljs": "^0.19.7",
"mocha": "^6.2.2"
}
}

View File

@@ -1,44 +0,0 @@
'use strict';
const { assert } = require('chai');
const H004Response = require('../lib/orders/H004/response');
describe('H004 response parsing', () => {
it('parses bank keys exp', () => {
const response = H004Response('<xml/>', {});
const x002mod = 'AJ2/0OoIZydb9sgKbiwqDcwA0NtcUMIYi6GK7PqoRszu1uytGnxJjQhGt62kMslWvLgebUSwdq/T3YyGsa3KQeIGaUUn9iqyu3BoNOMdo2DLN4NdGMY1WR/HbYRKR3JHyURhTBKw27KScRRdKGl6jY+VcXcTKJL8PjXMQH5cD6Gz'; // 'ALr6oSdqbbpRxlJmKtwTjjaCA1zlA61Vd7NfPML1NxY/U3Dt8galrieRjBM0SDn4vD2+AJCQY4zzkdE2m8u/p+3KGtmZtGaaxs11TNRm9GhtwQGw2hW73RduTSwLZJrSilv/GH18vPar8uvlBAXTmtVEy2kfvT3+t1mvqrut/LnUg3t63nx3WVdWylEdVDmf9Ylp+W+2quLyE0TzTVl5OXhvB3tpVs2B4OfsmOHJAaKIdSuXDMJebPiM9uIlraiJVeRMjkW3Xxmrazc7+kuy8RZ4BBgi+Xve6lNaQHGqxPV5q5SeXR5fS0D2sPeewJWbjhaVRBObIV2ZEoEWKx79pnE=';
const e002mod = 'AOzWaiT7aGESXcI3dqLY3RRD36inlZTGmNNprKd/t9uHfoMeLwZHeMwtjCRWjsuZEyBupkNSFWb3vBlxDyhcyTgpbbbcHsDGqF2zCJaK85xUphoH9mKHxbnA8ZlXzmtHwDmwVSns0FAslIqD+Xr+WycQpeCBEK12D8Ii032YS814ZUKHJ1MkS65A5PE0lcvMTyIE7ruG1kFz85F4nX8eWq77mDEiBONkA5RSUb5duGnRohdNYBgO8K6Wn18aDdISGDyPyXHNvC70v8tfWbF9VGE3rXVGcgjpezZZxC8d47vL0x6lOeslgl7s8N456ntAa+oGHRurt5mEhDz1DZg+EJc=';
const exponent = 'AQAB'; // 'AQAAAA8=';
response.orderData = () => `<?xml version="1.0" encoding="UTF-8"?>
<HPBResponseOrderData xmlns="urn:org:ebics:H004" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<AuthenticationPubKeyInfo>
<PubKeyValue>
<ds:RSAKeyValue>
<ds:Modulus>${x002mod}</ds:Modulus>
<ds:Exponent>${exponent}</ds:Exponent>
</ds:RSAKeyValue>
<TimeStamp>2015-02-25T08:01:13.061Z</TimeStamp>
</PubKeyValue>
<AuthenticationVersion>X002</AuthenticationVersion>
</AuthenticationPubKeyInfo>
<EncryptionPubKeyInfo>
<PubKeyValue>
<ds:RSAKeyValue>
<ds:Modulus>${e002mod}</ds:Modulus>
<ds:Exponent>${exponent}</ds:Exponent>
</ds:RSAKeyValue>
<TimeStamp>2015-02-25T08:01:12.344Z</TimeStamp>
</PubKeyValue>
<EncryptionVersion>E002</EncryptionVersion>
</EncryptionPubKeyInfo>
<HostID>SBKPR01</HostID>
</HPBResponseOrderData>`;
const bankKeys = response.bankKeys();
assert.equal(bankKeys.bankX002.mod.toString('base64'), x002mod);
assert.equal(bankKeys.bankE002.mod.toString('base64'), e002mod);
});
});

105
test/spec/H004.js Normal file
View File

@@ -0,0 +1,105 @@
'use strict';
/* eslint-env node, mocha */
const { assert } = require('chai');
const path = require('path');
const fs = require('fs');
const ebics = require('../../');
const libxml = require('libxmljs');
const schemaPath = path.resolve(__dirname, '../xsd/ebics_H004.xsd');
const schemaDoc = libxml.parseXml(fs.readFileSync(schemaPath, { encoding: 'utf8' }));
const schemaDir = path.dirname(schemaPath);
const cwd = process.cwd();
const validateXML = (str) => {
try {
process.chdir(schemaDir);
const isValid = libxml.parseXmlString(str).validate(schemaDoc);
process.chdir(cwd);
return isValid;
} catch (e) {
process.chdir(cwd);
return false;
}
};
const client = new ebics.Client({
url: 'https://iso20022test.credit-suisse.com/ebicsweb/ebicsweb',
partnerId: 'CRS04381',
userId: 'CRS04381',
hostId: 'CRSISOTB',
passphrase: 'test',
keyStorage: ebics.fsKeysStorage(path.resolve(__dirname, '../support/TEST_KEYS.key')),
});
const { Orders } = ebics;
/*
upload :
const AZV = require('./AZV');
const CD1 = require('./CD1');
const CDB = require('./CDB');
const CDD = require('./CDD');
const CDS = require('./CDS');
const CCT = require('./CCT');
const CCS = require('./CCS');
const XE3 = require('./XE3');
const XCT = require('./XCT');
*/
const uploadBuilder = fn => fn('');
const dateBuilder = fn => fn('2018-01-01', '2019-01-01');
const fnOrders = {
// upload | document
AZV: uploadBuilder,
CD1: uploadBuilder,
CDB: uploadBuilder,
CDD: uploadBuilder,
CDS: uploadBuilder,
CCT: uploadBuilder,
CCS: uploadBuilder,
XE3: uploadBuilder,
XCT: uploadBuilder,
// download
STA: dateBuilder,
VMK: dateBuilder,
HAA: dateBuilder,
HTD: dateBuilder,
HPD: dateBuilder,
HKD: dateBuilder,
PTK: dateBuilder,
HAC: dateBuilder,
Z53: dateBuilder,
};
const getOrderObject = (name, order) => {
if (typeof order === 'object')
return order;
if (fnOrders[name])
return fnOrders[name](order);
return null;
};
describe('H004 order generation', () => {
// eslint-disable-next-line no-restricted-syntax
for (const [name, orderDefinition] of Object.entries(Orders)) {
const order = getOrderObject(name, orderDefinition);
if (!order)
continue;
const type = order.orderDetails.OrderType;
const { operation } = order;
it(`[${operation}] ${type} order generation`, async () => {
const signedOrder = await client.signOrder(order);
assert.isTrue(validateXML(signedOrder));
});
}
});

File diff suppressed because one or more lines are too long

View File

@@ -1,9 +1,11 @@
'use strict';
/* eslint-env node, mocha */
const { assert } = require('chai');
const fixtures = require('./fixtures/keys');
const fixtures = require('../fixtures/keys');
// const Key = require('../lib/keymanagers/keyRSA');
const Key = require('../lib/keymanagers/Key');
const Key = require('../../lib/keymanagers/Key');
const stripWhitespace = str => str.replace(/\s+/g, '');

View File

@@ -1,7 +1,9 @@
'use strict';
/* eslint-env node, mocha */
const { assert } = require('chai');
const H004Response = require('../lib/orders/H004/response');
const H004Response = require('../../lib/orders/H004/response');
describe('H004 response parsing', () => {
it('parses bank keys', () => {
@@ -23,7 +25,7 @@ describe('H004 response parsing', () => {
<AuthenticationVersion>X002</AuthenticationVersion>
</AuthenticationPubKeyInfo>
<EncryptionPubKeyInfo>
<PubKeyValue>
<PubKeyValue>
<ds:RSAKeyValue>
<ds:Modulus>${e002mod}</ds:Modulus>
<ds:Exponent>AQAB</ds:Exponent>

11
test/xsd/ebics_H004.xsd Executable file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ebics="urn:org:ebics:H004" targetNamespace="urn:org:ebics:H004" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<annotation>
<documentation xml:lang="de">ebics_H004.xsd inkludiert alle Schemadateien des EBICS-Protokolls, um die Eindeutigkeit von Element- und Typnamen im EBCIS Namespace zu erzwingen.</documentation>
<documentation xml:lang="en">ebics_H004.xsd includes all schema files for the EBICS protocol in order to enforce unique element and type names in the EBICS namespace.</documentation>
</annotation>
<include schemaLocation="ebics_request_H004.xsd"/>
<include schemaLocation="ebics_response_H004.xsd"/>
<include schemaLocation="ebics_keymgmt_request_H004.xsd"/>
<include schemaLocation="ebics_keymgmt_response_H004.xsd"/>
</schema>

135
test/xsd/ebics_hev.xsd Executable file
View File

@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ebics="http://www.ebics.org/H000" targetNamespace="http://www.ebics.org/H000" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<xs:annotation>
<xs:documentation xml:lang="de">ebics_hev.xsd ist das EBICS-Protokollschema entweder für Anfragen oder Rückmeldungen der Bank zu unterstützten EBICS-Versionen.</xs:documentation>
<xs:documentation xml:lang="en">ebics_hev.xsd is the appropriate EBICS protocol schema either for requests or responses according the EBICS versions supported by a bank.</xs:documentation>
</xs:annotation>
<xs:simpleType name="HostIDType">
<xs:annotation>
<xs:documentation xml:lang="de">Datentyp für die Host-ID.</xs:documentation>
<xs:documentation xml:lang="en">Dataype for Host-ID.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:maxLength value="35"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OrderTBaseType">
<xs:annotation>
<xs:documentation xml:lang="de">Datentyp für allgemeine Auftragsarten (Grundtyp).</xs:documentation>
<xs:documentation xml:lang="en">Datatype for general order types (basic type).</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:length value="3"/>
<xs:pattern value="HEV"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ReturnCodeType">
<xs:annotation>
<xs:documentation xml:lang="de">Datentyp für Antwortcodes.</xs:documentation>
<xs:documentation xml:lang="en">Datatype for the return code</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:length value="6"/>
<xs:pattern value="\d{6}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ReportTextType">
<xs:annotation>
<xs:documentation xml:lang="de">Datentyp für den Erklärungstext zum Antwortcode.</xs:documentation>
<xs:documentation xml:lang="en">Datatype for report text with respect to the return code</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:normalizedString">
<xs:maxLength value="256"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="VersionNumberType">
<xs:annotation>
<xs:documentation xml:lang="de">Datentyp für eine Versionsnummer</xs:documentation>
<xs:documentation xml:lang="en">Datatype for a release number </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:length value="5"/>
<xs:pattern value="[0-9]{2}[.][0-9]{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ProtocolVersionType">
<xs:annotation>
<xs:documentation xml:lang="de">Datentyp für Versionsnummer des EBICS-schemas</xs:documentation>
<xs:documentation xml:lang="en">Datatype for release-number of the EBICS scheme</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:length value="4"/>
<xs:pattern value="H\d{3}"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="SystemReturnCodeType">
<xs:annotation>
<xs:documentation xml:lang="de">Datentyp für technische Fehler.</xs:documentation>
<xs:documentation xml:lang="en">Datatype for technical error</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="ReturnCode" type="ebics:ReturnCodeType">
<xs:annotation>
<xs:documentation xml:lang="de">Rückmeldung des Ausführungsstatus mit einer eindeutigen Fehlernummer.</xs:documentation>
<xs:documentation xml:lang="en">Confirmation of the carried out status with a unique error code.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ReportText" type="ebics:ReportTextType">
<xs:annotation>
<xs:documentation xml:lang="de">Klartext der Rückmeldung des Ausführungsstatus.</xs:documentation>
<xs:documentation xml:lang="en">Clear text of the response (carried out status).</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="HEVRequestDataType">
<xs:annotation>
<xs:documentation xml:lang="de">Datentyp für die Request-Daten</xs:documentation>
<xs:documentation xml:lang="en">Data type for Request data</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="HostID" type="ebics:HostIDType"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="HEVResponseDataType">
<xs:annotation>
<xs:documentation xml:lang="en">Datentyp für die Response-Daten</xs:documentation>
<xs:documentation xml:lang="en">Data type for Request data</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="SystemReturnCode" type="ebics:SystemReturnCodeType"/>
<xs:element name="VersionNumber" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation xml:lang="de">Von der Bank unterstützte EBICS-Versionen, z.B. 2.4</xs:documentation>
<xs:documentation xml:lang="en">EBICS-releases supported by the bank, e.g. 2.4</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="ebics:VersionNumberType">
<xs:attribute name="ProtocolVersion" type="ebics:ProtocolVersionType" use="required">
<xs:annotation>
<xs:documentation xml:lang="de">der EBICS-Version eindeutig zugeordnete Schema-Version, z.B. H003</xs:documentation>
<xs:documentation xml:lang="en">EBICS-scheme-version, e.g. H003, well-defined for EBICS-release-Version</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ebicsHEVRequest" type="ebics:HEVRequestDataType">
<xs:annotation>
<xs:documentation xml:lang="de">Requestdaten</xs:documentation>
<xs:documentation xml:lang="en">request data</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ebicsHEVResponse" type="ebics:HEVResponseDataType">
<xs:annotation>
<xs:documentation xml:lang="de">Responsedaten</xs:documentation>
<xs:documentation xml:lang="en">response data</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>

View File

@@ -0,0 +1,543 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Mit XMLSpy v2008 rel. 2 sp2 (http://www.altova.com) von benutzerservice benutzerservice (SIZ GmbH) bearbeitet -->
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ebics="urn:org:ebics:H004" targetNamespace="urn:org:ebics:H004" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<annotation>
<documentation xml:lang="de">ebics_keymgmt_request_H004.xsd ist das EBICS-Protokollschema für Schlüsselmanagement-Anfragen (HIA, HPB, HSA, INI).</documentation>
</annotation>
<import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd">
<annotation>
<documentation xml:lang="de">XML-Signature.</documentation>
</annotation>
</import>
<include schemaLocation="ebics_types_H004.xsd"/>
<include schemaLocation="ebics_orders_H004.xsd"/>
<complexType name="StaticHeaderBaseType" abstract="true">
<annotation>
<documentation xml:lang="de">Datentyp für den statischen EBICS-Header (allgemein).</documentation>
</annotation>
<sequence>
<element name="HostID" type="ebics:HostIDType">
<annotation>
<documentation xml:lang="de">Hostname des Banksystems.</documentation>
</annotation>
</element>
<element name="Nonce" type="ebics:NonceType" minOccurs="0">
<annotation>
<documentation xml:lang="de">Zufallswert; damit wird die Initialisierungsnachricht des Clients einzigartig; nur anzugeben, falls Authentifikationssignatur vorhanden.</documentation>
</annotation>
</element>
<element name="Timestamp" type="ebics:TimestampType" minOccurs="0">
<annotation>
<documentation xml:lang="de">aktueller Zeitstempel zur Begrenzung der serverseitigen Nonce-Speicherung; nur anzugeben, falls Authentifikationssignatur vorhanden.</documentation>
</annotation>
</element>
<element name="PartnerID" type="ebics:PartnerIDType">
<annotation>
<documentation xml:lang="de">Kunden-ID des serverseitig administrierten Kunden.</documentation>
</annotation>
</element>
<element name="UserID" type="ebics:UserIDType">
<annotation>
<documentation xml:lang="de">Teilnehmer-ID des serverseitig zu diesem Kunden administrierten Teilnehmers.</documentation>
</annotation>
</element>
<element name="SystemID" type="ebics:UserIDType" minOccurs="0">
<annotation>
<documentation xml:lang="de">technische User-ID für Multi-User-Systeme.</documentation>
</annotation>
</element>
<element name="Product" type="ebics:ProductElementType" nillable="true" minOccurs="0">
<annotation>
<documentation xml:lang="de">Kennung des Kundenprodukts bzw. Herstellerkennung oder Name.</documentation>
</annotation>
</element>
<element name="OrderDetails" type="ebics:OrderDetailsType">
<annotation>
<documentation xml:lang="de">Auftragsdetails.</documentation>
</annotation>
</element>
<element name="SecurityMedium" type="ebics:SecurityMediumType">
<annotation>
<documentation xml:lang="de">Angabe des Sicherheitsmediums, das der Kunde verwendet.</documentation>
</annotation>
</element>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="OrderDetailsType" abstract="true">
<annotation>
<documentation xml:lang="de">Datentyp für OrderDetails im statischen EBICS-Header (allgemein).</documentation>
</annotation>
<sequence>
<element name="OrderType" type="ebics:OrderTBaseType">
<annotation>
<documentation xml:lang="de">Auftragsart.</documentation>
</annotation>
</element>
<element name="OrderAttribute" type="ebics:OrderAttributeBaseType">
<annotation>
<documentation xml:lang="de">Auftragsattribut.</documentation>
</annotation>
</element>
</sequence>
</complexType>
<complexType name="ProductElementType">
<annotation>
<documentation xml:lang="de">Datentyp für Element mit Kennung des Kundenprodukts bzw. Herstellerkennung oder Name.</documentation>
</annotation>
<simpleContent>
<extension base="ebics:ProductType">
<attribute name="Language" type="ebics:LanguageType" use="required">
<annotation>
<documentation xml:lang="de">Sprachkennzeichen der Kundenproduktversion (gemäß ISO 639).</documentation>
</annotation>
</attribute>
<attribute name="InstituteID" type="ebics:InstituteIDType" use="optional">
<annotation>
<documentation xml:lang="de">Kennung des Herausgebers des Kundenprodukts bzw. des betreuenden Kreditinstituts.</documentation>
</annotation>
</attribute>
</extension>
</simpleContent>
</complexType>
<complexType name="EmptyMutableHeaderType">
<annotation>
<documentation xml:lang="de">Datentyp für den leeren variablen EBICS-Header von Key Managemen Aufträgen.</documentation>
</annotation>
<sequence>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<element name="ebicsUnsecuredRequest">
<annotation>
<documentation>Anfragestruktur für ungesicherte Auftragsarten HIA (Authentifikations- und Verschlüsselungsschlüssel senden) und INI (bankfachllichen Schlüssel senden).</documentation>
</annotation>
<complexType>
<sequence>
<element name="header">
<annotation>
<documentation xml:lang="de">enthält die technischen Transaktionsdaten.</documentation>
</annotation>
<complexType>
<sequence>
<element name="static" type="ebics:UnsecuredRequestStaticHeaderType">
<annotation>
<documentation xml:lang="de">enhält alle festen Headereinträge.</documentation>
</annotation>
</element>
<element name="mutable" type="ebics:EmptyMutableHeaderType">
<annotation>
<documentation xml:lang="de">enthält alle variablen Headereinträge.</documentation>
</annotation>
</element>
</sequence>
<attributeGroup ref="ebics:AuthenticationMarker"/>
</complexType>
</element>
<element name="body">
<annotation>
<documentation xml:lang="de">enthält die Auftragsdaten.</documentation>
</annotation>
<complexType>
<sequence>
<annotation>
<documentation xml:lang="de"/>
</annotation>
<element name="DataTransfer">
<annotation>
<documentation xml:lang="de">Transfer von Auftragsdaten.</documentation>
</annotation>
<complexType>
<sequence>
<element name="OrderData">
<annotation>
<documentation xml:lang="de">enthält Auftragsdaten.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:OrderDataType">
<anyAttribute namespace="##targetNamespace" processContents="lax"/>
</extension>
</simpleContent>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
<attributeGroup ref="ebics:VersionAttrGroup"/>
</complexType>
</element>
<complexType name="UnsecuredRequestStaticHeaderType">
<annotation>
<documentation xml:lang="de">Datentyp für den statischen EBICS-Header bei ungesicherten Sendeauftragsarten (Aufträge HIA und INI): kein Nonce, kein Timestamp, keine EU-Datei, keine X001 Authentifizierung, keine Verschlüsselung, keine Digests der öffentlichen Bankschlüssel, Nutzdaten komprimiert, Auftragsattribut DZNNN</documentation>
</annotation>
<complexContent>
<restriction base="ebics:StaticHeaderBaseType">
<sequence>
<element name="HostID" type="ebics:HostIDType">
<annotation>
<documentation xml:lang="de">Hostname des Banksystems.</documentation>
</annotation>
</element>
<element name="Nonce" type="ebics:NonceType" minOccurs="0" maxOccurs="0">
<annotation>
<documentation xml:lang="de">Zufallswert; damit wird die Initialisierungsnachricht des Clients einzigartig; nicht anzugeben für ebicsUnsecuredRequest.</documentation>
</annotation>
</element>
<element name="Timestamp" type="ebics:TimestampType" minOccurs="0" maxOccurs="0">
<annotation>
<documentation xml:lang="de">aktueller Zeitstempel zur Begrenzung der serverseitigen Nonce-Speicherung; nicht anzugeben für ebicsUnsecuredRequest.</documentation>
</annotation>
</element>
<element name="PartnerID" type="ebics:PartnerIDType">
<annotation>
<documentation xml:lang="de">Kunden-ID des serverseitig administrierten Kunden.</documentation>
</annotation>
</element>
<element name="UserID" type="ebics:UserIDType">
<annotation>
<documentation xml:lang="de">Teilnehmer-ID des serverseitig zu diesem Kunden administrierten Teilnehmers.</documentation>
</annotation>
</element>
<element name="SystemID" type="ebics:UserIDType" minOccurs="0">
<annotation>
<documentation xml:lang="de">technische User-ID für Multi-User-Systeme.</documentation>
</annotation>
</element>
<element name="Product" type="ebics:ProductElementType" nillable="true" minOccurs="0">
<annotation>
<documentation xml:lang="de">Kennung des Kundenprodukts bzw. Herstellerkennung oder Name.</documentation>
</annotation>
</element>
<element name="OrderDetails" type="ebics:UnsecuredReqOrderDetailsType">
<annotation>
<documentation xml:lang="de">Auftragsdetails.</documentation>
</annotation>
</element>
<element name="SecurityMedium" type="ebics:SecurityMediumType">
<annotation>
<documentation xml:lang="de">Angabe des Sicherheitsmediums, das der Kunde verwendet.</documentation>
</annotation>
</element>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</restriction>
</complexContent>
</complexType>
<complexType name="UnsecuredReqOrderDetailsType">
<annotation>
<documentation xml:lang="de">Datentyp für OrderDetails im statischen EBICS-Header von ebicsUnsecuredRequest.</documentation>
</annotation>
<complexContent>
<restriction base="ebics:OrderDetailsType">
<sequence>
<element name="OrderType" type="ebics:OrderTBaseType">
<annotation>
<documentation xml:lang="de">Auftragsart.</documentation>
</annotation>
</element>
<element name="OrderAttribute" type="ebics:OrderAttributeBaseType" fixed="DZNNN">
<annotation>
<documentation xml:lang="de">Auftragsattribut: DZNNN.</documentation>
</annotation>
</element>
</sequence>
</restriction>
</complexContent>
</complexType>
<element name="ebicsNoPubKeyDigestsRequest">
<annotation>
<documentation>Anfragestruktur für Auftragsarten ohne Übertragung der Digests der öffentlichen Bankschlüssel (HPB Bankschlüssel abholen).</documentation>
</annotation>
<complexType>
<sequence>
<element name="header">
<annotation>
<documentation xml:lang="de">enthält die technischen Transaktionsdaten.</documentation>
</annotation>
<complexType>
<sequence>
<element name="static" type="ebics:NoPubKeyDigestsRequestStaticHeaderType">
<annotation>
<documentation xml:lang="de">enhält alle festen Headereinträge.</documentation>
</annotation>
</element>
<element name="mutable" type="ebics:EmptyMutableHeaderType">
<annotation>
<documentation xml:lang="de">enthält alle variablen Headereinträge.</documentation>
</annotation>
</element>
</sequence>
<attributeGroup ref="ebics:AuthenticationMarker"/>
</complexType>
</element>
<element ref="ebics:AuthSignature">
<annotation>
<documentation xml:lang="de">Authentifikationssignatur.</documentation>
</annotation>
</element>
<element name="body">
<annotation>
<documentation xml:lang="de">enthält optionale Zertifikate (vorgesehen).</documentation>
</annotation>
<complexType>
<sequence>
<annotation>
<documentation xml:lang="de"/>
</annotation>
<element ref="ds:X509Data" minOccurs="0" maxOccurs="0">
<annotation>
<documentation xml:lang="de">X.509-Daten des Teilnehmers.</documentation>
</annotation>
</element>
</sequence>
</complexType>
</element>
</sequence>
<attributeGroup ref="ebics:VersionAttrGroup"/>
</complexType>
</element>
<complexType name="NoPubKeyDigestsRequestStaticHeaderType">
<annotation>
<documentation xml:lang="de">Datentyp für den statischen EBICS-Header bei Aufträgen ohne Übertragung der Digests der Bankschlüssel (Auftrag HBP): keine Digests der öffentlichen Bankschlüssel, keine EU-Datei, keine Nutzdaten, OrderId optional!, Nonce, Timestamp, X001 Authentifizierung, Auftragsattribut DZHNN</documentation>
</annotation>
<complexContent>
<restriction base="ebics:StaticHeaderBaseType">
<sequence>
<element name="HostID" type="ebics:HostIDType">
<annotation>
<documentation xml:lang="de">Hostname des Banksystems.</documentation>
</annotation>
</element>
<element name="Nonce" type="ebics:NonceType">
<annotation>
<documentation xml:lang="de">Zufallswert; damit wird die Initialisierungsnachricht des Clients einzigartig.</documentation>
</annotation>
</element>
<element name="Timestamp" type="ebics:TimestampType">
<annotation>
<documentation xml:lang="de">aktueller Zeitstempel zur Begrenzung der serverseitigen Nonce-Speicherung.</documentation>
</annotation>
</element>
<element name="PartnerID" type="ebics:PartnerIDType">
<annotation>
<documentation xml:lang="de">Kunden-ID des serverseitig administrierten Kunden.</documentation>
</annotation>
</element>
<element name="UserID" type="ebics:UserIDType">
<annotation>
<documentation xml:lang="de">Teilnehmer-ID des serverseitig zu diesem Kunden administrierten Teilnehmers.</documentation>
</annotation>
</element>
<element name="SystemID" type="ebics:UserIDType" minOccurs="0">
<annotation>
<documentation xml:lang="de">technische User-ID für Multi-User-Systeme.</documentation>
</annotation>
</element>
<element name="Product" type="ebics:ProductElementType" nillable="true" minOccurs="0">
<annotation>
<documentation xml:lang="de">Kennung des Kundenprodukts bzw. Herstellerkennung oder Name.</documentation>
</annotation>
</element>
<element name="OrderDetails" type="ebics:NoPubKeyDigestsReqOrderDetailsType">
<annotation>
<documentation xml:lang="de">Auftragsdetails.</documentation>
</annotation>
</element>
<element name="SecurityMedium" type="ebics:SecurityMediumType">
<annotation>
<documentation xml:lang="de">Angabe des Sicherheitsmediums, das der Kunde verwendet.</documentation>
</annotation>
</element>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</restriction>
</complexContent>
</complexType>
<complexType name="NoPubKeyDigestsReqOrderDetailsType">
<annotation>
<documentation xml:lang="de">Datentyp für OrderDetails im statischen EBICS-Header von ebicsNoPubKeyDigestsRequest.</documentation>
</annotation>
<complexContent>
<restriction base="ebics:OrderDetailsType">
<sequence>
<element name="OrderType" type="ebics:OrderTBaseType">
<annotation>
<documentation xml:lang="de">Auftragsart.</documentation>
</annotation>
</element>
<element name="OrderAttribute" type="ebics:OrderAttributeBaseType" fixed="DZHNN">
<annotation>
<documentation xml:lang="de">Auftragsattribut: DZHNN.</documentation>
</annotation>
</element>
</sequence>
</restriction>
</complexContent>
</complexType>
<element name="ebicsUnsignedRequest">
<annotation>
<documentation xml:lang="en">The structure for uploads contains order data and the ESs, but without an authentication signature and data digest of bank keys.</documentation>
<documentation>Anfragestruktur für Sendeaufträge mit EU-Datei und Nutzdaten aber ohne Authentifizierungssignatur und Digests der Bankschlüssel.</documentation>
</annotation>
<complexType>
<sequence>
<element name="header">
<annotation>
<documentation xml:lang="en">Contains technical transaction data.</documentation>
<documentation xml:lang="de">enthält die technischen Transaktionsdaten.</documentation>
</annotation>
<complexType>
<sequence>
<element name="static" type="ebics:UnsignedRequestStaticHeaderType">
<annotation>
<documentation xml:lang="en">Contains all fixed header entries.</documentation>
<documentation xml:lang="de">enhält alle festen Headereinträge.</documentation>
</annotation>
</element>
<element name="mutable" type="ebics:EmptyMutableHeaderType">
<annotation>
<documentation xml:lang="en">Contains all mutable header entries.</documentation>
<documentation xml:lang="de">enthält alle variablen Headereinträge.</documentation>
</annotation>
</element>
</sequence>
<attributeGroup ref="ebics:AuthenticationMarker"/>
</complexType>
</element>
<element name="body">
<annotation>
<documentation xml:lang="en">Contains the order data and the ESs.</documentation>
<documentation xml:lang="de">enthält die Auftragsdaten und EUs.</documentation>
</annotation>
<complexType>
<sequence>
<annotation>
<documentation xml:lang="de"/>
</annotation>
<element name="DataTransfer">
<annotation>
<documentation xml:lang="en">Transfer of order data and the ESs.</documentation>
<documentation xml:lang="de">Transfer von Auftragsdaten und EUs.</documentation>
</annotation>
<complexType>
<sequence>
<element name="SignatureData">
<annotation>
<documentation xml:lang="en">Contains the ESs.</documentation>
<documentation xml:lang="de">enthält Signaturdaten (EUs).</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:SignatureDataType">
<attributeGroup ref="ebics:AuthenticationMarker"/>
</extension>
</simpleContent>
</complexType>
</element>
<element name="OrderData">
<annotation>
<documentation xml:lang="en">Contains the order data</documentation>
<documentation xml:lang="de">enthält Auftragsdaten.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:OrderDataType">
<anyAttribute namespace="##targetNamespace" processContents="lax"/>
</extension>
</simpleContent>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
<attributeGroup ref="ebics:VersionAttrGroup"/>
</complexType>
</element>
<complexType name="UnsignedRequestStaticHeaderType">
<annotation>
<documentation xml:lang="de">Datentyp für den statischen EBICS-Header für ebicsUnsignedRequest.Datentyp für den statischen EBICS-Header bei Aufträgen ohne Authentifizierungssignatur (Auftrag HSA): keine X001 Authentifizierung, keine Digests der öffentlichen Bankschlüssel, EU-Datei, Nutzdaten, Nonce, Timestamp, OrderId, Auftragsattribut OZNNN</documentation>
</annotation>
<complexContent>
<restriction base="ebics:StaticHeaderBaseType">
<sequence>
<element name="HostID" type="ebics:HostIDType">
<annotation>
<documentation xml:lang="de">Hostname des Banksystems.</documentation>
</annotation>
</element>
<element name="Nonce" type="ebics:NonceType" minOccurs="0" maxOccurs="0">
<annotation>
<documentation xml:lang="de">Zufallswert; damit wird die Initialisierungsnachricht des Clients einzigartig; nicht anzugeben bei ebicsUnsignedRequest.</documentation>
</annotation>
</element>
<element name="Timestamp" type="ebics:TimestampType" minOccurs="0" maxOccurs="0">
<annotation>
<documentation xml:lang="de">aktueller Zeitstempel zur Begrenzung der serverseitigen Nonce-Speicherung; nicht anzugeben bei ebicsUnsignedRequest.</documentation>
</annotation>
</element>
<element name="PartnerID" type="ebics:PartnerIDType">
<annotation>
<documentation xml:lang="de">Kunden-ID des serverseitig administrierten Kunden.</documentation>
</annotation>
</element>
<element name="UserID" type="ebics:UserIDType">
<annotation>
<documentation xml:lang="de">Teilnehmer-ID des serverseitig zu diesem Kunden administrierten Teilnehmers.</documentation>
</annotation>
</element>
<element name="SystemID" type="ebics:UserIDType" minOccurs="0">
<annotation>
<documentation xml:lang="de">technische User-ID für Multi-User-Systeme.</documentation>
</annotation>
</element>
<element name="Product" type="ebics:ProductElementType" nillable="true" minOccurs="0">
<annotation>
<documentation xml:lang="de">Kennung des Kundenprodukts bzw. Herstellerkennung oder Name.</documentation>
</annotation>
</element>
<element name="OrderDetails" type="ebics:UnsignedReqOrderDetailsType">
<annotation>
<documentation xml:lang="de">Auftragsdetails.</documentation>
</annotation>
</element>
<element name="SecurityMedium" type="ebics:SecurityMediumType">
<annotation>
<documentation xml:lang="de">Angabe des Sicherheitsmediums, das der Kunde verwendet.</documentation>
</annotation>
</element>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</restriction>
</complexContent>
</complexType>
<complexType name="UnsignedReqOrderDetailsType">
<annotation>
<documentation xml:lang="de">Datentyp für OrderDetails im statischen EBICS-Header von ebicsUnsignedRequest.</documentation>
</annotation>
<complexContent>
<restriction base="ebics:OrderDetailsType">
<sequence>
<element name="OrderType" type="ebics:OrderTBaseType">
<annotation>
<documentation xml:lang="de">Auftragsart.</documentation>
</annotation>
</element>
<element name="OrderAttribute" type="ebics:OrderAttributeBaseType" fixed="OZNNN">
<annotation>
<documentation xml:lang="de">Auftragsattribut: OZNNN.</documentation>
</annotation>
</element>
</sequence>
</restriction>
</complexContent>
</complexType>
</schema>

View File

@@ -0,0 +1,137 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Mit XMLSpy v2008 rel. 2 sp2 (http://www.altova.com) von benutzerservice benutzerservice (SIZ GmbH) bearbeitet -->
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ebics="urn:org:ebics:H004" targetNamespace="urn:org:ebics:H004" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<annotation>
<documentation xml:lang="de">ebics_keymgmt_response_H004.xsd ist das EBICS-Protokollschema für Schlüsselmanagement-Antwortnachrichten (HIA, HPB, HSA, INI).</documentation>
</annotation>
<import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd">
<annotation>
<documentation xml:lang="de">XML-Signature.</documentation>
</annotation>
</import>
<include schemaLocation="ebics_types_H004.xsd"/>
<include schemaLocation="ebics_orders_H004.xsd"/>
<element name="ebicsKeyManagementResponse">
<annotation>
<documentation xml:lang="de">Electronic Banking Internet Communication Standard des Zentralen Kreditausschusses (ZKA): Multibankfähige Schnittstelle zur internetbasierten Kommunikation.</documentation>
</annotation>
<complexType>
<sequence>
<element name="header">
<annotation>
<documentation xml:lang="de">enthält die technischen Transaktionsdaten.</documentation>
</annotation>
<complexType>
<sequence>
<element name="static">
<annotation>
<documentation xml:lang="de">enhält alle festen Headereinträge.</documentation>
</annotation>
<complexType>
<sequence/>
</complexType>
</element>
<element name="mutable" type="ebics:KeyMgmntResponseMutableHeaderType">
<annotation>
<documentation xml:lang="de">enthält alle variablen Headereinträge.</documentation>
</annotation>
</element>
</sequence>
<attributeGroup ref="ebics:AuthenticationMarker"/>
</complexType>
</element>
<element name="body">
<annotation>
<documentation xml:lang="de">enthält die Auftragsdaten und den fachlichen ReturnCode.</documentation>
</annotation>
<complexType>
<sequence>
<element name="DataTransfer" minOccurs="0">
<annotation>
<documentation xml:lang="de">Transfer von Auftragsdaten; nur bei Download anzugeben (HPB).</documentation>
</annotation>
<complexType>
<sequence>
<element name="DataEncryptionInfo">
<annotation>
<documentation xml:lang="de">Informationen zur Verschlüsselung der Auftragsdaten</documentation>
</annotation>
<complexType>
<complexContent>
<extension base="ebics:DataEncryptionInfoType">
<attributeGroup ref="ebics:AuthenticationMarker"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="OrderData">
<annotation>
<documentation xml:lang="de">enthält Auftragsdaten.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:OrderDataType">
<anyAttribute namespace="##targetNamespace" processContents="lax"/>
</extension>
</simpleContent>
</complexType>
</element>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<element name="ReturnCode">
<annotation>
<documentation xml:lang="de">Antwortcode für den vorangegangenen Transfer.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:ReturnCodeType">
<attributeGroup ref="ebics:AuthenticationMarker"/>
</extension>
</simpleContent>
</complexType>
</element>
<element name="TimestampBankParameter" minOccurs="0">
<annotation>
<documentation xml:lang="de">Zeitstempel der letzten Aktualisierung der Bankparameter; nur in der Initialisierungsphase anzugeben.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:TimestampType">
<attributeGroup ref="ebics:AuthenticationMarker"/>
</extension>
</simpleContent>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
<attributeGroup ref="ebics:VersionAttrGroup"/>
</complexType>
</element>
<complexType name="KeyMgmntResponseMutableHeaderType">
<annotation>
<documentation xml:lang="de">Datentyp für den variablen EBICS-Header.</documentation>
</annotation>
<sequence>
<element name="OrderID" type="ebics:OrderIDType" minOccurs="0">
<annotation>
<documentation xml:lang="de">Auftragsnummer von Sendeaufträgen gemäß DFÜ-Abkommen (used for all key management order types except download order type HPB).</documentation>
</annotation>
</element>
<element name="ReturnCode" type="ebics:ReturnCodeType">
<annotation>
<documentation xml:lang="de">Rückmeldung des Ausführungsstatus mit einer eindeutigen Fehlernummer.</documentation>
</annotation>
</element>
<element name="ReportText" type="ebics:ReportTextType">
<annotation>
<documentation xml:lang="de">Klartext der Rückmeldung des Ausführungsstatus.</documentation>
</annotation>
</element>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
</schema>

1892
test/xsd/ebics_orders_H004.xsd Executable file

File diff suppressed because it is too large Load Diff

355
test/xsd/ebics_request_H004.xsd Executable file
View File

@@ -0,0 +1,355 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Mit XMLSpy v2008 rel. 2 (http://www.altova.com) von Sabine Wenzel (SIZ Bonn) bearbeitet -->
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ebics="urn:org:ebics:H004" targetNamespace="urn:org:ebics:H004" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<annotation>
<documentation xml:lang="de">ebics_request_H004.xsd ist das EBICS-Protokollschema für Anfragen.</documentation>
<documentation xml:lang="en">ebics_request_H004.xsd is the appropriate EBICS protocol schema for standard requests.</documentation>
</annotation>
<include schemaLocation="ebics_types_H004.xsd"/>
<include schemaLocation="ebics_orders_H004.xsd"/>
<import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
<element name="ebicsRequest">
<annotation>
<documentation xml:lang="de">Electronic Banking Internet Communication Standard of the EBICS SCRL: Multibankfähige Schnittstelle zur internetbasierten Kommunikation.</documentation>
<documentation xml:lang="en">Electronic Banking Internet Communication Standard der EBICS SCRL: multi-bank capable interface for internet-based communication.</documentation>
</annotation>
<complexType>
<sequence>
<element name="header">
<annotation>
<documentation xml:lang="de">enthält die technischen Transaktionsdaten.</documentation>
<documentation xml:lang="en">contains the transaction-driven data.</documentation>
</annotation>
<complexType>
<sequence>
<element name="static" type="ebics:StaticHeaderType">
<annotation>
<documentation xml:lang="de">enhält alle festen Headereinträge.</documentation>
<documentation xml:lang="en">contains the static header entries.</documentation>
</annotation>
</element>
<element name="mutable" type="ebics:MutableHeaderType">
<annotation>
<documentation xml:lang="de">enthält alle variablen Headereinträge.</documentation>
<documentation xml:lang="en">contains the mutable header entries.</documentation>
</annotation>
</element>
</sequence>
<attributeGroup ref="ebics:AuthenticationMarker"/>
</complexType>
</element>
<element ref="ebics:AuthSignature"/>
<element name="body">
<annotation>
<documentation xml:lang="de">enthält die Auftragsdaten, EU(s) und weitere Nutzdaten.</documentation>
<documentation xml:lang="en">contains order data, order signature(s) and further data referring to the current order.</documentation>
</annotation>
<complexType>
<sequence>
<annotation>
<documentation xml:lang="de"/>
</annotation>
<element ref="ds:X509Data" minOccurs="0" maxOccurs="0">
<annotation>
<documentation xml:lang="de">X.509-Daten des Teilnehmers.</documentation>
<documentation xml:lang="en">X.509 data of the user.</documentation>
</annotation>
</element>
<choice>
<annotation>
<documentation xml:lang="de">Welche Transaktionsphase?</documentation>
<documentation xml:lang="en">Which transaction phase?</documentation>
</annotation>
<sequence>
<annotation>
<documentation xml:lang="de">Initialisierungs- und Transferphase.</documentation>
<documentation xml:lang="en">Initialisation or transfer phase.</documentation>
</annotation>
<element name="PreValidation" minOccurs="0">
<annotation>
<documentation xml:lang="de">Daten zur Vorabprüfung; nur anzugeben in der Initialisierungsphase bei Uploads mit Auftragsattribut OZH (EUs + Auftragsdaten).</documentation>
<documentation xml:lang="en">Data sent for pre-validation; mandatory for initialisation phase during uploads using order attribute OZH (order signature(s) + order data).</documentation>
</annotation>
<complexType>
<complexContent>
<extension base="ebics:PreValidationRequestType">
<attributeGroup ref="ebics:AuthenticationMarker"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="DataTransfer" type="ebics:DataTransferRequestType" minOccurs="0">
<annotation>
<documentation xml:lang="de">Transfer von Signatur- bzw. Auftragsdaten; nur bei Upload anzugeben.</documentation>
<documentation xml:lang="en">Transfer of signature or order data; mandatory for uploads only.</documentation>
</annotation>
</element>
</sequence>
<sequence>
<annotation>
<documentation xml:lang="de">Quittierungsphase nach Download.</documentation>
<documentation xml:lang="en">Receipt phase after download.</documentation>
</annotation>
<element name="TransferReceipt">
<annotation>
<documentation xml:lang="de">Quittierung des Transfers.</documentation>
<documentation xml:lang="en">Receipt of transfer.</documentation>
</annotation>
<complexType>
<complexContent>
<extension base="ebics:TransferReceiptRequestType">
<attributeGroup ref="ebics:AuthenticationMarker"/>
</extension>
</complexContent>
</complexType>
</element>
</sequence>
</choice>
</sequence>
</complexType>
</element>
</sequence>
<attributeGroup ref="ebics:VersionAttrGroup"/>
<anyAttribute namespace="##targetNamespace" processContents="strict"/>
</complexType>
</element>
<complexType name="StaticHeaderType">
<annotation>
<documentation xml:lang="de">Datentyp für den statischen EBICS-Header.</documentation>
<documentation xml:lang="en">Data type for the static EBICS header.</documentation>
</annotation>
<sequence>
<element name="HostID" type="ebics:HostIDType">
<annotation>
<documentation xml:lang="de">Hostname des Banksystems.</documentation>
</annotation>
</element>
<choice>
<annotation>
<documentation xml:lang="de">Transaktionsphase?</documentation>
<documentation xml:lang="en">Transaction phase?</documentation>
</annotation>
<sequence>
<annotation>
<documentation xml:lang="de">Initialisierungsphase.</documentation>
<documentation xml:lang="en">Initialisation phase.</documentation>
</annotation>
<element name="Nonce" type="ebics:NonceType">
<annotation>
<documentation xml:lang="de">Zufallswert; damit wird die Initialisierungsnachricht des Clients einzigartig.</documentation>
<documentation xml:lang="en">Random value, ensures the uniqueness of the client's message during initialisation phase.</documentation>
</annotation>
</element>
<element name="Timestamp" type="ebics:TimestampType">
<annotation>
<documentation xml:lang="de">aktueller Zeitstempel zur Begrenzung der serverseitigen Nonce-Speicherung.</documentation>
<documentation xml:lang="en">current timestamp, used to limit storage space for nonces on the server.</documentation>
</annotation>
</element>
<element name="PartnerID" type="ebics:PartnerIDType">
<annotation>
<documentation xml:lang="de">Kunden-ID des serverseitig administrierten Kunden.</documentation>
<documentation xml:lang="en">ID of the partner = customer, administered on the server.</documentation>
</annotation>
</element>
<element name="UserID" type="ebics:UserIDType">
<annotation>
<documentation xml:lang="de">Teilnehmer-ID des serverseitig zu diesem Kunden administrierten Teilnehmers.</documentation>
<documentation xml:lang="en">ID of the user that is assigned to the given customer, administered on the server.</documentation>
</annotation>
</element>
<element name="SystemID" type="ebics:UserIDType" minOccurs="0">
<annotation>
<documentation xml:lang="de">technische User-ID für Multi-User-Systeme.</documentation>
<documentation xml:lang="en">ID of the system for multi-user systems.</documentation>
</annotation>
</element>
<element name="Product" nillable="true" minOccurs="0">
<annotation>
<documentation xml:lang="de">Kennung des Kundenprodukts bzw. Herstellerkennung oder Name.</documentation>
<documentation xml:lang="en">software ID / manufacturer ID / manufacturer's name of the customer's software package.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:ProductType">
<attribute name="Language" type="ebics:LanguageType" use="required">
<annotation>
<documentation xml:lang="de">Sprachkennzeichen der Kundenproduktversion (gemäß ISO 639).</documentation>
<documentation xml:lang="en">Language code of the customer's software package according to ISO 639.</documentation>
</annotation>
</attribute>
<attribute name="InstituteID" type="ebics:InstituteIDType" use="optional">
<annotation>
<documentation xml:lang="de">Kennung des Herausgebers des Kundenprodukts bzw. des betreuenden Kreditinstituts.</documentation>
<documentation xml:lang="en">ID of the manufacturer / financial institute providing support for the customer's software package.</documentation>
</annotation>
</attribute>
</extension>
</simpleContent>
</complexType>
</element>
<element name="OrderDetails" type="ebics:StaticHeaderOrderDetailsType">
<annotation>
<documentation xml:lang="de">Auftragsdetails.</documentation>
<documentation xml:lang="en">order details.</documentation>
</annotation>
</element>
<element name="BankPubKeyDigests">
<annotation>
<documentation xml:lang="de">Hashwerte der erwarteten öffentlichen Schlüssel (Verschlüsselung, Signatur, Authentifikation) des Kreditinstituts.</documentation>
<documentation xml:lang="en">Digest values of the expected public keys (authentication, encryption, signature) owned by the financial institute.</documentation>
</annotation>
<complexType>
<sequence>
<element name="Authentication">
<annotation>
<documentation xml:lang="de">Hashwert des Authentifikationsschlüssels.</documentation>
<documentation xml:lang="en">Digest value of the public authentication key.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:PubKeyDigestType">
<attribute name="Version" type="ebics:AuthenticationVersionType" use="required">
<annotation>
<documentation xml:lang="de">Version des Authentifikationsverfahrens.</documentation>
<documentation xml:lang="en">Version of the algorithm used for authentication.</documentation>
</annotation>
</attribute>
</extension>
</simpleContent>
</complexType>
</element>
<element name="Encryption">
<annotation>
<documentation xml:lang="de">Hashwert des Verschlüsselungsschlüssels.</documentation>
<documentation xml:lang="en">Digest value of the public encryption key.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:PubKeyDigestType">
<attribute name="Version" type="ebics:EncryptionVersionType" use="required">
<annotation>
<documentation xml:lang="de">Version des Verschlüsselungsverfahrens.</documentation>
<documentation xml:lang="en">Version of the algorithm used for encryption.</documentation>
</annotation>
</attribute>
</extension>
</simpleContent>
</complexType>
</element>
<element name="Signature" minOccurs="0" maxOccurs="0">
<annotation>
<documentation xml:lang="de">Hashwert des Signaturschlüssels.</documentation>
<documentation xml:lang="en">Digest value of the public signature key.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:PubKeyDigestType">
<attribute name="Version" type="ebics:SignatureVersionType" use="required">
<annotation>
<documentation xml:lang="de">Version des Signaturverfahrens.</documentation>
<documentation xml:lang="en">Version of the algorithm used for signature creation.</documentation>
</annotation>
</attribute>
</extension>
</simpleContent>
</complexType>
</element>
</sequence>
</complexType>
</element>
<element name="SecurityMedium" type="ebics:SecurityMediumType">
<annotation>
<documentation xml:lang="de">Angabe des Sicherheitsmediums, das der Kunde verwendet.</documentation>
<documentation xml:lang="en">Classification of the security medium used by the customer.</documentation>
</annotation>
</element>
<element name="NumSegments" type="ebics:NumSegmentsType" minOccurs="0">
<annotation>
<documentation xml:lang="de">Gesamtsegmentanzahl für diese Transaktion; nur bei Uploads anzugeben.</documentation>
<documentation xml:lang="en">Total number of segments for this transaction; mandatory for uploads only.</documentation>
</annotation>
</element>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<sequence>
<annotation>
<documentation xml:lang="de">Transfer- und Quittierungsphase.</documentation>
<documentation xml:lang="en">Transfer or receipt phase.</documentation>
</annotation>
<element name="TransactionID" type="ebics:TransactionIDType">
<annotation>
<documentation xml:lang="de">eindeutige, technische Transaktions-ID; wird vom Server vergeben.</documentation>
<documentation xml:lang="en">unique transaction ID, provided by the server.</documentation>
</annotation>
</element>
</sequence>
</choice>
</sequence>
</complexType>
<complexType name="MutableHeaderType">
<annotation>
<documentation xml:lang="de">Datentyp für den variablen EBICS-Header.</documentation>
<documentation xml:lang="en">Data type for the mutable EBICS header.</documentation>
</annotation>
<sequence>
<element name="TransactionPhase" type="ebics:TransactionPhaseType">
<annotation>
<documentation xml:lang="de">Phase, in der sich die Transaktion gerade befindet; wird bei jedem Transaktionsschritt vom Client gesetzt und vom Server übernommen.</documentation>
<documentation xml:lang="en">Current phase of the transaction; this information is provided by the client for each step of the transaction, and the server adopts the setting.</documentation>
</annotation>
</element>
<element name="SegmentNumber" nillable="true" minOccurs="0">
<annotation>
<documentation xml:lang="de">enthält die Nummer des aktuellen Segments, welches gerade übertragen oder angefordert wird; nur anzugeben bei TransactionPhase=Transfer.</documentation>
<documentation xml:lang="en">contains the number of the segment which is currently being transmitted or requested; mandatory for transaction phase 'Transfer' only.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:SegmentNumberType">
<attribute name="lastSegment" type="boolean" use="required">
<annotation>
<documentation xml:lang="de">Ist dies das letzte Segment der Übertragung?</documentation>
<documentation xml:lang="en">Is this segment meant to be the last one regarding this transmission?</documentation>
</annotation>
</attribute>
</extension>
</simpleContent>
</complexType>
</element>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="StaticHeaderOrderDetailsType">
<annotation>
<documentation xml:lang="de">Datentyp für Auftragsdetails im statischen EBICS-Header.</documentation>
<documentation xml:lang="en">Data type for order details stored in the static EBICS header.</documentation>
</annotation>
<sequence>
<element name="OrderType">
<annotation>
<documentation xml:lang="de">Auftragsart.</documentation>
<documentation xml:lang="en">type code of the order.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:OrderTBaseType"/>
</simpleContent>
</complexType>
</element>
<element name="OrderID" type="ebics:OrderIDType" minOccurs="0">
<annotation>
<documentation xml:lang="de">Auftragsnummer für Sendeaufträge gemäß DFÜ-Abkommen.</documentation>
<documentation xml:lang="en">ID of the (upload) order, formatted in accordance with the document "DFÜ-Abkommen".</documentation>
</annotation>
</element>
<element name="OrderAttribute" type="ebics:OrderAttributeType">
<annotation>
<documentation xml:lang="de">Auftragsattribut.</documentation>
<documentation xml:lang="en">attribute describing the order contents.</documentation>
</annotation>
</element>
<element ref="ebics:OrderParams"/>
</sequence>
</complexType>
</schema>

166
test/xsd/ebics_response_H004.xsd Executable file
View File

@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ebics="urn:org:ebics:H004" targetNamespace="urn:org:ebics:H004" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<annotation>
<documentation xml:lang="de">ebics_response_H004.xsd ist das EBICS-Protokollschema für Antwortnachrichten.</documentation>
<documentation xml:lang="en">ebics_response_H004.xsd is the appropriate EBICS protocol schema for standard responses.</documentation>
</annotation>
<import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd">
<annotation>
<documentation xml:lang="de">XML-Signature.</documentation>
</annotation>
</import>
<include schemaLocation="ebics_types_H004.xsd"/>
<include schemaLocation="ebics_orders_H004.xsd"/>
<element name="ebicsResponse">
<annotation>
<documentation xml:lang="de">Electronic Banking Internet Communication Standard des Zentralen Kreditausschusses (ZKA): Multibankfähige Schnittstelle zur internetbasierten Kommunikation.</documentation>
<documentation xml:lang="en">Electronic Banking Internet Communication Standard of the "Zentraler Kreditausschuss (ZKA)": multi-bank capable interface for internet-based communication.</documentation>
</annotation>
<complexType>
<sequence>
<element name="header">
<annotation>
<documentation xml:lang="de">enthält die technischen Transaktionsdaten.</documentation>
<documentation xml:lang="en">contains the transaction-driven data.</documentation>
</annotation>
<complexType>
<sequence>
<element name="static" type="ebics:ResponseStaticHeaderType">
<annotation>
<documentation xml:lang="de">enhält alle festen Headereinträge.</documentation>
<documentation xml:lang="en">contains the static header entries.</documentation>
</annotation>
</element>
<element name="mutable" type="ebics:ResponseMutableHeaderType">
<annotation>
<documentation xml:lang="de">enthält alle variablen Headereinträge.</documentation>
<documentation xml:lang="en">contains the mutable header entries.</documentation>
</annotation>
</element>
</sequence>
<attributeGroup ref="ebics:AuthenticationMarker"/>
</complexType>
</element>
<element ref="ebics:AuthSignature">
<annotation>
<documentation xml:lang="de">Authentifikationssignatur.</documentation>
<documentation xml:lang="en">Authentication signature.</documentation>
</annotation>
</element>
<element name="body">
<annotation>
<documentation xml:lang="de">enthält die Auftragsdaten, EU(s) und weitere Nutzdaten.</documentation>
<documentation xml:lang="en">contains order data, order signature(s) and further data referring to the current order.</documentation>
</annotation>
<complexType>
<sequence>
<element name="DataTransfer" type="ebics:DataTransferResponseType" minOccurs="0">
<annotation>
<documentation xml:lang="de">Transfer von Auftragsdaten; nur bei Download anzugeben.</documentation>
<documentation xml:lang="en">Transfer of signature or order data; mandatory for downloads only.</documentation>
</annotation>
</element>
<element name="ReturnCode">
<annotation>
<documentation xml:lang="de">fachlicher Antwortcode für den vorangegangenen Request.</documentation>
<documentation xml:lang="en">order-related return code of the previous request.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:ReturnCodeType">
<attributeGroup ref="ebics:AuthenticationMarker"/>
</extension>
</simpleContent>
</complexType>
</element>
<element name="TimestampBankParameter" minOccurs="0">
<annotation>
<documentation xml:lang="de">Zeitstempel der letzten Aktualisierung der Bankparameter; nur in der Initialisierungsphase anzugeben.</documentation>
<documentation xml:lang="en">timestamp indicating the latest update of the bank parameters; may be set during initialisation phase only.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:TimestampType">
<attributeGroup ref="ebics:AuthenticationMarker"/>
</extension>
</simpleContent>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
<attributeGroup ref="ebics:VersionAttrGroup"/>
<anyAttribute namespace="##targetNamespace" processContents="strict"/>
</complexType>
</element>
<complexType name="ResponseStaticHeaderType">
<annotation>
<documentation xml:lang="de">Datentyp für den statischen EBICS-Header.</documentation>
<documentation xml:lang="en">Data type for the static EBICS header.</documentation>
</annotation>
<sequence>
<element name="TransactionID" type="ebics:TransactionIDType" minOccurs="0">
<annotation>
<documentation xml:lang="de">eindeutige, technische Transaktions-ID; wird vom Server vergeben, falls OrderAttribute entweder gleich "OZHNN" oder gleich "DZHNN" ist und falls tatsächlich eine Transaktion erzeugt wurde.</documentation>
<documentation xml:lang="en">unique transaction ID, provided by the server if and only if the order attribute is set to either "OZHNN" or "DZHNN" and if a transaction has been established actually.</documentation>
</annotation>
</element>
<element name="NumSegments" type="ebics:SegmentNumberType" minOccurs="0">
<annotation>
<documentation xml:lang="de">Gesamtsegmentanzahl für diese Transaktion; nur bei Downloads in der Initialisierungsphase anzugeben.</documentation>
<documentation xml:lang="en">Total number of segments for this transaction; mandatory for downloads in initialisation phase only.</documentation>
</annotation>
</element>
</sequence>
</complexType>
<complexType name="ResponseMutableHeaderType">
<annotation>
<documentation xml:lang="de">Datentyp für den variablen EBICS-Header.</documentation>
<documentation xml:lang="en">Data type for the mutable EBICS header.</documentation>
</annotation>
<sequence>
<element name="TransactionPhase" type="ebics:TransactionPhaseType">
<annotation>
<documentation xml:lang="de">Phase, in der sich die Transaktion gerade befindet; wird bei jedem Transaktionsschritt vom Client gesetzt und vom Server übernommen.</documentation>
<documentation xml:lang="en">Current phase of the transaction; this information is provided by the client for each step of the transaction, and the server adopts the setting.</documentation>
</annotation>
</element>
<element name="SegmentNumber" minOccurs="0">
<annotation>
<documentation xml:lang="de">enthält die Nummer des aktuellen Segments, welches gerade übertragen oder angefordert wird; nur anzugeben bei TransactionPhase=Transfer und (bei Download) TransactionPhase=Initialisation.</documentation>
<documentation xml:lang="en">contains the number of the segment which is currently being transmitted or requested; mandatory for transaction phases 'Transfer' and (for downloads) 'Initialisation' only.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="ebics:SegmentNumberType">
<attribute name="lastSegment" type="boolean" use="required">
<annotation>
<documentation xml:lang="de">Ist dies das letzte Segment der Übertragung?</documentation>
</annotation>
</attribute>
</extension>
</simpleContent>
</complexType>
</element>
<element name="OrderID" type="ebics:OrderIDType" minOccurs="0">
<annotation>
<documentation xml:lang="de">Auftragsnummer von Sendeaufträgen gemäß DFÜ-Abkommen.</documentation>
</annotation>
</element>
<element name="ReturnCode" type="ebics:ReturnCodeType">
<annotation>
<documentation xml:lang="de">Rückmeldung des technischen Status mit einer eindeutigen Fehlernummer.</documentation>
<documentation xml:lang="en">Return code indicating the technical status.</documentation>
</annotation>
</element>
<element name="ReportText" type="ebics:ReportTextType">
<annotation>
<documentation xml:lang="de">Klartext der Rückmeldung des technischen Status.</documentation>
<documentation xml:lang="en">Textual interpretation of the returned technical status code.</documentation>
</annotation>
</element>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
</schema>

217
test/xsd/ebics_signature.xsd Executable file
View File

@@ -0,0 +1,217 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:esig="http://www.ebics.org/S001" targetNamespace="http://www.ebics.org/S001" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
<annotation>
<documentation xml:lang="de">ebics_signature enthält Typdefinitionen für elektronische Unterschriften der Versionen A004, A005, A006 und folgende.</documentation>
<documentation xml:lang="en">ebics_EU contains type definitions for electronic signatures: versions A005, A006 and et sqq.</documentation>
</annotation>
<!-- Elementdefinitionen für die EU. Die XML-Klartext-Struktur wird im EBICS-Signaturdatenkontext binär interpretiert.-->
<element name="EBICSSignatureData" abstract="true">
<annotation>
<documentation xml:lang="de">XML-Strukturen für bankfachliche Elektronische Unterschriften (EUs).</documentation>
<documentation xml:lang="en">contains the digital signatures.</documentation>
</annotation>
</element>
<element name="UserSignatureData" type="esig:UserSignatureDataSigBookType" substitutionGroup="esig:EBICSSignatureData">
<annotation>
<documentation xml:lang="de">enthält die EUs der Teilnehmer.</documentation>
<documentation xml:lang="en">contains the digital signatures.</documentation>
</annotation>
</element>
<complexType name="UserSignatureDataSigBookType">
<annotation>
<documentation xml:lang="de">Datentyp für Signaturdaten des Teilnehmers beim EU-Transfer.</documentation>
<documentation xml:lang="en">Data type for digital signature data transferred using EBICS.</documentation>
</annotation>
<sequence>
<choice maxOccurs="unbounded">
<element name="OrderSignature">
<annotation>
<documentation xml:lang="de">bankfachliche Elektronische Unterschrift oder Transportunterschrift (Binärformat).</documentation>
<documentation xml:lang="en">Digital signature (either autorising an order or applied for transportation), binary format.</documentation>
</annotation>
<complexType>
<simpleContent>
<extension base="esig:OrderSignatureType">
<attribute name="PartnerID" use="required">
<annotation>
<documentation xml:lang="de">Kunden-ID des Unterzeichners.</documentation>
<documentation xml:lang="en">Customer ID of the signer.</documentation>
</annotation>
</attribute>
</extension>
</simpleContent>
</complexType>
</element>
<element name="OrderSignatureData" type="esig:OrderSignatureDataType">
<annotation>
<documentation xml:lang="de">bankfachliche Elektronische Unterschrift oder Transportunterschrift (strukturiertes Format).</documentation>
<documentation xml:lang="en">Digital signature (either autorising an order or applied for transportation), structured format.</documentation>
</annotation>
</element>
</choice>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<simpleType name="OrderSignatureType">
<annotation>
<documentation xml:lang="de">Datentyp für kryptographische Unterschriften.</documentation>
</annotation>
<restriction base="base64Binary"/>
</simpleType>
<element name="OrderSignatureData" type="esig:OrderSignatureDataType">
<annotation>
<documentation xml:lang="de">bankfachliche Elektronische Unterschrift oder Transportunterschrift (strukturiertes Format).</documentation>
<documentation xml:lang="en">Digital signature (either autorising an order or applied for transportation), structured format.</documentation>
</annotation>
</element>
<complexType name="OrderSignatureDataType">
<annotation>
<documentation xml:lang="de">Datentyp für bankfachliche Elektronische Unterschrift oder Transportunterschrift (strukturiertes Format).</documentation>
<documentation xml:lang="en">Data type according for a digital signature (either autorising an order or applied for transportation), structured format.</documentation>
</annotation>
<sequence>
<element name="SignatureVersion" type="esig:SignatureVersionType">
<annotation>
<documentation xml:lang="de">Version des Signaturverfahrens.</documentation>
<documentation xml:lang="en">Version of the algorithm used for signature creation.</documentation>
</annotation>
</element>
<element name="SignatureValue" type="base64Binary">
<annotation>
<documentation xml:lang="de">Digitale Signatur.</documentation>
<documentation xml:lang="en">Digital signature.</documentation>
</annotation>
</element>
<element name="PartnerID" type="esig:PartnerIDType">
<annotation>
<documentation xml:lang="de">Kunden-ID des Unterzeichners.</documentation>
<documentation xml:lang="en">Customer ID of the signer.</documentation>
</annotation>
</element>
<element name="UserID" type="esig:UserIDType">
<annotation>
<documentation xml:lang="de">Teilnehmer-ID.</documentation>
<documentation xml:lang="en">User ID.</documentation>
</annotation>
</element>
<element ref="ds:X509Data" minOccurs="0">
<annotation>
<documentation xml:lang="de">Parameter zur X.509-Funktionalität</documentation>
<documentation xml:lang="en">Parameter for X509Data</documentation>
</annotation>
</element>
</sequence>
</complexType>
<simpleType name="PartnerIDType">
<annotation>
<documentation xml:lang="de">Datentyp für eine Kunden-ID.</documentation>
</annotation>
<restriction base="token">
<maxLength value="35"/>
</restriction>
</simpleType>
<simpleType name="UserIDType">
<annotation>
<documentation xml:lang="de">Datentyp für eine Teilnehmer-ID.</documentation>
</annotation>
<restriction base="token">
<maxLength value="35"/>
</restriction>
</simpleType>
<simpleType name="SignatureVersionType">
<annotation>
<documentation xml:lang="de">Datentyp für Versionsnummern zur Elektronischen Unterschrift (EU).</documentation>
</annotation>
<restriction base="token">
<length value="4"/>
<pattern value="A\d{3}"/>
</restriction>
</simpleType>
<!-- Definitionen für die Uebertragung von oeffentlichen Signierschlüsseln. z.B. ueber EBICS mit INI, PUB, HCS.-->
<element name="SignaturePubKeyOrderData" type="esig:SignaturePubKeyOrderDataType">
<annotation>
<documentation xml:lang="de">Element für Public Key Dateien unabhängig von der Auftragsart / Geschäftsvorfall.</documentation>
</annotation>
</element>
<complexType name="SignaturePubKeyOrderDataType">
<annotation>
<documentation xml:lang="de">Datentyp für Public Key Dateien unabhängig von der Auftragsart / Geschäftsvorfall.</documentation>
</annotation>
<sequence>
<element name="SignaturePubKeyInfo" type="esig:SignaturePubKeyInfoType">
<annotation>
<documentation xml:lang="de">öffentlicher Signaturschlüssel.</documentation>
</annotation>
</element>
<element name="PartnerID" type="esig:PartnerIDType">
<annotation>
<documentation xml:lang="de">Kunden-ID.</documentation>
</annotation>
</element>
<element name="UserID" type="esig:UserIDType">
<annotation>
<documentation xml:lang="de">Teilnehmer-ID.</documentation>
</annotation>
</element>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<element name="SignaturePubKeyInfo" type="esig:SignaturePubKeyInfoType">
<annotation>
<documentation xml:lang="de">öffentlicher Signaturschlüssel.</documentation>
</annotation>
</element>
<complexType name="SignaturePubKeyInfoType">
<annotation>
<documentation xml:lang="de">Datentyp für öffentliche bankfachliche Schlüssel.</documentation>
</annotation>
<complexContent>
<extension base="esig:PubKeyInfoType">
<sequence>
<element name="SignatureVersion" type="esig:SignatureVersionType">
<annotation>
<documentation xml:lang="de">Version des EU-Signaturverfahrens.</documentation>
</annotation>
</element>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PubKeyInfoType">
<annotation>
<documentation xml:lang="de">Datentyp für die Darstellung eines öffentlichen RSA-Schlüssels als Exponent-Modulus-Kombination oder als X509-Zertifikat.</documentation>
</annotation>
<sequence>
<sequence>
<element ref="ds:X509Data" minOccurs="0"/>
<element name="PubKeyValue" type="esig:PubKeyValueType">
<annotation>
<documentation xml:lang="de">Darstellung als Exponent-Modulus-Kombination.</documentation>
</annotation>
</element>
</sequence>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="PubKeyValueType">
<annotation>
<documentation xml:lang="de">Datentyp für die Exponent-Modulus-Darstellung eines öffentlichen RSA-Schlüssels.</documentation>
</annotation>
<sequence>
<element ref="ds:RSAKeyValue"/>
<element name="TimeStamp" type="esig:TimestampType" minOccurs="0">
<annotation>
<documentation xml:lang="de">Zeitpunkt der Generierung des Schlüssels.</documentation>
</annotation>
</element>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<simpleType name="TimestampType">
<annotation>
<documentation xml:lang="de">Datentyp für Zeitstempel.</documentation>
</annotation>
<restriction base="dateTime"/>
</simpleType>
</schema>

2426
test/xsd/ebics_types_H004.xsd Executable file

File diff suppressed because it is too large Load Diff

7
test/xsd/test.xsd Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ebics="urn:org:ebics:H004" targetNamespace="urn:org:ebics:H004" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<annotation>
<documentation xml:lang="de">ebics_H004.xsd inkludiert alle Schemadateien des EBICS-Protokolls, um die Eindeutigkeit von Element- und Typnamen im EBCIS Namespace zu erzwingen.</documentation>
<documentation xml:lang="en">ebics_H004.xsd includes all schema files for the EBICS protocol in order to enforce unique element and type names in the EBICS namespace.</documentation>
</annotation>
</schema>

318
test/xsd/xmldsig-core-schema.xsd Executable file
View File

@@ -0,0 +1,318 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE schema
PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd"
[
<!ATTLIST schema
xmlns:ds CDATA #FIXED "http://www.w3.org/2000/09/xmldsig#">
<!ENTITY dsig 'http://www.w3.org/2000/09/xmldsig#'>
<!ENTITY % p ''>
<!ENTITY % s ''>
]>
<!-- Schema for XML Signatures
http://www.w3.org/2000/09/xmldsig#
$Revision: 1.1 $ on $Date: 2002/02/08 20:32:26 $ by $Author: reagle $
Copyright 2001 The Internet Society and W3C (Massachusetts Institute
of Technology, Institut National de Recherche en Informatique et en
Automatique, Keio University). All Rights Reserved.
http://www.w3.org/Consortium/Legal/
This document is governed by the W3C Software License [1] as described
in the FAQ [2].
[1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
[2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
targetNamespace="http://www.w3.org/2000/09/xmldsig#"
version="0.1" elementFormDefault="qualified">
<!-- Basic Types Defined for Signatures -->
<simpleType name="CryptoBinary">
<restriction base="base64Binary">
</restriction>
</simpleType>
<!-- Start Signature -->
<element name="Signature" type="ds:SignatureType"/>
<complexType name="SignatureType">
<sequence>
<element ref="ds:SignedInfo"/>
<element ref="ds:SignatureValue"/>
<element ref="ds:KeyInfo" minOccurs="0"/>
<element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureValue" type="ds:SignatureValueType"/>
<complexType name="SignatureValueType">
<simpleContent>
<extension base="base64Binary">
<attribute name="Id" type="ID" use="optional"/>
</extension>
</simpleContent>
</complexType>
<!-- Start SignedInfo -->
<element name="SignedInfo" type="ds:SignedInfoType"/>
<complexType name="SignedInfoType">
<sequence>
<element ref="ds:CanonicalizationMethod"/>
<element ref="ds:SignatureMethod"/>
<element ref="ds:Reference" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/>
<complexType name="CanonicalizationMethodType" mixed="true">
<sequence>
<any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
<!-- (0,unbounded) elements from (1,1) namespace -->
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<element name="SignatureMethod" type="ds:SignatureMethodType"/>
<complexType name="SignatureMethodType" mixed="true">
<sequence>
<element name="HMACOutputLength" minOccurs="0" type="ds:HMACOutputLengthType"/>
<any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
<!-- (0,unbounded) elements from (1,1) external namespace -->
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<!-- Start Reference -->
<element name="Reference" type="ds:ReferenceType"/>
<complexType name="ReferenceType">
<sequence>
<element ref="ds:Transforms" minOccurs="0"/>
<element ref="ds:DigestMethod"/>
<element ref="ds:DigestValue"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
<attribute name="URI" type="anyURI" use="optional"/>
<attribute name="Type" type="anyURI" use="optional"/>
</complexType>
<element name="Transforms" type="ds:TransformsType"/>
<complexType name="TransformsType">
<sequence>
<element ref="ds:Transform" maxOccurs="unbounded"/>
</sequence>
</complexType>
<element name="Transform" type="ds:TransformType"/>
<complexType name="TransformType" mixed="true">
<choice minOccurs="0" maxOccurs="unbounded">
<any namespace="##other" processContents="lax"/>
<!-- (1,1) elements from (0,unbounded) namespaces -->
<element name="XPath" type="string"/>
</choice>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<!-- End Reference -->
<element name="DigestMethod" type="ds:DigestMethodType"/>
<complexType name="DigestMethodType" mixed="true">
<sequence>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<element name="DigestValue" type="ds:DigestValueType"/>
<simpleType name="DigestValueType">
<restriction base="base64Binary"/>
</simpleType>
<!-- End SignedInfo -->
<!-- Start KeyInfo -->
<element name="KeyInfo" type="ds:KeyInfoType"/>
<complexType name="KeyInfoType" mixed="true">
<choice maxOccurs="unbounded">
<element ref="ds:KeyName"/>
<element ref="ds:KeyValue"/>
<element ref="ds:RetrievalMethod"/>
<element ref="ds:X509Data"/>
<element ref="ds:PGPData"/>
<element ref="ds:SPKIData"/>
<element ref="ds:MgmtData"/>
<any processContents="lax" namespace="##other"/>
<!-- (1,1) elements from (0,unbounded) namespaces -->
</choice>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="KeyName" type="string"/>
<element name="MgmtData" type="string"/>
<element name="KeyValue" type="ds:KeyValueType"/>
<complexType name="KeyValueType" mixed="true">
<choice>
<element ref="ds:DSAKeyValue"/>
<element ref="ds:RSAKeyValue"/>
<any namespace="##other" processContents="lax"/>
</choice>
</complexType>
<element name="RetrievalMethod" type="ds:RetrievalMethodType"/>
<complexType name="RetrievalMethodType">
<sequence>
<element ref="ds:Transforms" minOccurs="0"/>
</sequence>
<attribute name="URI" type="anyURI"/>
<attribute name="Type" type="anyURI" use="optional"/>
</complexType>
<!-- Start X509Data -->
<element name="X509Data" type="ds:X509DataType"/>
<complexType name="X509DataType">
<sequence maxOccurs="unbounded">
<choice>
<element name="X509IssuerSerial" type="ds:X509IssuerSerialType"/>
<element name="X509SKI" type="base64Binary"/>
<element name="X509SubjectName" type="string"/>
<element name="X509Certificate" type="base64Binary"/>
<element name="X509CRL" type="base64Binary"/>
<any namespace="##other" processContents="lax"/>
</choice>
</sequence>
</complexType>
<complexType name="X509IssuerSerialType">
<sequence>
<element name="X509IssuerName" type="string"/>
<element name="X509SerialNumber" type="integer"/>
</sequence>
</complexType>
<!-- End X509Data -->
<!-- Begin PGPData -->
<element name="PGPData" type="ds:PGPDataType"/>
<complexType name="PGPDataType">
<choice>
<sequence>
<element name="PGPKeyID" type="base64Binary"/>
<element name="PGPKeyPacket" type="base64Binary" minOccurs="0"/>
<any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
<sequence>
<element name="PGPKeyPacket" type="base64Binary"/>
<any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
</choice>
</complexType>
<!-- End PGPData -->
<!-- Begin SPKIData -->
<element name="SPKIData" type="ds:SPKIDataType"/>
<complexType name="SPKIDataType">
<sequence maxOccurs="unbounded">
<element name="SPKISexp" type="base64Binary"/>
<any namespace="##other" processContents="lax" minOccurs="0"/>
</sequence>
</complexType>
<!-- End SPKIData -->
<!-- End KeyInfo -->
<!-- Start Object (Manifest, SignatureProperty) -->
<element name="Object" type="ds:ObjectType"/>
<complexType name="ObjectType" mixed="true">
<sequence minOccurs="0" maxOccurs="unbounded">
<any namespace="##any" processContents="lax"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
<attribute name="MimeType" type="string" use="optional"/> <!-- add a grep facet -->
<attribute name="Encoding" type="anyURI" use="optional"/>
</complexType>
<element name="Manifest" type="ds:ManifestType"/>
<complexType name="ManifestType">
<sequence>
<element ref="ds:Reference" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureProperties" type="ds:SignaturePropertiesType"/>
<complexType name="SignaturePropertiesType">
<sequence>
<element ref="ds:SignatureProperty" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureProperty" type="ds:SignaturePropertyType"/>
<complexType name="SignaturePropertyType" mixed="true">
<choice maxOccurs="unbounded">
<any namespace="##other" processContents="lax"/>
<!-- (1,1) elements from (1,unbounded) namespaces -->
</choice>
<attribute name="Target" type="anyURI" use="required"/>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<!-- End Object (Manifest, SignatureProperty) -->
<!-- Start Algorithm Parameters -->
<simpleType name="HMACOutputLengthType">
<restriction base="integer"/>
</simpleType>
<!-- Start KeyValue Element-types -->
<element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
<complexType name="DSAKeyValueType">
<sequence>
<sequence minOccurs="0">
<element name="P" type="ds:CryptoBinary"/>
<element name="Q" type="ds:CryptoBinary"/>
</sequence>
<element name="G" type="ds:CryptoBinary" minOccurs="0"/>
<element name="Y" type="ds:CryptoBinary"/>
<element name="J" type="ds:CryptoBinary" minOccurs="0"/>
<sequence minOccurs="0">
<element name="Seed" type="ds:CryptoBinary"/>
<element name="PgenCounter" type="ds:CryptoBinary"/>
</sequence>
</sequence>
</complexType>
<element name="RSAKeyValue" type="ds:RSAKeyValueType"/>
<complexType name="RSAKeyValueType">
<sequence>
<element name="Modulus" type="ds:CryptoBinary"/>
<element name="Exponent" type="ds:CryptoBinary"/>
</sequence>
</complexType>
<!-- End KeyValue Element-types -->
<!-- End Signature -->
</schema>