Hi,
We are having some problems with segfaulting when an XML string fails
validation within eval block. I tried taking a look at it myself, but I
lost my way in XML::Xerces::Parser. Anyway, I'm sending attached a small
script, input file with the offending XML and the dtd. I run it as "cat
segfault.xml | perl xerces_test.pl".
XML::Xerces version is 1.7.0_1, with corresponding libxerces-c1_7_0.so
Perl details are:
Summary of my perl5 (revision 5.0 version 6 subversion 1) configuration:
Platform:
osname=linux, osvers=2.4.13, archname=i386-linux
uname='linux duende 2.4.13 #1 wed oct 31 19:18:07 est 2001 i686
unknown '
config_args='-Dccflags=-DDEBIAN -Dcccdlflags=-fPIC
-Darchname=i386-linux -Dprefix=/usr -Dprivlib=/usr/share/perl/5.6.1
-Darchlib=/usr/lib/perl/5.6.1 -Dvendorprefix=/usr
-Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5
-Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.6.1
-Dsitearch=/usr/local/lib/perl/5.6.1 -Dman1dir=/usr/share/man/man1
-Dman3dir=/usr/share/man/man3 -Dman1ext=1 -Dman3ext=3perl
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Duseshrplib
-Dlibperl=libperl.so.5.6.1 -Dd_dosuid -des'
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
useperlio=undef d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
Compiler:
cc='cc', ccflags ='-DDEBIAN -fno-strict-aliasing
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O2',
cppflags='-DDEBIAN -fno-strict-aliasing -I/usr/local/include'
ccversion='', gccversion='2.95.4 (Debian prerelease)', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=4, usemymalloc=n, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lgdbm -ldb -ldl -lm -lc -lcrypt
perllibs=-ldl -lm -lc -lcrypt
libc=/lib/libc-2.2.4.so, so=so, useshrplib=true,
libperl=libperl.so.5.6.1
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
Characteristics of this binary (from libperl):
Compile-time options: USE_LARGE_FILES
Built under linux
Compiled at Jan 11 2002 04:09:18
%ENV:
PERL5LIB="/home/srdjan/srs/dev/registrar/lib/perl5:/home/srdjan/srs/dev/lib/perl5"
@INC:
/home/srdjan/srs/dev/registrar/lib/perl5
/home/srdjan/srs/dev/lib/perl5
/usr/local/lib/perl/5.6.1
/usr/local/share/perl/5.6.1
/usr/lib/perl5
/usr/share/perl5
/usr/lib/perl/5.6.1
/usr/share/perl/5.6.1
/usr/local/lib/site_perl
/usr/local/share/perl/5.6.0
.
Thanks,
Srdjan Jankovic
CatalystIT Ltd
<!DOCTYPE NZSRSRequest SYSTEM "protocol.dtd"><NZSRSRequest RegistrarId="50" VerMajor="1" VerMinor="0"><DomainUpdate ActionId= "s3c4a-1 16.08.02 11.40" Delegate= "0" RegistrantRef= "s3c4a" Term = "24" ><DomainNameFilter>srstestc1.co.nz</DomainNameFilter><AdminContact Name= "Admin 9.1.3.C4a" ></AdminContact><TechnicalContact Email= "[EMAIL PROTECTED]" > /></TechnicalContact><NameServers><Server FQDN= "srstests3c4a-1.net.nz" IP4Addr= "204.180.64.9" /><Server FQDN= "srstests3c4a-2.net.nz " IP4Addr= "" /></NameServers></DomainUpdate></NZSRSRequest>
<!-- nzsrs.dtd: DTD for NZ Shared Registry System Protocol
Author: Ewen McNeill <[EMAIL PROTECTED]>
Version: $Id: protocol.dtd,v 1.48 2002/08/15 20:52:08 srdjan Exp $
Revised: 2002/03/05
Notes: This should probably be redone as an XML Schema,
where some more of the constraints can be stated.
But this is probably best left until the prototype
has been completed and the protocol finalised. -->
<!-- The NZ SRS registrar/registry protocol consists of an (externally)
signed XML request document containing a series of actions to be
performed on the register (updating it, or extracting information
from it), which is answered by an (externally) signed XML response
document containing answers to each of those actions, or an overall
error message.
Each action has its own element to specify that action, and there
is also a response element which is used to enclose each response
to an action.
Each update-type action has an id number which is the registrar's
identification for the action, which must be unique in all requests
made to the register by that registrar. The status of each action
with an id number can be queried with the "getmsg" action.
There is a major/minor version number for the nzsrs registrar/
registry protocol, which is currently fixed at 0.2. Any change
to the protocol should increment the verminor attribute. Any
change that is not backwards compatible in both directions
(ie registrar to registry AND registry to registrar) should
increment the vermajor attribute.
The registrar internally is the effective registrar of the
transaction. This must normally match the registrar UID specified
externally. However the registry may set this to a specific
registrar other than its own "psuedo registrar" to perform actions
"as if" it was that registrar, eg filter by that registrar.
It is also included to assist debugging (by allowing network streams
to be more directly linked to the registrar). -->
<!-- == Common entities ==================================================== -->
<!-- Simple data types -->
<!ENTITY % Number "CDATA" >
<!ENTITY % NumberFilter "CDATA" >
<!ENTITY % Dollars "CDATA" >
<!ENTITY % True "1" >
<!ENTITY % False "0" >
<!ENTITY % Boolean "(%False;|%True;)" >
<!-- Valid date -->
<!ENTITY % Date "Year %Number; #REQUIRED
Month %Number; #REQUIRED
Day %Number; #REQUIRED" >
<!-- Valid time -->
<!ENTITY % Time "Hour %Number; #REQUIRED
Minute %Number; #REQUIRED
Second %Number; #IMPLIED " >
<!ENTITY % TimeStamp "%Date; %Time;" >
<!-- Valid domain name -->
<!ENTITY % DomainName "CDATA" >
<!-- Valid unique identifier ? -->
<!ENTITY % UID "CDATA" >
<!-- Valid term (in ?) -->
<!ENTITY % Term "%Number;" >
<!ENTITY % RegistrarId "%Number;" >
<!-- ENTITY % RegistrarIdOrOTHERS %RegistrarId;|"OTHERS" -->
<!ENTITY % RegistrarIdOrOTHERS "CDATA" >
<!-- Complex data types/definitions -->
<!ENTITY % DomainWriteAction "DomainCreate|DomainUpdate" >
<!ENTITY % DomainQueryAction "Whois|DomainDetailsQry|ActionDetailsQry|
UDAIValidQry" >
<!ENTITY % RegistrarWriteAction "RegistrarCreate|RegistrarUpdate" >
<!ENTITY % RegistrarQueryAction "RegistrarDetailsQry|RegistrarAccountQry|
GetMessages" >
<!ENTITY % RegistryAction "SysParamsUpdate|SysParamsQry|
RunLogCreate|RunLogQry|
ScheduleCreate|ScheduleCancel|
ScheduleQry" >
<!ENTITY % Action "%DomainWriteAction;|%DomainQueryAction;|
%RegistrarWriteAction;|%RegistrarQueryAction;|
%RegistryAction;|DomainTransfer" >
<!ENTITY % ActionResponse "Error|Domain*|UDAIValid|DomainTransfer|
BillingTrans*|
Registrar*|SysParam*|RunLog*|Schedule" >
<!ENTITY % RegDomainStatus "Active|PendingRelease" >
<!ENTITY % DomainStatus "%RegDomainStatus;|Available" >
<!ENTITY % BillStatus "PendingConfirmation|Confirmed" >
<!ENTITY % Contact "PostalAddress?,Phone?,Fax?" >
<!ENTITY % ContactAttr "Name CDATA #IMPLIED
Email CDATA #IMPLIED " >
<!ENTITY % PhoneAttr "CountryCode %NumberFilter; #IMPLIED
AreaCode %NumberFilter; #IMPLIED
LocalNumber %NumberFilter; #IMPLIED "
>
<!ENTITY % Roles "Registrar|Registry|Whois|Query|
CreateDomain|UpdateDomain|TransferDomain|
CancelDomain|UncancelDomain|
UpdateRegistrar|Administer|Supervisor|Connect" >
<!ENTITY % DateRange "From|To|(From,To)" >
<!-- == Root element ======================================================= -->
<!ELEMENT NZSRSRequest ((%Action;)+) >
<!ATTLIST NZSRSRequest
VerMajor (1) #REQUIRED
VerMinor (0) #REQUIRED
RegistrarId %RegistrarId; #IMPLIED >
<!ELEMENT NZSRSResponse (Response+|Error) >
<!ATTLIST NZSRSResponse
VerMajor (1) #REQUIRED
VerMinor (0) #REQUIRED
RegistrarId %RegistrarId; #IMPLIED >
<!-- == Request actions ==================================================== -->
<!-- ++ Domain details update actions ++++++++++++++++++++++++++++++++++++++ -->
<!-- Create new domain name (record)
ActionResponse: (Domain|Error) -->
<!ELEMENT DomainCreate (RegistrantContact,AdminContact?,TechnicalContact?,
NameServers?,AuditText?) >
<!ATTLIST DomainCreate
ActionId %UID; #REQUIRED
DomainName %DomainName; #REQUIRED
RegistrantRef %UID; #IMPLIED
Term %Term; #REQUIRED
Delegate %Boolean; "1" >
<!-- Update domain record
Usage:
- update all domain records that match DomainNameFilter
pattern (? replaces a single character, * replaces a group of characters);
not all updates are possible (sensible)
Following actions are invoked by setting corresponding attribute
to %True; or opposite actions when set to %False; - ommition of
the attribute means no action:
- newUDAI - force a new authentication UID to be generated
- renew
- cancel
- lock
Transfer to another registrar is an implied operation - if non-owner
registrar is doing an update, the domain is transferred to the new
registrar. For this operation UDAI is required, and the
DomainNameFilter must be a simple domain name (no wildcards!)
ActionResponse: (Domain+|Error) -->
<!ELEMENT DomainUpdate (DomainNameFilter+,RegistrantContact?,AdminContact?,
TechnicalContact?,
NameServers?,AuditText?) >
<!ATTLIST DomainUpdate
ActionId %UID; #REQUIRED
UDAI %UID; #IMPLIED
NewUDAI %Boolean; #IMPLIED
RegistrantRef %UID; #IMPLIED
Term %Term; #IMPLIED
Delegate %Boolean; #IMPLIED
Renew %Boolean; #IMPLIED
Lock %Boolean; #IMPLIED
Cancel %Boolean; #IMPLIED
Release %Boolean; #IMPLIED >
<!ELEMENT DomainNameFilter (#PCDATA) >
<!-- ++ Domain details query actions ++++++++++++++++++++++++++++++++++++++ -->
<!-- Whois (retrieve details of DomainName)
ActionResponse: (Domain|Error) -->
<!ELEMENT Whois EMPTY >
<!ATTLIST Whois
DomainName %DomainName; #REQUIRED >
<!-- UDAIValidQry - enquire if the UDAI for a domain is correct
ActionResponse: (UDAIValid) -->
<!ELEMENT UDAIValidQry EMPTY >
<!ATTLIST UDAIValidQry
DomainName %DomainName; #REQUIRED
UDAI %UID; #REQUIRED >
<!-- General register query
ActionResponse: (Domain*|Error) -->
<!ELEMENT DomainDetailsQry (DomainNameFilter*,NameServers?,
RegistrantContact?,
AdminContact?,TechnicalContact?,
ResultDateRange?,SearchDateRange?,
RegisteredDateRange?,LockedDateRange?,
CancelledDateRange?,BilledUntilDateRange?,
FieldList?) >
<!ATTLIST DomainDetailsQry
Status (%RegDomainStatus;) #IMPLIED
Delegate %Boolean; #IMPLIED
Term %Term; #IMPLIED
RegistrantRef %UID; #IMPLIED
MaxResults %Number; #IMPLIED
SkipResults %Number; #IMPLIED >
<!-- Query request - returns request-response pair
ActionResponse: ((RawRequest,RawResponse)|Error) -->
<!ELEMENT ActionDetailsQry EMPTY >
<!ATTLIST ActionDetailsQry
ActionId %UID; #REQUIRED >
<!-- ++ Registar details update actions ++++++++++++++++++++++++++++++++++++
ActionResponse: (Registrar|Error) -->
<!ELEMENT RegistrarCreate (RegistrarPublicContact,RegistrarSRSContact,
DefaultTechnicalContact,EncryptKey,
Allowed2LDs?,Roles?,AuditText?) >
<!ATTLIST RegistrarCreate
ActionId %UID; #REQUIRED
Name CDATA #REQUIRED
AccRef CDATA #REQUIRED
URL CDATA #IMPLIED >
<!ELEMENT RegistrarUpdate (RegistrarPublicContact?,RegistrarSRSContact?,
DefaultTechnicalContact?,EncryptKey?,
Allowed2LDs?,Roles?,AuditText?) >
<!ATTLIST RegistrarUpdate
RegistrarId %RegistrarId; #REQUIRED
ActionId %UID; #REQUIRED
Name CDATA #IMPLIED
AccRef CDATA #IMPLIED
URL CDATA #IMPLIED >
<!-- ++ Registar details query actions +++++++++++++++++++++++++++++++++++++ -->
<!-- ActionResponse: (Registrar*|Error) -->
<!ELEMENT RegistrarDetailsQry (ResultDateRange?) >
<!ATTLIST RegistrarDetailsQry
RegistrarId %RegistrarId; #IMPLIED
NameFilter CDATA #IMPLIED >
<!-- Billinfo (obtain billing information relating to an invoice)
ActionResponse: (BillingTrans*|Error) -->
<!ELEMENT RegistrarAccountQry (TransDateRange?,InvoiceDateRange?) >
<!ATTLIST RegistrarAccountQry
RegistrantRef %UID; #IMPLIED
DomainName %DomainName; #IMPLIED
InvoiceId %UID; #IMPLIED
MaxResults %Number; #IMPLIED
SkipResults %Number; #IMPLIED >
<!-- ++ Query date ranges ++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!ELEMENT ResultDateRange (%DateRange;) >
<!ELEMENT SearchDateRange (%DateRange;) >
<!ELEMENT RegisteredDateRange (%DateRange;) >
<!ELEMENT CancelledDateRange (%DateRange;) >
<!ELEMENT LockedDateRange (%DateRange;) >
<!ELEMENT BilledUntilDateRange (%DateRange;) >
<!ELEMENT InvoiceDateRange (%DateRange;) >
<!ELEMENT TransDateRange (%DateRange;) >
<!-- ++ Query field list +++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!ELEMENT FieldList EMPTY >
<!ATTLIST FieldList
DomainName %Boolean; #IMPLIED
Status %Boolean; #IMPLIED
NameServers %Boolean; #IMPLIED
RegistrantContact %Boolean; #IMPLIED
RegisteredDate %Boolean; #IMPLIED
AdminContact %Boolean; #IMPLIED
TechnicalContact %Boolean; #IMPLIED
LockedDate %Boolean; #IMPLIED
Delegate %Boolean; #IMPLIED
RegistrarId %Boolean; #IMPLIED
RegistrarName %Boolean; #IMPLIED
RegistrantRef %Boolean; #IMPLIED
LastActionId %Boolean; #IMPLIED
ChangedByRegistrarId %Boolean; #IMPLIED
Term %Boolean; #IMPLIED
BilledUntil %Boolean; #IMPLIED
CancelledDate %Boolean; #IMPLIED
AuditText %Boolean; #IMPLIED
EffectiveFrom %Boolean; #IMPLIED
EffectiveTo %Boolean; #IMPLIED >
<!-- ++ Registry actions +++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!-- ActionResponse: (SysParam*|Error) -->
<!ELEMENT SysParamsUpdate (SysParam+,AuditText?) >
<!ATTLIST SysParamsUpdate
ActionId %UID; #REQUIRED >
<!ELEMENT SysParamsQry EMPTY >
<!-- ActionResponse: (RunLog|Error) -->
<!ELEMENT RunLogCreate (RunLog) >
<!ATTLIST RunLogCreate
ActionId %UID; #REQUIRED >
<!-- ActionResponse: (RunLog*|Error) -->
<!ELEMENT RunLogQry (LogDateRange?) >
<!ATTLIST RunLogQry
ProcessName CDATA #IMPLIED >
<!ELEMENT LogDateRange (%DateRange;) >
<!-- ActionResponse: (Schedule|Error) -->
<!ELEMENT ScheduleCreate (Schedule) >
<!ELEMENT ScheduleCancel (FinalRunDate,AuditText?) >
<!ATTLIST ScheduleCancel
ActionId %UID; #REQUIRED
ProcessName CDATA #REQUIRED >
<!ELEMENT FinalRunDate EMPTY >
<!ATTLIST FinalRunDate %TimeStamp; >
<!ELEMENT ScheduleQry (ActiveOn?) >
<!ATTLIST ScheduleQry
ProcessName CDATA #IMPLIED >
<!ELEMENT ActiveOn EMPTY >
<!ATTLIST ActiveOn %TimeStamp; >
<!-- == GetMessages ======================================================== -->
<!-- Get message by UID, or messages since date/time for the Effectife registrar
Non-DTD enforced compliance:
- either UID or date range must be supplied
ActionResponses: (Response|Error) -->
<!ELEMENT GetMessages (TransDateRange?) >
<!ATTLIST GetMessages
OriginatingRegistrarId %RegistrarIdOrOTHERS; #IMPLIED
ActionId %UID; #IMPLIED
EffectiveRegistrarId %RegistrarId; #IMPLIED >
<!-- == ActionResponse =========================================================== -->
<!-- ++ Response +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
This is a "one size fits all" response, which
can contain any type of response. Errors to individual actions
can be specified within the response (errors in parsing the total
request are handled by the error ELEMENT). The response may
contain multiple domain records (eg, for queries), and may contain
a complete history of the domain.
The registrar and id will match those passed in for most requests,
but will be present to uniquely identify a getmsg response.
Most requests will result in a single response; but getmsg requests
for messages since a date/time will result in one response per
response found.
The DomainTransfer differs from the rest in that it is not a direct
response to an action, but a message for the registrar generated by
an action of another registrar. It may be returned in response to a
GetMessages action. -->
<!ELEMENT Response (Response*|%ActionResponse;|(RawRequest,RawResponse))
>
<!ATTLIST Response
Action (%Action;|UnknownTransaction) #REQUIRED
ActionId %UID; #IMPLIED
Rows %Number; #IMPLIED
MoreRowsAvailable %Boolean; #IMPLIED >
<!-- ++ Error ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Errors can be either specific to a requested action, or generic
to the whole request. A globally unique errorid identifies the
error that occured, and a human-readable string describing the
error is enclosed.
The errorids are assigned like HTTP, where there are three digits
to identify the error. The first digit indicates approximately
the status (success, failure, etc); the second is a subcategory of
that, and the third is used for fine detail indications.
The exact list of errors is in SRS::Error module. -->
<!ELEMENT Error (Description, ErrorDetails?)
>
<!ATTLIST Error
ErrorId %UID; #REQUIRED
Severity %Number; #REQUIRED
Hint %UID; #REQUIRED >
<!ELEMENT Description (#PCDATA) >
<!ELEMENT ErrorDetails (#PCDATA) >
<!-- == Lower level elements =============================================== -->
<!-- Zone information: fields held in the register, that can be obtained
through the registrar/registry protocol.
and/or maintainable through the registry protocol. -->
<!-- ++ Domain details +++++++++++++++++++++++++++++++++++++++++++++++++++++
NOTE: the domain authid (UDAI) is sent ONLY if it has been newly
generated; otherwise it is assumed that the registrar has the
previous value cached. -->
<!ELEMENT Domain (NameServers?,RegistrantContact?,
RegistrarPublicContact?,
AdminContact?,TechnicalContact?,EncryptedUDAI?,
BilledUntil?,RegisteredDate?,CancelledDate?,
LockedDate?,AuditDetails?) >
<!ATTLIST Domain
DomainName %DomainName; #REQUIRED
RegistrantName CDATA #IMPLIED
RegistrantRef %UID; #IMPLIED
RegistrarName CDATA #IMPLIED
Status (%DomainStatus;) #IMPLIED
Delegate %Boolean; #IMPLIED
Term %Term; #IMPLIED
RegistrarId %RegistrarId; #IMPLIED >
<!ELEMENT EncryptedUDAI (#PCDATA) >
<!ELEMENT BilledUntil EMPTY >
<!ATTLIST BilledUntil %TimeStamp; >
<!ELEMENT LockedDate EMPTY >
<!ATTLIST LockedDate %TimeStamp; >
<!ELEMENT RegisteredDate EMPTY >
<!ATTLIST RegisteredDate %TimeStamp; >
<!ELEMENT CancelledDate EMPTY >
<!ATTLIST CancelledDate %TimeStamp; >
<!ELEMENT DomainTransfer EMPTY >
<!ATTLIST DomainTransfer
DomainName %DomainName; #REQUIRED
RegistrarName CDATA #REQUIRED
%TimeStamp; >
<!ELEMENT UDAIValid EMPTY >
<!ATTLIST UDAIValid
Valid %Boolean; #REQUIRED >
<!-- Name servers
The IP address should be included if and only if the fqdn is within
the zone that it is associated with -->
<!ELEMENT NameServers (Server+) >
<!ELEMENT Server EMPTY >
<!ATTLIST Server
FQDN CDATA #REQUIRED
IP4Addr CDATA #IMPLIED >
<!-- ++ Registrar details ++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!ELEMENT Registrar (RegistrarPublicContact,RegistrarSRSContact,
DefaultTechnicalContact,EncryptKey,Allowed2LDs?,
Roles?,AuditDetails?) >
<!ATTLIST Registrar
RegistrarId %RegistrarId; #REQUIRED
Name CDATA #REQUIRED
AccRef CDATA #REQUIRED
URL CDATA #IMPLIED >
<!ELEMENT Allowed2LDs (SecondLD+) >
<!ELEMENT SecondLD EMPTY >
<!ATTLIST SecondLD
DomainName %DomainName; #REQUIRED >
<!ELEMENT Roles (Role*) >
<!ELEMENT Role EMPTY >
<!ATTLIST Role
RoleName (%Roles;) #REQUIRED >
<!ELEMENT EncryptKey (#PCDATA) >
<!-- ++ Billing transaction ++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!ELEMENT BillingTrans (InvoiceDate?, TransDate) >
<!ATTLIST BillingTrans
RegistrarId %RegistrarId; #REQUIRED
Type CDATA #REQUIRED
TransStatus (%BillStatus;) #REQUIRED
DomainName %DomainName; #REQUIRED
RegistrantRef %UID; #IMPLIED
BillingTerm %Term; #REQUIRED
InvoiceId %UID; #IMPLIED
Amount %Dollars; #REQUIRED >
<!ELEMENT InvoiceDate EMPTY >
<!ATTLIST InvoiceDate %TimeStamp; >
<!ELEMENT TransDate EMPTY >
<!ATTLIST TransDate %TimeStamp; >
<!-- ++ Contact information: for registrant, admin, technical ++++++++++++++ -->
<!ELEMENT RegistrantContact (%Contact;) >
<!ATTLIST RegistrantContact %ContactAttr; >
<!ELEMENT AdminContact (%Contact;) >
<!ATTLIST AdminContact %ContactAttr; >
<!ELEMENT TechnicalContact (%Contact;) >
<!ATTLIST TechnicalContact %ContactAttr; >
<!ELEMENT RegistrarPublicContact (%Contact;) >
<!ATTLIST RegistrarPublicContact %ContactAttr; >
<!ELEMENT DefaultTechnicalContact (%Contact;) >
<!ATTLIST DefaultTechnicalContact %ContactAttr; >
<!ELEMENT RegistrarSRSContact (%Contact;) >
<!ATTLIST RegistrarSRSContact %ContactAttr; >
<!-- Country is an ISO 3166-1 country code -->
<!ELEMENT PostalAddress EMPTY >
<!ATTLIST PostalAddress
Address1 CDATA #IMPLIED
Address2 CDATA #IMPLIED
City CDATA #IMPLIED
Province CDATA #IMPLIED
CountryCode CDATA #IMPLIED
PostalCode CDATA #IMPLIED >
<!ELEMENT Phone EMPTY >
<!ATTLIST Phone %PhoneAttr; >
<!ELEMENT Fax EMPTY >
<!ATTLIST Fax %PhoneAttr; >
<!-- ++ Raw responses ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!ELEMENT RawRequest (XML,Signature) >
<!ELEMENT RawResponse (XML,Signature) >
<!ELEMENT XML (#PCDATA) >
<!ELEMENT Signature (#PCDATA) >
<!-- ++ System Parameters ++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!ELEMENT SysParam (ParamValue, AuditText?) >
<!ATTLIST SysParam
Name CDATA #REQUIRED
ActionId %UID; #IMPLIED >
<!ELEMENT ParamValue (#PCDATA) >
<!-- ++ Run Log ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!ELEMENT RunLog (RunLogTimeStamp, Details?) >
<!ATTLIST RunLog
ProcessName CDATA #REQUIRED
ActionStatus CDATA #REQUIRED
Control CDATA #IMPLIED >
<!ELEMENT Details (#PCDATA) >
<!ELEMENT RunLogTimeStamp EMPTY >
<!ATTLIST RunLogTimeStamp %TimeStamp; >
<!-- ++ Schedule +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!-- Frequency in ? -->
<!ELEMENT Schedule (FirstRunDate,FinalRunDate?,
CreateDetails, CancelDetails?) >
<!ATTLIST Schedule
ProcessName CDATA #REQUIRED
Frequency CDATA #REQUIRED
Parameters CDATA #IMPLIED >
<!ELEMENT FirstRunDate EMPTY >
<!ATTLIST FirstRunDate %TimeStamp; >
<!ELEMENT CreateDetails (AuditDetails) >
<!ELEMENT CancelDetails (AuditDetails) >
<!-- ++ Audit details ++++++++++++++++++++++++++++++++++++++++++ -->
<!ELEMENT AuditDetails (AuditTime?,AuditText?) >
<!ATTLIST AuditDetails
RegistrarId CDATA #IMPLIED
ActionId %UID; #IMPLIED >
<!ELEMENT AuditTime (%DateRange;) >
<!ELEMENT AuditText (#PCDATA) >
<!-- == Various ============================================================ -->
<!ELEMENT From EMPTY >
<!ATTLIST From %TimeStamp; >
<!ELEMENT To EMPTY >
<!ATTLIST To %TimeStamp; >
xerces_test.pl
Description: Perl program
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
