Module: @QName: Util:DIS @FullName: @@lang: en @@@: Object Model @Namespace: http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/DIS# @Description: @@lang:en @@@: This module provides an object model for document format. @Author: @@FullName: Wakaba @@Mail: w@suika.fam.cx @License: @@@: license:Perl+MPL @@Original: @@@FullName: manakai and @@@Year:2004 @@@Author: @@@@FullName:Wakaba @@@@Mail:w@suika.fam.cx @Date: @@@: $Date: 2005/04/10 05:40:59 $ @@ContentType: dis:Date.RCS @Require: @@Module: @@@Name: SuikaWikiConfig21 @@@QName: Markup:SuikaWikiConfig21 @@@WithFor: swcfg21:ForLatest @@Module: @@@Name: DIS @@@WithFor: DIS:ForLatest @@Module: @@@Name: PerlCode @@@WithFor: ManakaiDOM:Perl @DefaultFor: DIS:ForLatest Namespace: @DIS: http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/DIS# @dis: http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis-- @dis2pm: http://suika.fam.cx/~wakaba/archive/2004/11/8/dis2pm# @DISlib: http://suika.fam.cx/~wakaba/archive/2004/dis/ @disPerl: http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--Perl-- @DOMCore: http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core# @DOMLS: http://suika.fam.cx/~wakaba/archive/2004/dom/ls# @DOMMain: http://suika.fam.cx/~wakaba/archive/2004/dom/main# @infoset: http://www.w3.org/2001/04/infoset# @lang: http://suika.fam.cx/~wakaba/archive/2004/8/18/lang# @license: http://suika.fam.cx/~wakaba/archive/2004/8/18/license# @ManakaiDOM: http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom# @Markup: http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup# @MDOMX: http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception# @owl: http://www.w3.org/2002/07/owl# @Perl: http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#Perl-- @rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# @rdfs: http://www.w3.org/2000/01/rdf-schema# @swcfg21: http://suika.fam.cx/~wakaba/archive/2005/swcfg21# @TreeCore:\ @Util: http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/ ## -- "For" definitions ForDef: @QName: DIS:ForLatest @Description: @@lang:en @@@: For latest version of the module implementation @ISA: ManakaiDOM:Perl ## -- Features ElementTypeBinding: @Name: FeatureDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DOMMain:DOMFeature @@AliasFor: @@@@: ::ManakaiDOM:all @@@For: !=ManakaiDOM:all ElementTypeBinding: @Name: FeatureVerDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DOMMain:DOMFeature ElementTypeBinding: @Name: featureQName @ElementType: dis:AppName @ShadowContent: @@ContentType: dis:TypeQName FeatureDef: @QName: Core @FeatureVerDef: @@QName: CoreFeature10 @@Version: 1.0 @@ISA: Core @@FullName: @@@lang:en @@@@: The object model, version 1.0 @@Description: @@@lang:en @@@@: The object model, version 1.0. @@DOMMain:requireFeature: swcfg21:CoreFeature21 ## -- SuikaWikiConfig/2.1 extended classes ClsDef: @ClsQName: ManakaiDISImplementation @ClsISA: swcfg21:ManakaiSWCFGImplementation::swcfg21:ForLatest @Description: @@lang:en @@@: A implementation object. @Method: @@Name: createDISDocument @@Description: @@@lang:en @@@@: Creates an empty object. @@Return: @@@Type:ManakaiDISDocument @@@Description: @@@@lang:en @@@@@: The newly created document object. @@@PerlDef: $r = $self->; $r-> (); @Method: @@Name: createDISParser @@Description: @@@lang:en @@@@: Creates a object. @@Return: @@@Type: ManakaiDISParser @@@Description: @@@@lang:en @@@@@: A newly created parser. @@@PerlDef: $r = bless $self->, ; @Method: @@Name: createDISDatabase @@Description: @@@lang:en @@@@: Creates a new database. @@Return: @@@Type:ManakaiDISDatabase @@@Description: @@@@lang:en @@@@@: A newly created parser. @@@PerlDef: $r = bless { forDef => { => bless ({ uri => , isa => { => 1}, revISA => {}, }, ), }, resDef => {}, modDef => {}, seq => 0, }, ; @Method: @@Name: tfurisToURI @@Description: @@@lang:en @@@@: Converts a pair of name URI reference and URI reference into a -expanded URI reference. @@Param: @@@Name: typeURI @@@Type: NameURI @@@Description: @@@@lang:en @@@@@: A URI reference to identify a resource. @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: Equivalent to (for historical reason). @@Param: @@@Name: forURI @@@Type: ForURI @@@Description: @@@@lang:en @@@@@: A URI reference. @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: Equivalent to , i.e. . @@Return: @@@Type: DISCore:TFURI::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: The -expanded URI references. @@@PerlDef: $typeURI = unless defined $typeURI; $forURI = unless defined $forURI; __CODE{tfurisToURI:: $turi => $typeURI, $furi => $forURI, $uri => $r}__; @ResourceDef: @@QName: tfurisToURI @@rdf:type: dis2pm:BlockCode @@enDesc: Converts a pair of name URI reference and URI reference into a -expanded URI reference. @@PerlDef: if ($furi eq ) { $uri = $turi; } else { ## NOTE: [RFC 3986] ## fragment := *(pchar / "/" / "?") ## pchar := unreserved / pct-encoded / sub-delims / [:@] ## unreserved := ALPHA / DIGIT / [._~-] ## sub-delims := [!$&'()*+,;=] ## NOTE: [XPointer Framework] ## SchemeData := *EscapedData ## EscapedData := NormalChar / "^(" / "^)" / "^^" ## / "(" SchemeData ")" ## NormalChar := UnicodeChar - [()^] my $__turi = $turi; my $__furi = $furi; for my $__uri ($__turi, $__furi) { $__uri =~ s{([^0-9A-Za-z:;?=_./-])}{sprintf '%%%02X', ord $1}ge; } $uri = qq. qq; } @ResourceDef: @@QName: tfpurisToURI @@rdf:type: dis2pm:BlockCode @@enDesc: Converts a set of name URI reference and URI reference and URI references into a URi reference. @@PerlDef: if ($furi eq and @{$forp} == 0) { $uri = $turi; } elsif (@{$forp}) { my $__turi = $turi; my $__furi = $furi; for my $__uri ($__turi, $__furi) { $__uri =~ s{([^0-9A-Za-z:;?=_./~!&+-])}{sprintf '%%%02X', ord $1}ge; } my @__fp; for my $__uri (@{$forp}) { my $__fpuri = $__uri; $__fpuri =~ s{([^0-9A-Za-z:;?=_./~!&+-])} {sprintf '%%%02X', ord $1}ge; push @__fp, $__fpuri; } $uri = qq. qq.join (',', @__fp).q<)>; } else { my $__turi = $turi; my $__furi = $furi; for my $__uri ($__turi, $__furi) { $__uri =~ s{([^0-9A-Za-z:;?=_./-])}{sprintf '%%%02X', ord $1}ge; } $uri = qq. qq; } @ResourceDef: @@QName: getChildResourceURI @@rdf:type: dis2pm:BlockCode @@enDesc: Gets an anonymous URI reference of a child resource of another resource. @@PerlDef: my $__parent = $parentURI; my $__ln = $localName; for my $__uri ($__parent, $__ln) { $__uri =~ s{([^0-9A-Za-z:;?=_./~!&+-])}{sprintf '%%%02X', ord $1}ge; } $result = q. qq; @IntMethod: @@Name: camelCaseToUnderscoreName @@enDesc: Converts a camelCase name to a underscored_name. @@ManakaiDOM:isStatic:1 @@Param: @@@Name: camelName @@@Type: DISLang:String::ManakaiDOM:all @@@enDesc: The source name. @@Return: @@@Type: DISLang:String::ManakaiDOM:all @@@enDesc: The result name. @@@PerlDef: $r = $camelName; $r =~ s/^([A-Z0-9]+)$/lc $1/ge; $r =~ s/([A-Z][A-Z0-9]*)$/"_".lc $1/ge; $r =~ s/([A-Z0-9])([A-Z0-9]*)([A-Z0-9])/$1.lc ($2)."_".lc $3/ge; $r =~ s/([A-Z])/"_".lc $1/ge; $r =~ s/(?=[0-9](?!$))/_/g; @Method: @@Name: plLoadDISDatabase @@enDesc: Loads a database from a file that was saved by . \ {NOTE:: documents restored from external file would have different than this , even if it has been created by this implementation and stored in the same session. \ } @@Param: @@@Name:fileName @@@Type: DISLang:String::ManakaiDOM:all @@@enDesc: An environment-dependent file name. @@Return: @@@Type: ManakaiDISDatabase @@@SimpleException: @@@PerlDef: use Storable qw/retrieve/; local $Carp::CarpLevel = $Carp::CarpLevel + 1; $r = retrieve $fileName; ## Restores weak references require Scalar::Util; for my $doc (values %{$r->{}}) { Scalar::Util::weaken ($doc->{}->{}); } for my $def (values %{$r->{modDef}}, values %{$r->{forDef}}, values %{$r->{resDef}}) { Scalar::Util::weaken ($def->{db}); } ##DISImplementation ElementTypeBinding: @Name: SimpleException @ElementType: dis:Description @ShadowContent: @@lang:en @@@: - Exception of type ::: I/O error or other error reported by . ## TODO: Formal description required for simple exception ClsDef: @ClsQName: ManakaiDISParser @ClsISA: swcfg21:ManakaiSWCFGParser::swcfg21:ForLatest @Description: @@lang:en @@@: A SuikaWikiConfig/2.1 parser that returns object. @Method: @@Name: parse @@Description: @@@lang:en @@@@: Parses a document and returns it as an object tree. @@Param: @@@Name: input @@@Type: DOMLS:LSInput::ManakaiDOM:ManakaiDOM3 @@@Description: @@@@lang:en @@@@@: The input source. @@Return: @@@Type: ManakaiDISDocument @@@Description: @@@@lang:en @@@@@: The document object created from the . @@@RaiseException: @@@@@: swcfg21:SWCFG_PARSE_ERR @@@@Description: @@@@@lang:en @@@@@@: The was unable to load the SuikaWikiConfig document. @@@PerlDef: __DEEP{ $r = $self-> ($input); }__; if (defined $r) { $r = bless $r, ; $r-> (); } ##DISParser ClsDef: @ClsQName: ManakaiDISNode @Description: @@lang:en @@@: node objects. @ImplNote: @@lang:en @@@: This class does not inherit , since inheriting classes such as indirectly inherit it. @MethodRedef: @@Name:lookupNamespacePrefix @@Description: @@@lang:en @@@@: Looks up the namespace prefix associated to the given namespace URI. The default namespaces are ignored. @@Param: @@@Name:namespaceURI @@@Type: AnyURI @@@Description: @@@@lang:en @@@@@: The namespace URI to look for. @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: The namespace. @@NamedParam: @@@Name: makeNewBinding @@@Type: DOMMain:boolean::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: Whether a new namespace prefix should be bound when no namespace URI has been associated yet. @@@InCase: @@@@Value:true @@@@Description: @@@@@lang:en @@@@@@: New binding is made if no prefix associated. @@@InCase: @@@@Value:false @@@@Description: @@@@@lang:en @@@@@@: Simply returns the if no prefix associated. @@Return: @@@Type: DISCore:NamespacePrefix::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: An associated namespace prefix. If more than one prefix are associated to the namespace URI, the returned prefix is implementation dependent. @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: No associated namespace prefix found. @@@PerlDef: $r = null; my $od = $self-> || $self; my $binds = $od->{}->{}; if (defined $namespaceURI) { FIND: { for my $prefix (keys %$binds) { if (defined $binds->{$prefix} and $binds->{$prefix} eq $namespaceURI) { $r = $prefix; last FIND; } } ## From module list try { my $db = $self-> ->; for my $mod_uri (keys %{$db->{modDef}}) { my $mod = $db-> ($mod_uri); my $mod_ln = $mod->; next if exists $binds->{$mod_ln}; my $ns_uri = $mod-> (, ''); if ($ns_uri eq $namespaceURI) { $r = $mod_ln; last FIND; } } } catch with { my $err = shift; $err->throw unless $err->{} eq ; }; last FIND unless $makeNewBinding; ## Not found if ($namespaceURI =~ /(\w+)$/) { my $prefix = $1; unless (exists $binds->{$prefix}) { $binds->{$prefix} = $namespaceURI; $r = $prefix; last FIND; } } my $i = 1; { unless (exists $binds->{'ns'.$i}) { $binds->{$r = 'ns'.$i} = $namespaceURI; last FIND; } $i++; redo; } } # FIND } else { ## Null namespace FIND: { if (exists $binds->{'nu'.'ll'} and not defined $binds->{'nu'.'ll'}) { $r = 'nu'.'ll'; last FIND; } for my $prefix (keys %$binds) { if (not defined $prefix) { $r = $prefix; last FIND; } } last FIND unless $makeNewBinding; ## Not found my $i = ''; { unless (exists $binds->{'nu'.'ll'.$i}) { $binds->{$r = 'nu'.'ll'.$i} = null; last FIND; } $i++; redo; } } } @MethodRedef: @@Name:lookupNamespaceURI @@Description: @@@lang:en @@@@: Looks up the namespace URI associated to the given prefix. @@Param: @@@Name:prefix @@@Type: DISCore:NamespacePrefix::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: The namespace URI to look for. @@NamedParam: @@@Name: makeNewBinding @@@Type: DOMMain:boolean::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: Whether a new binding should be created if no namespace URI is associated with the or not. @@@InCase: @@@@Value:true @@@@Description: @@@@@lang:en @@@@@@: A new binding to the temporary namespace URI exactly same as is created if no binding found. @@@InCase: @@@@Value:false @@@@Description: @@@@@lang:en @@@@@@: No new binding is created if no binding found. Note that even if no association newly created, this method returns the value. @@NamedParam: @@@Name: raisePrefixException @@@Type: DOMMain:boolean::ManakaiDOM:all @@@enDesc: Whehter an exception should be thrown if is not declared or not. @@Return: @@@Type: AnyURI @@@Description: @@@@lang:en @@@@@:The associated namespace URI. @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: No namespace URI is associated to the prefix or the namespace is associated. @@@UndeclaredPrefixException: @@@PerlDef: my $od = $self-> || $self; my $binds = $od->{}->{}; if (exists $binds->{$prefix}) { $r = $binds->{$prefix}; } else { ## From module list FIND: { try { my $db = $self-> ->; for my $mod_uri (keys %{$db->{modDef}}) { my $mod = $db-> ($mod_uri); if ($mod-> eq $prefix) { $r = $mod-> (, null); last FIND; } } } catch with { my $err = shift; $err->throw unless $err->{} eq ; }; if ($makeNewBinding) { $r = $binds->{$prefix} = $prefix; } elsif ($raisePrefixException) { __EXCEPTION{DIS:UNDECLARED_NS_PREFIX_ERR:: infoset:prefix => {$prefix}, MDOMX:param-name => 'prefix', DIS:sourceNode => {$self}, }__; } else { $r = null; } } # FIND } @IntMethod: @@Name:getNodeReference @@Description: @@@lang:en @@@@: Returns a new reference to the node object. @@ManakaiDOM:isStatic:1 @@Param: @@@Name:object @@@Type: ManakaiDOM:ManakaiDOMNodeObject::ManakaiDOM:Perl @@@Description: @@@@lang:en @@@@@: The node object to be referred. @@Return: @@@Type: ManakaiDISNode @@@Description: @@@@lang:en @@@@@: A newly created reference. @@@PerlDef: my $class; if ($object->{} eq '#element') { $class = ; } elsif ($object->{} eq '#comment') { $class = ; } elsif ($object->{} eq '#document') { $class = ; } elsif ($object->{} eq '#fragment') { $class = ; } else { __ASSERT{DISPerl:invariant:: msg => {qq[Node type: "$object->{}" ]. qq[(ref: "@{[ref $object]}")]}, }__; } $r = $object-> ($class); @Attr: @@Name:ownerDISDocument @@Description: @@@lang:en @@@@: The document object associated with this node. @@Get: @@@Type:ManakaiDISDocument @@@Description: @@@@lang:en @@@@@: The document object associated with this node. @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: This node is a document node. @@@PerlDef: $r = ($self->{}->{}) if $self->{}->{}; ##DISNode ClsDef: @ClsQName: ManakaiDISElement @ClsISA: ManakaiDISNode @ClsISA: swcfg21:ManakaiSWCFGElement::swcfg21:ForLatest @Description: @@lang:en @@@: element node objects. @Method: @@Name: forMatch @@Description: @@@lang:en @@@@: Tests whether this element is for a or not. @@Param: @@@Name: forArg @@@Type: ForURI @@@Description: @@@@lang:en @@@@@: The URI reference to test against. @@Param: @@@Name: forpArg @@@Type: ForURIList @@@Description: @@@@lang:en @@@@@: The URI references to test against. @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: No additional URI reference. Equivalent to an empty array reference. @@Return: @@@Type: DOMMain:boolean::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: Whether this element is for and or not. @@@UndeclaredPrefixException: @@@NoDBException: @@@PerlDef: $forArg = unless defined $forArg; $forpArg ||= []; FORMATCH: { __DEEP{ my $for_res = $self-> -> -> ($forArg); my $forp_res = [map { $self-> -> -> ($_) } @{$forpArg}]; my @ce = @{$self->}; for my $ce (@ce) { my $et = $ce->; if ($et eq ) { my $fors = [split /\s+/, $ce->]; FCs: for my $f (@$fors) { if ($f =~ /^!=(.+)$/) { ## -- NOT EQUAL TO my $uri = $self-> ($1); my $for = $self-> -> -> ($uri); $for-> ($ce); for my $arg_res ($for_res, @{$forp_res}) { if ($arg_res eq $for) { $r = false; last FORMATCH; } } } elsif ($f =~ /^!(.+)$/) { ## -- NOT ISA my $uri = $self-> ($1); my $for = $self-> -> -> ($uri); $for-> ($ce); for my $arg_res ($for_res, @{$forp_res}) { if ($arg_res-> ($uri)) { $r = false; last FORMATCH; } } } elsif ($f =~ /^=(.+)$/) { ## -- EQUAL TO my $uri = $self-> ($1); my $for = $self-> -> -> ($uri); $for-> ($ce); for my $arg_res ($for_res, @{$forp_res}) { if ($arg_res eq $for) { next FCs; } } $r = false; last FORMATCH; } else { ## -- ISA my $uri = $self-> ($f); my $for = $self-> -> -> ($uri); $for-> ($ce); for my $arg_res ($for_res, @{$forp_res}) { if ($arg_res-> ($uri)) { next FCs; } } $r = false; last FORMATCH; } } # FCs } # dis:ForCheck } # children my $has_for = false; for my $ce (@ce) { if ($ce-> eq ) { my $fors = [split /\s+/, $ce->]; my $ok = true; $has_for = true; AFOR: for my $f (@$fors) { if ($f =~ /^!=(.+)$/) { ## -- NOT EQUAL TO my $uri = $self-> ($1); my $for = $self-> -> -> ($uri); $for-> ($ce); if ($for eq $for_res) { $ok = false; last AFOR; } } elsif ($f =~ /^!(.+)$/) { ## -- NOT ISA my $uri = $self-> ($1); my $for = $self-> -> -> ($uri); $for-> ($ce); if ($for_res-> ($uri)) { $ok = false; last AFOR; } } elsif ($f =~ /^=(.+)$/) { ## -- EQUAL TO my $uri = $self-> ($1); my $for = $self-> -> -> ($uri); $for-> ($ce); unless ($for eq $for_res) { $ok = false; last AFOR; } } else { ## -- ISA my $uri = $self-> ($f); my $for = $self-> -> -> ($uri); $for-> ($ce); unless ($for_res->($uri)){ $ok = false; last AFOR; } } } # AFOR if ($ok) { $r = true; last FORMATCH; } } # dis:For } # $ce $r = $has_for ? false : true; }__; } # FORMATCH @Method: @@Name: mediaTypeMatch @@Description: @@@lang:en @@@@: Tests whether the content media type of this element matches to a type or not. @@Param: @@@Name: mediaType @@@Type: MediaTypeURI @@@Description: @@@@lang:en @@@@@: A media type URI reference to test against. @@Param: @@@Name: defaultMediaType @@@Type: MediaTypeURI @@@Description: @@@@lang:en @@@@@: The default media type for this element. @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: No default type provided. All will match. @@ForParam: @@ForpParam: @@Return: @@@Type: DOMMain:boolean::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: Whether this element is of or not. @@@PerlDef: if (defined $mediaType) { __DEEP{ my $ctn = $self-> (, for_arg => $forArg, forp_arg => $forpArg); my $ct; $ct = $ctn-> if $ctn; $ct = $defaultMediaType unless defined $ct; my $res = $self-> -> -> ($ct); $res-> ($ctn or $self); unless ($res-> ($mediaType)) { $r = false; } else { $r = true; } }__; } else { $r = true; } @Method: @@Name:mediaTypeURI @@enDesc: The URI reference of the media type of this element. @@Type: MediaTypeURI @@NamedParam: @@@Name:defaultMediaType @@@Type:MediaTypeURI @@@enDesc: The default media type URI reference. @@@nullCase: @@@@enDesc: No default is specified. @@ForParam: @@ForpParam: @@Return: @@@enDesc: The media type URI reference of this element. @@@nullCase: @@@@enDesc: This element has no media type information and parameter is not provided. @@@UndeclaredPrefixException: @@@PerlDef: __DEEP{ my $ctn = $self-> (, for_arg => $forArg, forp_arg => $forpArg); $r = $ctn-> if $ctn; }__; @Method: @@Name: prefixToURI @@Description: @@@lang:en @@@@: Converts a namespace prefix into associated URI reference. @@Param: @@@Name: prefix @@@Type: DISCore:NamespacePrefix::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: A namespace prefix to look for. @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: Returns the default namespace URI. @@NodeParam: @@Return: @@@Type: AnyURI @@@Description: @@@@lang:en @@@@@: The URI references associated. @@@UndeclaredPrefixException: @@@PerlDef: if (defined $prefix) { __DEEP{ $r = $self-> ($prefix); }__; unless (defined $r) { __EXCEPTION{UNDECLARED_NS_PREFIX_ERR:: infoset:prefix => {$prefix}, MDOMX:param-name => 'prefix', DIS:sourceNode => {$node}, }__; } } else { ## Default namespace __DEEP{ $r = ($self-> || $self) -> ->; }__; } @Method: @@QName: qnameToURI @@Description: @@@lang:en @@@@: Converts a qualified name () to an expanded URI reference. @@Param: @@@Name: qname @@@Type: dis:TypeQName::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: A qualified name. @@NodeParam: @@NamedParam: @@@Name: defaultNamespaceURI @@@Type: AnyURI @@@enDesc: Default namespace URI reference. @@@nullCase: @@@@enDesc: The default namespace is the namespace defined by the module to which this resource belongs. @@Return: @@@Type: AnyURI @@@Description: @@@@lang:en @@@@@: The expanded URI reference. @@@UndeclaredPrefixException: @@@PerlDef: $qname =~ s/^\s+//; $qname =~ s/\s+$//; my ($prefix, $lname) = split /\s*[:|]\s*/, $qname, 2; __DEEP{ if (defined $lname) { $r = $self-> ($prefix) . $lname; } else { ## In default namespace if (defined $defaultNamespaceURI) { $r = $defaultNamespaceURI . $prefix; } else { $r = $self-> (null) . $prefix; } } }__; @Method: @@QName: qnameToPair @@Description: @@@lang:en @@@@: Converts a qualified name () to a pair of namespace URI and local name. @@Param: @@@Name: qname @@@Type: dis:TypeQName::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: A qualified name. @@NodeParam: @@Return: @@@Type: Perl:ARRAY::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: A list of namespace URI and local name. @@@UndeclaredPrefixException: @@@PerlDef: $qname =~ s/^\s+//; $qname =~ s/\s+$//; my ($prefix, $lname) = split /\s*[:|]\s*/, $qname, 2; __DEEP{ if (defined $lname) { $r = [$self-> ($prefix), $lname]; } else { ## In default namespace $r = [$self-> (null), $prefix]; } }__; @Method: @@Name: tfqnamesToURI @@Description: @@@lang:en @@@@: Converts a into an expanded URI reference. @@Param: @@@Name: tfqnames @@@Type: dis:TFQNames::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: A to identify a resource. @@Param: @@@Name: defaultTypeURI @@@Type: NameURI @@@Description: @@@@lang:en @@@@@: A name URI reference used if it is missing from . @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: Equivalent to . @@Param: @@@Name: defaultForURI @@@Type: ForURI @@@Description: @@@@lang:en @@@@@: A URI reference used if it is missing from . @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: Equivalent to , i.e. . @@NodeParam: @@Return: @@@Type: DISCore:TFURI::ManakaiDOM:all @@@Description: @@@@lang:en @@@@@: The -expanded URI references. @@@UndeclaredPrefixException: @@@PerlDef: my ($typeq, $forq) = split /\s*[:|][:|]\s*/, $tfqnames, 2; my ($typeURI, $forURI); if (defined $forq) { __DEEP{ $typeURI = $typeq eq '' ? defined $defaultTypeURI ? $defaultTypeURI : : $self-> ($typeq, %opt); }__; if (length $forq) { $forURI = $self-> ($forq, %opt); } else { $forURI = ; } } else { ## "For" omitted __DEEP{ $typeURI = $typeq eq '' ? defined $defaultTypeURI ? $defaultTypeURI : : $self-> ($typeq, %opt); }__; $forURI = defined $defaultForURI ? $defaultForURI : ; } __CODE{tfurisToURI:: $turi => $typeURI, $furi => $forURI, $uri => $r}__; @Method: @@Name: disGetAttribute @@enDesc: Gets an attribute node. @@Param: @@@Name: attrName @@@Type: AnyURI @@@enDesc: The name expanded URI of the node to retrieve. @@ForParam: @@ForpParam: @@MediaTypeParam: @@MediaTypeDefaultParam: @@Return: @@@Type: ManakaiDISElement @@@enDesc: The attribute (property) element node. @@@nullCase: @@@@enDesc: No attribute node found. @@@PerlDef: for my $c (@{$self-> (for_arg => $forArg, forp_arg => $forpArg)}) { if ($c-> eq $attrName and $c-> ($mediaType, $defaultMediaType, for_arg => $forArg, forp_arg => $forpArg)) { $r = $c; last; } } @Method: @@Name: disGetAttributeList @@enDesc: Gets attribute nodes. @@Param: @@@Name: attrName @@@Type: AnyURI @@@enDesc: The name expanded URI of the node to retrieve. @@ForParam: @@ForpParam: @@MediaTypeParam: @@MediaTypeDefaultParam: @@Return: @@@Type: ManakaiDISElementList @@@enDesc: The attribute (property) element nodes. @@@PerlDef: $r = bless [], ; for my $c (@{$self-> (for_arg => $forArg, forp_arg => $forpArg)}) { if ($c-> eq $attrName and $c-> ($mediaType, $defaultMediaType, for_arg => $forArg, forp_arg => $forpArg)) { push @$r, $c; } } @Method: @@Name: disChildElements @@enDesc: A list of child elements, with check. @@ForParam: @@ForpParam: @@Return: @@@Type: ManakaiDISElementList @@@enDesc: The current snapshot of child nodes. @@@PerlDef: $r = bless [], ; __DEEP{ for my $cn (@{$self->}) { ## $cn is an #element. my $dn = $cn->{} -> (); next unless $dn-> ($forArg, $forpArg); push @$r, $dn; } }__; @Method: @@Name: disAllChildElements @@enDesc: A list of child elements, without check. @@Return: @@@Type: ManakaiDISElementList @@@enDesc: The current snapshot of child nodes. @@@PerlDef: $r = bless [], ; __DEEP{ for my $cn (@{$self->}) { ## $cn is an #element. my $dn = $cn->{} -> (); push @$r, $dn; } }__; @Attr: @@Name: qnameValueURI @@enDesc: The element value (written as ), as URI reference. \ {NOTE:: What should be if list value? \ } @@Get: @@@Type:AnyURI @@@nullCase: @@@@enDesc: No value. @@@UndeclaredPrefixException: @@@PerlDef: __DEEP{ my $v = $self->; if (defined $v and not ref $v eq 'ARRAY') { $r = $self-> ($v, node => $self); } else { $r = null; } }__; @Attr: @@Name: qnameValueLocalName @@enDesc: The local name part of the element value (assumed as written as ). \ {NOTE:: What should be if list value? \ } @@Get: @@@Type: DISCore:LocalName::ManakaiDOM:all @@@nullCase: @@@@enDesc: No value. @@@PerlDef: __DEEP{ my $v = $self->; if (defined $v and not ref $v eq 'ARRAY') { my ($n, $v) = split /\s*[:|]\s*/, $v, 2; $r = defined $v ? $v : $n; } else { $r = null; } }__; @Attr: @@Name: qnameValueNamespaceURI @@enDesc: The namespace URI of the element value (assumed as written in ). \ {NOTE:: What should be if list value? \ } @@Get: @@@Type:AnyURI @@@nullCase: @@@@enDesc: No value. @@@UndeclaredPrefixException: @@@PerlDef: __DEEP{ my $v = $self->; if (defined $v and not ref $v eq 'ARRAY') { my ($p, $v) = split /\s*[:|]\s*/, $v, 2; $r = $self-> (defined $v ? $p : null); } else { $r = null; } }__; @Method: @@Name: tfqnamesValueURI @@enDesc: The element value (written as ), as URI reference. \ {NOTE:: What should be if list value? \ } @@Param: @@@Name: defaultTypeURI @@@Type: NameURI @@@Description: @@@@lang:en @@@@@: A name URI reference used if it is missing from . @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: Equivalent to . @@Param: @@@Name: defaultForURI @@@Type: ForURI @@@Description: @@@@lang:en @@@@@: A URI reference used if it is missing from . @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: Equivalent to , i.e. . @@Return: @@@Type:ResourceURI @@@nullCase: @@@@enDesc: No value. @@@UndeclaredPrefixException: @@@PerlDef: my $v = $self->; if (defined $v and not ref $v eq 'ARRAY') { __DEEP{ $r = $self-> ($v, $defaultTypeURI, $defaultForURI); }__; } else { $r = null; } @Method: @@Name: elementTypeMatch @@enDesc: Returns whether the element type of this element matches with another element type (either the same element type or this type is a subtype of another type). @@Param: @@@Name: etype @@@Type: ResourceURI @@@enDesc: An element type name URI reference to test. @@Return: @@@Type: DOMMain:boolean::ManakaiDOM:all @@@TrueCase: @@@@enDesc: Either the element type expanded URI reference of this element is same as or it is a sub-element type of . @@@FalseCase: @@@@enDesc: This element is not of . @@@NoDBException: @@@PerlDef: __DEEP{ my $et = $self->; my $rdef = $self-> -> -> ($et); $r = $rdef-> ($etype); }__; @Attr: @@Name: isResourceElement @@enDesc: Whether this element defines a resource or not. \ {NOTE:: An element defines a resource if its element type is or its subtype. \ } @@Get: @@@Type: DOMMain:boolean::ManakaiDOM:all @@@TrueCase: @@@@enDesc: This element defines a resource. @@@FalseCase: @@@@enDesc: This element does not define any resource. @@@NoDBException: @@@PerlDef: __DEEP{ $r = $self-> (); }__; @Attr: @@Name: isPropertyElement @@enDesc: Whether this element is a property or not. \ {NOTE:: An element is a property if its element type is or if its element type's property is or is . \ } @@Get: @@@Type: DOMMain:boolean::ManakaiDOM:all @@@TrueCase: @@@@enDesc: This element is a property. @@@FalseCase: @@@@enDesc: This element is not a property. @@@NoDBException: @@@PerlDef: __DEEP{ my $xn = $self->; if ($xn eq ) { $r = true; } else { my $rdef = $self-> -> -> ($xn); $r = $rdef-> (); } }__; @Attr: @@Name: plImplementation @@enDesc: The object. @@Type: PerlCode:ManakaiPerlCodeImplementation::ManakaiDOM:Perl @@Get: @@@nullCase: @@@@enDesc: There is no implementation that supports the feature version . @@@PerlDef: $r = ($self-> or $self)-> -> ( => '1.0'); @Method: @@Name: plValueCodeFragment @@enDesc: A Perl code fragment for value attribute. @@Param: @@@Name: attrURI @@@Type: AnyURI @@@enDesc: The URI reference name of an attribute. @@@nullCase: @@@@enDesc: This node itself is used. @@Param: @@@Name: disDatabase @@@Type: ManakaiDISDatabase @@@enDesc: The database against which a value is evaluated. @@ForParam: @@ForpParam: @@NamedParam: @@@Name:dataTypeURI @@@Type: ResourceURI @@@enDesc: The URI reference of a data type. It is used to convert untyped value and to define default value if is set to . @@@nullCase: @@@@enDesc: No data type. If the value is untyped, it is treated as if . @@NamedParam: @@@Name:useDefaultValue @@@Type: DOMMain:boolean::ManakaiDOM:all @@@enDesc: Whether some default value should be provided if possible or not. @@Type: MPLCodeFragment @@Return: @@@enDesc: Perl code fragment object for value attribute. @@@nullCase: @@@@enDesc: There is no attribute. @@@UndeclaredPrefixException: @@@RaiseException: @@@@@:NO_PERL_CODE_IMPL_ERR @@@@enDesc: There is no implementation that implements the feature, version . @@@PerlDef: __DEEP{ my $dataType; my $vnode = defined $attrURI ? $self-> ($attrURI, for_arg => $forArg, forp_arg => $forpArg) : $self; my $plimpl = $self->; if ($vnode) { unless ($plimpl) { __UNDEEP{__EXCEPTION{NO_PERL_CODE_IMPL_ERR}__}__; } my $isnull = $vnode-> (, for_arg => $forArg, forp_arg => $forpArg); if ($isnull and $isnull->) { $r = $plimpl-> ('null'); } else { my $vnode_type_uri = $vnode->; my $vnode_value = $vnode->; if ($vnode_type_uri) { my $vnode_type =$disDatabase-> ($vnode_type_uri); if ($vnode_type-> ()) { $r = $plimpl-> ($vnode_value ? true : false); } elsif ($vnode_type-> ()) { $r = $plimpl-> ($vnode-> ($vnode_value, node => $vnode)); } else { ## DISCore:String or some $r = $plimpl-> ($vnode_value); } } elsif ($dataTypeURI) { # if () { #} else { ## DOMMain:DOMString or some $r = $plimpl-> ($vnode_value); #} } else { ## Untyped $r = $plimpl->($vnode_value); } } } # has value if (not $r and $useDefaultValue) { $dataType ||= $disDatabase-> ($dataTypeURI); if ($dataType-> ()) { $r = $plimpl-> (''); } elsif ($dataType-> () or $dataType-> () or $dataType-> () or $dataType-> () or $dataType-> ()) { $r = $plimpl-> ('0'); } elsif ($dataType-> ()) { $r = $plimpl-> ('[]'); } elsif ($dataType-> ()) { $r = $plimpl-> ('{}'); } } }__; @Method: @@Name:plCodeFragment @@enDesc: Converts into Perl code. @@Param: @@@Name:disResource @@@Type:ManakaiDISResourceDefinition @@@enDesc: A resource with which code is evaluated. @@ForParam: @@ForpParam: @@NamedParam: @@@Name:containsStatements @@@Type: DOMMain:boolean::ManakaiDOM:all @@@enDesc: Whether the code is block-level or inline-level. @@Return: @@@Type: MPLCodeFragment @@@enDesc: Perl code converted from this node. @@@disPerlException: @@@PerlDef: __DEEP{ my $plimpl = $self->; my $et = $self->; if ($et eq ) { my $value = $self->; if (defined $value) { __UNDEEP{__EXCEPTION{DISPERL_NO_VALUE_ALLOWED_ERR:: DIS:sourceNode => {$self}, DIS:elementType => {$et}, }__}__; } $r = $plimpl->; for my $c (@{$self-> (for_arg => $forArg, forp_arg => $forpArg)}) { my $ccode = $c-> ($disResource, for_arg => $forArg, forp_arg => $forpArg); $r-> ($ccode) if $ccode; } } elsif ({ => true, => true, }->{$et}) { my ($qname, $const_name, $on) = split /\s*\.\s*/, $self->, 3; my $uri = $self-> ($qname, $disResource-> , $forArg, node => $self); my $const; if (defined $const_name) { my $owner = $disResource->{db}-> ($uri); $owner-> ($self); if ($et eq ) { $const = $owner-> ($const_name); unless (defined $const) { __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:localName => {$const_name}, DIS:sourceNode => {$self}, DIS:elementType => {$et}, DIS:expectedType => {}, }__}__; } } else { $const = $owner-> ($const_name, ); unless (defined $const) { __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:localName => {$const_name}, DIS:sourceNode => {$self}, DIS:elementType => {$et}, DIS:expectedType => {}, }__}__; } } } else { $const = $disResource->{db}-> ($uri); } if ($const-> ()) { $const-> ($self); my $data_type = $const->; my $val = $const->{src}-> (, $disResource->{db}, for_arg => $forArg, forp_arg => $forpArg, data_type_uri => $data_type ->); unless (defined $val) { __UNDEEP{__EXCEPTION{NO_CONST_VALUE_ERR:: DIS:uri => {$const->{uri}}, DIS:localName => {$const->{localName}}, DIS:sourceNode => {$const->{src}}, DIS:elementType => {$et}, }__}__; } if ($containsStatements) { $r = $plimpl->; my $rvar = $plimpl-> ('$', null, 'r'); $r-> ($rvar => $val); } else { $r = $val; } } elsif ($const-> ()) { my $ret = $self-> ($const-> () ? : ($on and $on eq 'set') ? : ); unless ($ret) { __UNDEEP{ if ($const-> ()) { __EXCEPTION{NO_METHOD_RETURN_ERR:: DIS:errResource => {$const}, DIS:sourceNode => {$const->{src}}, DIS:elementType => {$et}, }__; } elsif ($on and $on eq 'set') { __EXCEPTION{NO_ATTR_SET_ERR:: DIS:errResource => {$const}, DIS:sourceNode => {$const->{src}}, DIS:elementType => {$et}, }__; } else { __EXCEPTION{NO_ATTR_GET_ERR:: DIS:errResource => {$const}, DIS:sourceNode => {$const->{src}}, DIS:elementType => {$et}, }__; } }__; # UNDEEP } $r = $ret->; } else { if ($et eq ) { __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:uri => {$const->{uri}}, DIS:localName => {$const->{localName}}, DIS:sourceNode => {$self->{src}}, DIS:expectedType => {}, }__}__; } else { # DISPerl:cloneCode __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:uri => {$const->{uri}}, DIS:localName => {$const->{localName}}, DIS:sourceNode => {$self->{src}}, DIS:expectedType => {}, }__}__; } } } elsif ($et eq ) { my $val = $self-> (null, $disResource->{db}, for_arg => $forArg, forp_arg => $forpArg); if ($containsStatements) { $r = $plimpl->; my $rvar = $plimpl-> ('$', null, 'r'); $r-> ($rvar => $val); } else { $r = $val; } } elsif ({ => true, => true, => true, }->{$et}) { my $prop_uri = $self->; $disResource->{db} -> ($prop_uri) -> ($self); $r = $plimpl->; my $val = $plimpl->; $val-> ('$self->{node}->{'); $val-> ($prop_uri); $val-> ('}'); my $rvar = $plimpl-> ('$', null, 'r'); $r-> ($rvar => $val); if ({ => true, => true}->{$et}) { my $q = $plimpl->; $q-> ($r); $q-> ($plimpl-> ('defined $r'), my $qt = $plimpl->); $qt-> -> ($rvar->clone => my $qtr = $plimpl->); my $cls = $disResource->{db}-> ({ => , => , }->{$et}, for_arg => $forArg); $cls-> ($self); $qtr-> ($cls-> . q[->_get_node_reference ($r)]); $r = $q; } } elsif ($et eq ) { my $prop_uri = $self->; $disResource->{db} -> ($prop_uri) -> ($self); $r = $plimpl->; my $val = $plimpl->; $val-> ('$self->{node}->{'); $val-> ($prop_uri); $val-> ('}'); my $rvar = $plimpl-> ('$', null, 'given'); $r-> ($val => $rvar); my $chk = $self-> (); if ($chk and $chk->) { my $q = $plimpl->; (my $qc = $plimpl->, my $qt = $plimpl->); $qc-> ('$self->{node}->{'); $qc-> (); $qc-> ('}'); my $for_uri = $disResource-> ($forArg)-> () ? $forArg : ; my $cls = $self->{db}-> (, for_arg => $for_uri); my $const = $self->{db}-> (, for_arg => $for_uri); my $subtype = $self->{db}-> (, for_arg => $for_uri); $_-> ($self) for $cls, $const, $subtype; my $context_param = $disResource->; $disResource-> ($qt, $cls, $const, $subtype, {%$context_param}); $r = $q; } # Read-only checking } elsif ($et eq ) { my ($cls, $const, $subtype) = @{$disResource->{db}-> ($self->, $self, node => $self, for_arg => $forArg)}; my $context_param = $disResource->; $disResource-> ($r = $plimpl->, $cls, $const, $subtype, {%$context_param}); } elsif ({ => true, => true, => true, => true, => true, }->{$et}) { # } else { __UNDEEP{__EXCEPTION{UNSUPPORTED_ELEMENT_TYPE_ERR:: DIS:sourceNode => {$self}, DIS:elementType => {$et}, }__}__; } }__; # DEEP ##DISElement ElementTypeBinding: @Name: disPerlException @ElementType: ManakaiDOM:raises @ShadowContent: @@@: DISPERL_NO_VALUE_ALLOWED_ERR @@Description: @@@lang:en @@@@: An element value is specified where it is not allowed. @ShadowSibling: @@ManakaiDOM:raises: @@@@: RESOURCE_NOT_DEFINED_ERR @@@Description: @@@@lang:en @@@@@: An undefined resource is referred or a referred resource is defined but have different type than the one expected. @@ManakaiDOM:raises: @@@@: NO_CONST_VALUE_ERR @@@Description: @@@@lang:en @@@@@: A constant value definition does not have its attribute. @@ManakaiDOM:raises: @@@@: NO_METHOD_RETURN_ERR @@@Description: @@@@lang:en @@@@@: A method definition does not have a child resource. @@ManakaiDOM:raises: @@@@: NO_ATTR_GET_ERR @@@Description: @@@@lang:en @@@@@: An attribute definition does not have a child resource. @@ManakaiDOM:raises: @@@@: NO_ATTR_SET_ERR @@@Description: @@@@lang:en @@@@@: An attribute setter is referred but the attribute definition does not have child resource. @@ManakaiDOM:raises: @@@@: UNSUPPORTED_ELEMENT_TYPE_ERR @@@Description: @@@@lang:en @@@@@: An unsupported type of element has appeared. ClsDef: @ClsQName: ManakaiDISModuleElement @ClsISA: ManakaiDISElement @enDesc: The elements. @Attr: @@Name: requireElement @@enDesc: The child element. The element is newly created if not exist. @@Type: ManakaiDISElement @@Get: @@@PerlDef: __DEEP{ $r = $self-> (, 'Require', make_new_node => true); }__; @Attr: @@Name: defaultForURI @@enDesc: The value of attribute. @@Type: ForURI @@Get: @@@enDesc: The value of child element. If missing, is returned. @@@PerlDef: __DEEP{ my $df = $self-> (, 'DefaultFor'); if ($df) { $r = $df-> || ; } else { $r = ; } }__; @@Set: @@@PerlDef: __DEEP{ $self-> (, 'DefaultFor' => $given); }__; @Attr: @@Name: definingNamespaceURI @@enDesc: The value of attribute, i.e. the URI reference of the namespace that this module primary defines. \ {NOTE:: Defining namespace URI is independent. \ } @@Type: AnyURI @@Get: @@@PerlDef: __DEEP{ my $df = $self-> (, 'Namespace'); if ($df) { $r = $df->; } else { __ASSERT{DISPerl:invariant:: msg => {qq["dis:Namespace" attribute not found]}, }__; } }__; @@Set: @@@PerlDef: __DEEP{ $self-> (, 'Namespace' => $given); }__; ##DISModuleElement ClsDef: @ClsQName: ManakaiDISElementList @enDesc: @@lang:en @@@: Lists of elements. \ {NOTE:: is ; later changes to the tree does not affect this type of objects. \ } ##DISElementList ClsDef: @ClsQName: ManakaiDISComment @ClsISA: ManakaiDISNode @ClsISA: swcfg21:ManakaiSWCFGComment::swcfg21:ForLatest @Description: @@lang:en @@@: comment node objects. ##DISComment ClsDef: @ClsQName: ManakaiDISDocumentFragment @ClsISA: ManakaiDISNode @ClsISA: swcfg21:ManakaiSWCFGDocumentFragment::swcfg21:ForLatest @Description: @@lang:en @@@: document fragment node objects. ##DISDocumentFragment ClsDef: @ClsQName: ManakaiDISDocument @ClsISA: ManakaiDISNode @ClsISA: swcfg21:ManakaiSWCFGDocument::swcfg21:ForLatest @Description: @@lang:en @@@: document node objects. @Attr: @@Name: moduleElement @@enDesc: The element in this document. The element is newly created if not exist. @@Type: ManakaiDISModuleElement @@Get: @@@PerlDef: __DEEP{ $r = $self-> (, 'Module', make_new_node => true); }__; $r = bless $r, ; @Attr: @@Name: disDatabase @@enDesc: Associated database. @@Type: ManakaiDISDatabase @@Get: @@@NoDBException: @@@PerlDef: if ($self->{}->{}) { $r = $self->{}->{}; } else { __EXCEPTION{NO_ASSOCIATED_DB_ERR}__; } @@Set: @@@PerlDef: $self->{}->{} = $given; require Scalar::Util; Scalar::Util::weaken ($self->{}->{}); @Method: @@Name: disChildElements @@enDesc: A list of child elements, with checks. @@ForParam: @@ForpParam: @@Return: @@@Type: ManakaiDISElementList @@@enDesc: The current snapshot of child nodes. @@@PerlDef: $r = bless [], ; __DEEP{ for my $cn (@{$self->}) { next unless $cn-> eq '#element'; my $dn = $cn->{} -> (); next unless $dn-> ($forArg, $forpArg); push @$r, $dn; } }__; @Method: @@Name: disAllChildElements @@enDesc: A list of child elements, without checks. @@Return: @@@Type: ManakaiDISElementList @@@enDesc: The current snapshot of child nodes. @@@PerlDef: $r = bless [], ; __DEEP{ for my $cn (@{$self->}) { next unless $cn-> eq '#element'; my $dn = $cn->{} -> (); push @$r, $dn; } }__; ##DISDocument PropDef: @QName: db @enDesc: Associated database. @rdfs:domain: ManakaiDISDocument @rdfs:range: ManakaiDISDatabase ## -- Definition object database ClsDef: @ClsQName: ManakaiDISDatabase @enDesc: Resource database created from source data. @ClsISA: ManakaiDISExceptionTarget @Method: @@Name: getModule @@Description: @@@lang:en @@@@: Returns a module definition. @@Param: @@@Name: moduleURI @@@Type: ModuleURI @@@Description: @@@@lang:en @@@@@: A module URI reference. @@ForParam: @@Return: @@@Type: ManakaiDISModuleDefinition @@@Description: @@@@lang:en @@@@@: The module definition. @@@PerlDef: my $modURI; if (defined $forArg) { __CODE{tfurisToURI:: $turi => $moduleURI, $furi => $forArg, $uri => $modURI}__; } else { $modURI = $moduleURI; } if (defined $self->{modDef}->{$modURI}) { $r = $self->{modDef}->{$modURI}; } else { $r = $self->{modDef}->{$modURI} = bless { uri => $modURI, db => $self, for => , forp => [], }, ; require Scalar::Util; Scalar::Util::weaken ($r->{db}); } @Method: @@Name: getFor @@Description: @@@lang:en @@@@: Returns a definition object. @@Param: @@@Name: forURI @@@Type: ForURI @@@Description: @@@@lang:en @@@@@: A URI reference. @@@InCase: @@@@Value: @@@@@is-null:1 @@@@Description: @@@@@lang:en @@@@@@: Defaulted to . @@Return: @@@Type: ManakaiDISForDefinition @@@PerlDef: $forURI = unless defined $forURI; if (defined $self->{forDef}->{$forURI}) { $r = $self->{forDef}->{$forURI}; } else { $r = $self->{forDef}->{$forURI} = bless { uri => $forURI, isa => { => true}, revISA => {}, db => $self, }, ; $self->{forDef}->{}->{revISA}->{$forURI} = true; require Scalar::Util; Scalar::Util::weaken ($r->{db}); } @Method: @@Name: getResource @@Description: @@@lang:en @@@@: Returns a resource definition. @@Param: @@@Name: resourceURI @@@Type: ResourceURI @@@Description: @@@@lang:en @@@@@: A resource URI reference. @@@nullCase: @@@@Description: @@@@@lang:en @@@@@@: Defaulted to . @@ForParam: @@Return: @@@Type: ManakaiDISResourceDefinition @@@Description: @@@@lang:en @@@@@: The resource definition. @@@PerlDef: $resourceURI = unless defined $resourceURI; my $resURI; if (defined $forArg) { __CODE{tfurisToURI:: $turi => $resourceURI, $furi => $forArg, $uri => $resURI}__; } else { $resURI = $resourceURI; } if (defined $self->{resDef}->{$resURI}) { $r = $self->{resDef}->{$resURI}; } else { $r = $self->{resDef}->{$resURI} = bless { uri => $resURI, aliasURI => {$resURI => true}, subOf => {}, supOf => {}, db => $self, for => , forp => [], seq => -1, }, ; require Scalar::Util; Scalar::Util::weaken ($r->{db}); } @Method: @@Name: getSourceFile @@enDesc: Gets source document. @@Param: @@@Name: fileName @@@Type: FileURI @@@enDesc: A URI reference identifying a file. @@Return: @@@Type: ManakaiDISDocument @@@enDesc: The source document. @@@nullCase: @@@@enDesc: No document associated with that . @@@PerlDef: $r = $self->{}->{$fileName}; @Method: @@Name: setSourceFile @@enDesc: Puts source document object. @@Param: @@@Name: fileName @@@Type: FileURI @@@enDesc: A URI reference identifying a file. If there is already a source document, then the association has been updated. @@Param: @@@Name: doc @@@Type: ManakaiDISDocument @@@enDesc: The document object to set. @@Return: @@@PerlDef: $self->{}->{$fileName} = $doc; @Method: @@Name: loadModule @@enDesc: Loads definitions from a document. @@Param: @@@Name: doc @@@Type:ManakaiDISDocument @@@enDesc: The source document object. Its must be this database. @@Param: @@@Name: resolver @@@Type: DISModuleResolver @@@enDesc: The resolver to convert module name into document object. @@ForParam: @@Return: @@@RaiseException: @@@@@: NO_MODULE_QNAME_ERR @@@@enDesc: The element must have a attribute. @@@RaiseException: @@@@@: UNABLE_TO_GET_MODULE_ERR @@@@enDesc: The implementation is unable to get a module source. @@@ForDefDupException: @@@ForDefNoQNameException: @@@ResDefDupException: @@@ElementNotAllowedException: @@@RaiseException: @@@@@:NO_REQUIRED_ATTR_ERR @@@@enDesc: The element does not have attribute. @@@PerlDef: $resolver = bless $resolver, if ref $resolver eq 'CODE'; ## -- Module Name, URI $forArg = unless defined $forArg; my $mod_node; my $mod_name_node; __DEEP{ $mod_node = $doc->; $mod_name_node = $mod_node-> (, 'QName'); unless ($mod_name_node) { __UNDEEP{ __EXCEPTION{NO_MODULE_QNAME_ERR:: DIS:sourceNode => {$mod_node}, }__; }__; } my $mod_name_uri = $mod_name_node ->; my $mod = $self-> ($mod_name_uri, for_arg => $forArg); unless ($mod->) { ## -- Initializes Module Definition Object $mod->{nameURI} = $mod_name_uri; $mod->{localName} = $mod_name_node->; $mod->{namespaceURI} = $mod_name_node->; $mod->{for} = $forArg; $mod->{src} = $mod_node; $mod->{} = true; $self-> ($mod->{nameURI} => $doc); $mod->{} = $mod->{src} -> -> (); ## -- Loads "for" definition my $root_elements = $doc->; if ($mod->{for} eq ) { for my $el (@$root_elements) { next unless $el-> eq ; $self-> ($mod, $el); } } ## -- Loads "for all" my $rmod = $self-> ($mod->{nameURI}, for_arg => ); unless ($rmod->) { my $rdoc = $resolver-> ($self, $rmod->{uri}, $mod->{namespaceURI}, $mod->{localName}, ); unless ($rdoc) { __UNDEEP{ __EXCEPTION{UNABLE_TO_GET_MODULE_ERR:: DIS:uri => {$rmod->{uri}}, DIS:namespaceURI => {$mod->{namespaceURI}}, DIS:localName => {$mod->{localName}}, DIS:for => {}, DIS:sourceNode => {$mod->{src}}, }__; }__; } $self-> ($rdoc, $resolver, for_arg => ); } # Unless "for all" loaded ## -- Loads Required Modules ## NOTE:: "dis:For" is not allowed since "dis:ForDef" is not read my $req_node = $mod_node->; for my $rm (@{$req_node->}) { next unless $rm-> eq ; my ($uri, $nuri, $ln, $for); my $mqn = $rm-> (, 'QName'); if ($mqn) { my $mqv = $mqn->; my $mqp = $mqn-> ($mqv, node => $mqn); ($nuri, $ln) = @$mqp; } else { my $mn = $rm-> (, 'Name'); if ($mn) { $nuri = $mod->{namespaceURI}; $ln = $mn->; } else { $nuri = $mod->{namespaceURI}; $ln = $mod->{localName}; } } my $wfn = $rm-> (, 'WithFor'); if ($wfn) { $for = $wfn->; } else { $for = $mod->{for}; } my $rmod = $self-> ($nuri . $ln, for_arg => $for); unless ($rmod->) { my $rdoc = $resolver-> ($self, $rmod->{uri}, $nuri, $ln, $for); unless ($rdoc) { __UNDEEP{ __EXCEPTION{UNABLE_TO_GET_MODULE_ERR:: DIS:uri => {$rmod->{uri}}, DIS:namespaceURI => {$nuri}, DIS:localName => {$ln}, DIS:for => {$for}, DIS:sourceNode => {$rm}, }__; }__; } $self-> ($rdoc, $resolver, for_arg => $for); } } # Child Module elements ## -- Loads child resources $root_elements = $doc-> (for_arg => $forArg); for my $el (@$root_elements) { if ($el->) { $self-> ($mod, null, null, $el, for_arg => $forArg); } else { my $et = $el->; if ({ => 1, => 1, => 1, }->{$et}) { # } else { __UNDEEP{ __EXCEPTION{ELEMENT_NOT_ALLOWED_ERR:: DIS:elementType => {$et}, DIS:sourceNode => {$el}, DIS:uri => {$mod->{uri}}, }__; }__; } } # element types } my $dn = $mod_node-> (, 'Namespace'); unless ($dn and defined $dn->) { __UNDEEP{ __EXCEPTION{NO_REQUIRED_ATTR_ERR:: DIS:elementType => {}, DIS:sourceNode => {$mod_node}, }__; }__; } } # Unless this module loaded }__; # Deep @Method: @@Name: loadFor @@enDesc: Loads definition of a from a element. @@Param: @@@Name: mod @@@Type: ManakaiDISModuleDefinition @@@enDesc: The module in which the to load is defined. @@Param: @@@Name: el @@@Type:ManakaiDISElement @@@enDesc: The source element object. @@Return: @@@ForDefDupException: @@@ForDefNoQNameException: @@@ElementNotAllowedException: @@@PerlDef: __DEEP{ my $qn_node = $el-> (, 'QName'); unless ($qn_node) { __UNDEEP{ __EXCEPTION{NO_FOR_QNAME_ERR:: DIS:sourceNode => {$qn_node}, }__; }__; } my $qn_uri = $qn_node->; my $for = $self-> ($qn_uri); unless ($for->) { ## -- Initializes "For" Definition Object $for->{src} = $el; $for->{} = true; $for->{} = $mod->{uri}; for my $ce (@{$el->}) { my $xn = $ce->; if ($xn eq or $xn eq ) { my $sfor = $self-> ($ce->); $for-> ($sfor); $sfor-> ($ce); ## TODO: warn if dis:Implement } elsif ({ => 1, => 1, => 1, => 1, }->{$xn}) { # } else { __UNDEEP{ __EXCEPTION{ELEMENT_NOT_ALLOWED_ERR:: DIS:elementType => {$xn}, DIS:sourceNode => {$ce}, DIS:uri => {$mod->{uri}}, }__; }__; } } } else { __UNDEEP{ __EXCEPTION{FOR_ALREADY_DEFINED_ERR:: DIS:sourceNode => {$el}, DIS:anotherSourceNode => {$for->{src}}, }__; }__; } # isDefine? }__; # DEEP @Method: @@Name: loadResource @@enDesc: Loads definition of a resource from a element. @@Param: @@@Name: mod @@@Type: ManakaiDISModuleDefinition @@@enDesc: The module in which the resource to load is defined. @@Param: @@@Name: parentResource @@@Type: ManakaiDISResourceDefinition @@@enDesc: The (static) parent resource in which the resource to load is defined. @@@nullCase: @@@@enDesc: The resource to load is a root resource, i.e. is a direct child of the document node. @@Param: @@@Name: dynParent @@@Type: ManakaiDISResourceDefinition @@@enDesc: The dynamic parent resource of the resource to load. @@@nullCase: @@@@enDesc: If this resource is a root resource, i.e. is a direct child of the document node. @@Param: @@@Name: el @@@Type:ManakaiDISElement @@@enDesc: The source element object. @@ForParam: @@ForpParam: @@Return: @@@ResDefDupException: @@@ElementNotAllowedException: @@@PerlDef: $forArg = unless defined $forArg; $forpArg ||= []; __DEEP{ ## -- Node names ## Unique resource identifier generated from node id my $node_id = $el->; my $node_uri; __CODE{tfpurisToURI:: $turi => $node_id, $furi => $forArg, $forp => $forpArg, $uri => $node_uri}__; ## User defined resource identifiers my $qn_node = $el-> (, for_arg => $forArg, forp_arg => $forpArg); my $res; if ($qn_node) { my $qn_uri = $qn_node->; $res = $self-> ($qn_uri, for_arg => $forArg); if ($res->) { __UNDEEP{ __EXCEPTION{RESOURCE_ALREADY_DEFINED_ERR:: DIS:uri => {$res->{uri}}, DIS:sourceNode => {$qn_node}, DIS:anotherSourceNode => {$res->{src}}, }__; }__; } $res->{nameURI} = $qn_uri; $res->{localName} = $qn_node->; $res->{namespaceURI} = $qn_node->; } else { ## Anonymous or local my $n_node = $el-> (, for_arg => $forArg, forp_arg => $forpArg); if ($n_node) { if ($parentResource) { my $puri = $parentResource->{uri}; my $ru; my $ln = $n_node->; __CODE{getChildResourceURI:: $parentURI => $puri, $localName => $ln, $result => $ru}__; $res = $self-> ($ru, for_arg => $forArg); $res->{nameURI} = $ru; $res->{localName} = $n_node->; $res->{} = true; } else { ## Root local name resource my $ln = $n_node->; my $ns_uri = $mod-> (, null); my $qn_uri = $ns_uri . $ln; $res = $self-> ($qn_uri, for_arg => $forArg); if ($res->) { __UNDEEP{ __EXCEPTION{RESOURCE_ALREADY_DEFINED_ERR:: DIS:uri => {$res->{uri}}, DIS:sourceNode => {$n_node}, DIS:anotherSourceNode => {$res->{src}}, }__; }__; } $res->{nameURI} = $qn_uri; $res->{namespaceURI} = $ns_uri; $res->{localName} = $ln; } } else { $res = $self-> ($node_uri); $res->{} = true; } } # anon $res->{for} = $forArg; $res->{forp} = $forpArg; $res->{src} = $el; $res->{} = $mod->{uri}; $mod-> (, $res); $res->{} = $parentResource ? $parentResource->{uri} : null; $res->{} = $dynParent ? $dynParent->{uri} : null; unless ($res->{uri} eq $node_uri) { my $nu_res = $self-> ($node_uri); $res-> ($nu_res); } $res->{} = true; $res->{seq} = $self->{seq}++; ## -- Alias my $al_node = $el-> (, for_arg => $forArg, forp_arg => $forpArg); if ($al_node) { my $canon_uri = $al_node-> ($node_id, $forArg); my $canon_res = $self-> ($canon_uri); $canon_res-> ($al_node); $canon_res-> ($res, node => $al_node); $res = $canon_res; } ## -- Registers as child $parentResource-> (, $res) if $parentResource; $dynParent-> (, $res) if $dynParent; my $is_multires = false; my @props; my @cres; my @ce0 = @{$el-> (for_arg => $forArg, forp_arg => $forpArg)}; while (@ce0) { my $ce = shift @ce0; if ($ce-> ()) { my $type_uri = $ce->; $res->{}->{$type_uri} = true; my $type = $self-> ($type_uri); $type-> ($ce); if ($type-> ()) { $is_multires = true; } } elsif ($ce-> ()) { my $sres = $self-> ($ce-> ($node_id, $forArg)); $res-> ($sres); } elsif ($ce->) { push @cres, $ce; } else { ## Property and invalid element is not checked, since not ## all property definitions has loaded at this stage. push @props, $ce; } } # @ce0 ## -- Child resources unless ($is_multires) { for my $re (@cres) { unless ($al_node) { $self-> ($mod, $res, $res, $re, for_arg => $forArg, forp_arg => $forpArg); } else { my $ac = $re-> (, for_arg => $forArg, forp_arg => $forpArg); if ($ac and $ac->) { $self-> ($mod, $res, $res, $re, for_arg => $forArg, forp_arg => $forpArg); } } } } ## -- Multiple representations if ($is_multires) { for my $pe (@props) { if ($pe-> ()) { my $for_uri = $pe->; my $for = $self-> ($for_uri); $for-> ($pe); $self-> ($mod, $parentResource, $res, $el, for_arg => $forArg, forp_arg => [@{$forpArg}, $for_uri]); } } } }__; # DEEP @Method: @@Name: checkUndefinedResource @@enDesc: Checks whether there is referred but undefined resource or not. @@Return: @@@RaiseException: @@@@@: FOR_NOT_DEFINED_ERR @@@@enDesc: There is a that is referred but not defined. @@@RaiseException: @@@@@: RESOURCE_NOT_DEFINED_ERR @@@@enDesc: There is a resource that is referred but not defined. @@@PerlDef: for my $fd (values %{$self->{forDef}}) { if (my $ref = $fd-> and not $fd->) { __EXCEPTION{FOR_NOT_DEFINED_ERR:: DIS:uri => {$fd->{uri}}, DIS:sourceNode => {$ref}, }__; } } for my $fd (values %{$self->{resDef}}) { if (my $ref = $fd-> and not $fd->) { __EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:uri => {$fd->{uri}}, DIS:sourceNode => {$ref}, }__; } } @Method: @@Name: plStore @@enDesc: Saves this database to an external file. \ {NOTE:: Saved files can be loaded by . \ } @@Param: @@@Name: fileName @@@Type: DISLang:String::ManakaiDOM:all @@@enDesc: An environment-dependent file name of external database to save. \ {NOTE:: If there is already a file named as , then it is overwritten. \ } @@Return: @@@SimpleException: @@@PerlDef: use Storable qw/nstore/; local $Carp::CarpLevel = $Carp::CarpLevel + 1; nstore $self, $fileName; @Method: @@Name: xcrefToResource @@enDesc: Returns a resource object selected by an exception code reference (). @@Param: @@@Name: xcref @@@Type: DOMMain:XCodeRef::ManakaiDOM:all @@@enDesc: Exception code to select. @@Param: @@@Name: contextNode @@@Type: ManakaiDISElement @@@enDesc: A context element node. Namespace prefixes in are resolved against this node. @@ForParam: @@NodeParam: @@Return: @@@Type: Perl:ARRAY::ManakaiDOM:all @@@enDesc: A reference to the array containing two or three resource definitions (). The first (index ) resource is an exception class. The second (index ) resource is an exception code constant. The third (index ) resource is an exception subtype or if the reference identifies no subtype. @@@RaiseException: @@@@@: RESOURCE_NOT_DEFINED_ERR @@@@enDesc: The resource identified by the is not defined or not an exception. @@@PerlDef: my ($q1, $q2, $q3) = split /\s*\.\s*/, $xcref, 3; my $r = []; __DEEP{ if (defined $q3) { $r->[2] = $self-> ($contextNode-> ($q3, null, $forArg, node => $node)); $r->[1] = $r->[2]-> (); } elsif (defined $q2) { if ($q2 =~ /:/) { $r->[1] = $self-> ($contextNode-> ($q2, null, $forArg, node => $node)); } else { $r->[0] = $self-> ($contextNode-> ($q1, null, $forArg, node => $node)); $r->[1] = $r->[0]-> ($q2); } } else { ## $q1 only $r->[2] = $self-> ($contextNode-> ($q1, null, $forArg, node => $node)); if ($r->[2]-> ()) { $r->[1] = $r->[2]-> (); } else { $r->[1] = $r->[2]; CORE::delete $r->[2]; } } if ($r->[2] and not $r->[2]-> ()) { __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:uri => {$r->[2]->{uri}}, DIS:expectedType => {}, DIS:sourceNode => {$node}, DIS:sourceCode => {$xcref}, }__}__; } $r->[2]-> ($node or $contextNode) if $r->[2]; if (not $r->[1] or not $r->[1]-> ()) { __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:uri => {$r->[1]->{uri}}, DIS:localName => {$r->[1]->{localName}}, DIS:expectedType => {}, DIS:sourceNode => {$node}, DIS:sourceCode => {$xcref}, }__}__; } $r->[1]-> ($node or $contextNode); unless ($r->[0]) { my $cg = $r->[1]-> (); $r->[0] = $cg-> () if $cg; } if (not $r->[0] or not $r->[0]-> ()) { __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:uri => {$r->[0]->{uri}}, DIS:localName => {$r->[0]->{localName}}, DIS:expectedType => {}, DIS:sourceNode => {$node}, DIS:sourceCode => {$xcref}, }__}__; } $r->[0]-> ($node or $contextNode); }__; ##DISDatabase PropDef: @QName: resource @enDesc: Resources defined in a module. @rdfs:range: ManakaiDISResourceDefinition @rdfs:domain: ManakaiDISModuleDefinition PropDef: @QName: dis2pm:parentResource @enDesc: Static parent resource. No parent for root resources. PropDef: @QName: dynamicParentResource @enDesc: Dynamic parent resource. No parent for root resources. PropDef: @QName: childResource @enDesc: Static child resources. PropDef: @QName: dynamicChildResource @enDesc: Dynamic child resources. ElementTypeBinding: @Name: ForDefDupException @ElementType: ManakaiDOM:raises @ShadowContent: @@@: FOR_ALREADY_DEFINED_ERR @@Description: @@@lang:en @@@@: The is already defined elsewhere. ElementTypeBinding: @Name: ForDefNoQNameException @ElementType: ManakaiDOM:raises @ShadowContent: @@@: NO_FOR_QNAME_ERR @@Description: @@@lang:en @@@@: A element must have a attribute. ElementTypeBinding: @Name: ResDefDupException @ElementType: ManakaiDOM:raises @ShadowContent: @@@: RESOURCE_ALREADY_DEFINED_ERR @@Description: @@@lang:en @@@@: The resource is already defined elsewhere. ElementTypeBinding: @Name: ElementNotAllowedException @ElementType: ManakaiDOM:raises @ShadowContent: @@@: ELEMENT_NOT_ALLOWED_ERR @@Description: @@@lang:en @@@@: An element has found where it is not allowed. IFClsDef: @QName: @@@: DISModuleResolver @@ForCheck: ForIF @QName: @@@: ManakaiDISModuleResolver @@ForCheck: ForClass @enDesc: Objects implementing interface are used to convert module name into document object. \ {NOTE:: It is also acceptable to pass a reference as a method parameter where is expected. \ } @Method: @@Name: uriToDocument @@enDesc: Returns a document from module name information. @@Param: @@@Name: disDB @@@Type: ManakaiDISDatabase @@@enDesc: The database. @@Param: @@@Name: moduleURI @@@Type: ModuleURI @@@enDesc: The URI reference of the module. \ {NOTE:: This parameter is redundant, since it can be composed from other three parameters. \ } @@Param: @@@Name: moduleNamespaceURI @@@Type: AnyURI @@@enDesc: The namespace URI of the module name. @@Param: @@@Name: moduleLocalName @@@Type: DISCore:LocalName::ManakaiDOM:all @@@enDesc: The local name of the module name. @@Param: @@@Name: moduleFor @@@Type: ForURI @@@enDesc: The URI reference for which the module is defined. @@Return: @@@Type: ManakaiDISDocument @@@enDesc: The document. It don't have to be a newly created object. @@@nullCase: @@@@enDesc: The method is unable to resolve the reference. @@@PerlDef: $r = $self->(@_); @ManakaiDOM:inputNormalizer: @@ContentType: lang:Perl @@@: $INPUT = bless $INPUT, if ref $INPUT eq 'CODE'; @@ImplNote: @@@lang:en @@@@: does not support non-datatype input normalizers yet. ##DISModuleResolver PropDef: @QName: sourceFile @enDesc: Source documents. @rdfs:domain: ManakaiDISDatabase @rdfs:range: ManakaiDISDocument ClsDef: @ClsQName: ManakaiDISModuleDefinition @enDesc: module definitions. @ClsISA: ManakaiDISPropertyAccessor @ClsISA: ManakaiDISExceptionTarget @Attr: @@Name: uri @@Type: ModuleURI @@Description: @@@lang:en @@@@: The URI reference of this module. @@Get: @@@PerlDef: $r = $self->{uri}; @Attr: @@Name: nameURI @@Type: NameURI @@enDesc: The URI reference of this module, without identifier. @@Get: @@@PerlDef: $r = $self->{nameURI}; @Attr: @@Name: localName @@enDesc: The local name of this module. @@Type: DISCore:LocalName::ManakaiDOM:all @@Get: @@@PerlDef: $r = $self->{localName}; @Attr: @@Name: namespaceURI @@Type: AnyURI @@enDesc: The namespace URI of the name of this resource. @@Get: @@@PerlDef: $r = $self->{namespaceURI}; @Attr: @@Name: forURI @@Type: ForURI @@enDesc: The URI reference for which this module is defined. @@Get: @@@PerlDef: $r = $self->{for}; @Attr: @@Name: isDefined @@Description: @@@lang:en @@@@: Whether this module is defined or not. @@Type: DOMMain:boolean::ManakaiDOM:all @@Get: @@@PerlDef: $r = $self->{}; @Attr: @@Name: plFullyQualifiedName @@enDesc: The fully-qualified Perl class package name. @@Type: Perl:package-name::ManakaiDOM:all @@Get: @@@NoPerlModuleNameException: @@@PerlDef: __DEEP{ my $mg = $self->{db}-> ($self->{namespaceURI}); unless ($self->) { __UNDEEP{ __EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:uri => {$self->{namespaceURI}}, DIS:sourceNode => {$self->{src}}, }__; }__; } my $an = $mg->{src}-> (, for_arg => $self->{for}, media_type => , default_media_type => ); if ($an) { $r = $an->; $r =~ s/::$//g; $r .= '::' . $self->{localName}; my $sf = $an-> (, for_arg => $self->{for}, media_type => , default_media_type => ); if ($sf) { $r .= $sf->; } } else { $r = ($mg->{localName} || 'main') . '::' . $self->{localName}; } }__; @Attr: @@Name: plInterfaceName @@enDesc: The fully-qualified Perl interface package name. @@Type: Perl:package-name::ManakaiDOM:all @@Get: @@@NoPerlModuleNameException: @@@PerlDef: __DEEP{ my $mg = $self->{db}-> ($self->{namespaceURI}); unless ($self->) { __UNDEEP{ __EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:uri => {$self->{namespaceURI}}, DIS:sourceNode => {$self->{src}}, }__; }__; } my $an = $mg->{src}-> (, for_arg => $self->{for}, forp_arg => [], media_type => , default_media_type => ); if ($an) { $r = $an->; $r =~ s/::$//g; my $sf = $an-> (, for_arg => $self->{for}, forp_arg => [], media_type => , default_media_type => ); if ($sf) { $r .= $sf->; } } else { $r = $self->; } }__; @Method: @@Name: plAddRequireModule @@enDesc: Adds a module into the list of modules that defines a Perl module file referred by Perl module file defined by this module. @@Param: @@@Name: moduleArg @@@Type: ManakaiDISModuleDefinition @@@enDesc: A module definition. @@Return: @@@RaiseException: @@@@@: RESOURCE_NOT_DEFINED_ERR @@@@enDesc: The module group to which belongs is not defined. @@@PerlDef: __DEEP{ my $pack = $moduleArg->; $self->{}->{$pack} = true; }__; ##DISModuleDefinition PropDef: @QName: plRequireModule @enDesc: A list of Perl package name that this resource is referring. ElementTypeBinding: @Name: NoPerlModuleNameException @ElementType: ManakaiDOM:raises @ShadowContent: @@@: RESOURCE_NOT_DEFINED_ERR @@Description: @@@lang:en @@@@: The module group corresponding to the namespace URI of this module is not defined. ClsDef: @ClsQName: ManakaiDISForDefinition @Description: @@lang:en @@@: definitions. @ClsISA: ManakaiDISExceptionTarget @Attr: @@Name: uri @@Type: ForURI @@Description: @@@lang:en @@@@: The URI reference of this . @@Get: @@@PerlDef: $r = $self->{uri}; @IntMethod: @@Operator: @@@@:eq @@@ContentType: lang:Perl @@enDesc: Whether two definitions are equal or not. Two definitions are equal iff one's URI reference is one of another's URI reference. \ {NOTE:: Aliases for is not allowed. \ } @@ImplNote: @@@lang:en @@@@: In the current implementation, two are equal iff two are equal as reference. @@Param: @@@Name: anotherFor @@@Type: ManakaiDISForDefinition @@@enDesc: Another definition to compare. @@Return: @@@Type: DOMMain:boolean::ManakaiDOM:all @@@enDesc: Whether two resources are equal or not. @@@PerlDef: if (UNIVERSAL::isa ($anotherFor, )) { $r = $self->{uri} eq $anotherFor->{uri}; } else { $r = false; } @Method: @@Name: isaURI @@Description: @@@lang:en @@@@: Whether this is-a another or not. @@Param: @@@Name: superURI @@@Type: ForURI @@@Description: @@@@lang:en @@@@@: Another URI reference to test. @@Return: @@@Type: DOMMain:boolean::ManakaiDOM:all @@@TrueCase: @@@@enDesc: is a super- of this . @@@FalseCase: @@@@enDesc: is not a super- of this . @@@PerlDef: $r = $self->{uri} eq $superURI ? true : $self->{isa}->{$superURI}; @Attr: @@Name: isDefined @@Description: @@@lang:en @@@@: Whether this is already defined or not. @@Type: DOMMain:boolean::ManakaiDOM:all @@Get: @@@TrueCase: This is already defined. @@@FalseCase: This is not defined. @@@PerlDef: $r = $self->{}; @Attr: @@Name: isReferred @@Description: @@@lang:en @@@@: Whether this is referred somewhere or not. @@Type: ManakaiDISElement @@Get: @@@InCase: @@@@Type:ManakaiDISElement @@@@enDesc: This is referred by the element. @@@nullCase: This is not referred. @@@PerlDef: $r = $self->{}; @@Set: @@@InCase: @@@@Type:ManakaiDISElement @@@@enDesc: This is referred by the element. @@@PerlDef: $self->{} = $given if $given; @Attr: @@Name: definingModule @@Description: @@@lang:en @@@@: The module in which this is defined. @@Type: ManakaiDISModuleDefinition @@Get: @@@Description: @@@@lang:en @@@@@: The module object. @@@nullCase: @@@@Description: @@@@@lang:en @@@@@@: This is not associated to any module. @@@PerlDef: $r = $self->{db} -> ($self->{}) if defined $self->{}; @Method: @@Name: addISA @@enDesc: Adds a to the list of super- of this . @@Param: @@@Name: superFor @@@Type: ManakaiDISForDefinition @@@enDesc: A definition object. @@Return: @@@PerlDef: my @from = ($self->{uri}, grep {$self->{revISA}->{$_}} keys %{$self->{revISA}}); my @to = ($superFor->{uri}, grep {$superFor->{isa}->{$_}} keys %{$superFor->{isa}}); __DEEP{ for my $from (@from) { for my $to (@to) { $self->{db}-> ($from)->{isa}->{$to} = true; $self->{db}-> ($to)->{revISA}->{$from} = true; } } }__; ##DISForDefinition ClsDef: @ClsQName: ManakaiDISResourceDefinition @enDesc: resource definitions. @ClsISA: ManakaiDISPropertyAccessor @ClsISA: ManakaiDISExceptionTarget @Attr: @@Name: uri @@Type: ResourceURI @@Description: @@@lang:en @@@@: The URI reference of this resource. @@Get: @@@PerlDef: $r = $self->{uri}; @Attr: @@Name: nameURI @@Type: NameURI @@enDesc: The URI reference of this resource, without identifier. @@Get: @@@nullCase: @@@@enDesc: This resource does not have its name URI reference. @@@PerlDef: $r = $self->{nameURI}; @Attr: @@Name: localName @@enDesc: The local name of this resource. @@Type: DISCore:LocalName::ManakaiDOM:all @@Get: @@@nullCase: @@@@enDesc: This resource does not have its local name. @@@PerlDef: $r = $self->{localName}; @Attr: @@Name: namespaceURI @@Type: AnyURI @@enDesc: The namespace URI of the name of this resource. @@Get: @@@nullCase: The name of this resource does not have its namespace or this resource does not have its name. @@@PerlDef: $r = $self->{namespaceURI}; @Attr: @@Name: isAnonymous @@enDesc: Whether this resource has name or not. @@Type: DOMMain:boolean::ManakaiDOM:all @@Get: @@@TrueCase: This resource does not have any global unique name. is a temporary URI reference. @@@FalseCase: This resource does have its formal name. is a URI reference generated from the name and the URI reference of this resource. @@@PerlDef: $r = $self->{}; @Attr: @@Name: forURI @@enDesc: The URI reference for which this resource is defined. @@Type:ForURI @@Get: @@@PerlDef: $r = $self->{for}; @Attr: @@Name: forpURI @@enDesc: The URI references for which this resource is defined. @@Type: ForURIList @@Get: @@@enDesc: List of URI references. Note that this list is . @@@PerlDef: $r = [@{$self->{forp}}]; @Method: @@Name: isForURI @@enDesc: Tests whether this resource is defined for a or URI reference or not. @@Param: @@@Name:forURI @@@Type:ForURI @@@enDesc: A URI reference to test. @@Return: @@@Type: DOMMain:boolean::ManakaiDOM:all @@@TrueCase: @@@@enDesc: This resource is for . @@@FalseCase: @@@@enDesc: This resource is not for . @@@PerlDef: __DEEP{ for my $this_for_uri ($self->{for}, @{$self->{forp}}) { if ($this_for_uri eq $forURI) { ## Shortcut $r = true; last; } my $this_for = $self->{db}-> ($this_for_uri); if ($this_for-> ($forURI)) { $r = true; last; } } }__; @Method: @@Name: isSubsetOfURI @@Description: @@@lang:en @@@@: Whether this resource is a subset of another resource or not. @@Param: @@@Name: superURI @@@Type: ResourceURI @@@Description: @@@@lang:en @@@@@: Another resource URI reference to test. @@Return: @@@Type: DOMMain:boolean::ManakaiDOM:all @@@TrueCase: @@@@enDesc: is a super-resource of this resource. @@@FalseCase: @@@@enDesc: is not a super-resource of this resource. @@@PerlDef: $r = $self->{aliasURI}->{$superURI} || $self->{subOf}->{$superURI}; @Method: @@Name: addSuperResource @@enDesc: Adds a resource to the list of super-resource of this resource. @@Param: @@@Name: superRes @@@Type: ManakaiDISResourceDefinition @@@enDesc: A resource definition object. @@Return: @@@PerlDef: my @from = ($self->{uri}, grep {$self->{supOf}->{$_}} keys %{$self->{supOf}}); my @to = ($superRes->{uri}, grep {$superRes->{subOf}->{$_}} keys %{$superRes->{subOf}}); __DEEP{ for my $from (@from) { for my $to (@to) { $self->{db}-> ($from)->{subOf}->{$to} = true; $self->{db}-> ($to)->{supOf}->{$from} = true; } } }__; @Attr: @@Name: isDefined @@Description: @@@lang:en @@@@: Whether this resource is already defined or not. @@Type: DOMMain:boolean::ManakaiDOM:all @@Get: @@@TrueCase: This resource is already defined. @@@FalseCase: This resource is not defined. @@@PerlDef: $r = $self->{}; @Attr: @@Name: isReferred @@Description: @@@lang:en @@@@: Whether this resource is referred or not. @@Type: ManakaiDISElement @@Get: @@@enDesc: An element that referres this resource. @@@nullCase: This resource is not referred. @@@PerlDef: $r = $self->{}; @@Set: @@@enDesc: An element that referres this resource. @@@PerlDef: $self->{} = $given if $given; @Attr: @@Name: definingModule @@Description: @@@lang:en @@@@: The module in which this resource is defined. \ {NOTE:: Method name should have been or some. \ } @@Type: ManakaiDISModuleDefinition @@Get: @@@Description: @@@@lang:en @@@@@: The module object. @@@nullCase: @@@@Description: @@@@@lang:en @@@@@@: This resource is not associated to any module. @@@PerlDef: $r = $self->{db} -> ($self->{}) if defined $self->{}; @@Set: @@@Description: @@@@lang:en @@@@@: The module object to which the is set. @@@PerlDef: $self->{} = $given->; @Method: @@Name: mergeAsAlias @@enDesc: Merges another resource definition as an alias of this resource. @@Param: @@@Name: aliasResource @@@Type: ManakaiDISResourceDefinition @@@enDesc: A resource to merge. \ {NOTE:: After merging all references to should be discarded. \ } @@NodeParam: @@Return: @@@RaiseException: @@@@@:MERGE_ITSELF_ERR @@@@@@enDesc: An attempt is made to merge this resource itself. @@@PerlDef: if ($self eq $aliasResource) { __EXCEPTION{MERGE_ITSELF_ERR:: DIS:uri => {$self->{uri}}, DIS:sourceNode => {$node}, }__; } for my $uri ($aliasResource->{uri}, grep {$aliasResource->{aliasURI}->{$_}} keys %{$aliasResource->{aliasURI}}) { $self->{aliasURI}->{$uri} = true; $self->{db}->{resDef}->{$uri} = $self; $self->{subOf}->{$uri} = true; $self->{supOf}->{$uri} = true; } for my $uri (grep {$aliasResource->{subOf}->{$_}} keys %{$aliasResource->{subOf}}) { $self->{subOf}->{$uri} = true; } for my $uri (grep {$aliasResource->{supOf}->{$_}} keys %{$aliasResource->{supOf}}) { $self->{supOf}->{$uri} = true; } my @from = grep {$self->{supOf}->{$_}} keys %{$self->{supOf}}; my @to = grep {$self->{subOf}->{$_}} keys %{$self->{subOf}}; __DEEP{ for my $from (@from) { for my $to (@to) { $self->{db}-> ($from)->{subOf}->{$to} = true; $self->{db}-> ($to)->{supOf}->{$from} = true; } } }__; @Method: @@Name: isTypeURI @@enDesc: Tests whether this resource is of a type or not. @@Param: @@@Name: typeURI @@@Type: ResourceURI @@@enDesc: A type URI reference to test. @@Return: @@@Type: DOMMain:boolean::ManakaiDOM:all @@@TrueCase: @@@@enDesc: This is a resource. @@@FalseCase: @@@@enDesc: This is not a resource. @@@PerlDef: if ($self->{}->{$typeURI}) { $r = $self->{}->{$typeURI}; } else { for my $t_type_uri (grep {$self->{}->{$_}} keys %{$self->{}}) { my $t_type = $self->{db}-> ($t_type_uri); if ($t_type-> ($typeURI)) { $self->{}->{$typeURI} = $r = true; last; } } } @Attr: @@Name: plName @@enDesc: The Perl name of this resource. @@Get: @@@Type: DISLang:String::ManakaiDOM:all @@@enDesc: - ::: Constant function (local) name. \ - ::: Export group name (without prefix). \ - ::: Method name. \ - ::: Method name. @@@nullCase: @@@@enDesc: Either the type of this resource is not listed above or this Perl constructure is anonymous. @@@RaiseException: @@@@@: NO_LOCAL_NAME_ERR @@@@enDesc: The type of this resource is either or and the local name of this resource is not defined. @@@RaiseException: @@@@@: RESERVED_PERL_METHOD_NAME_ERR @@@@enDesc: The Perl method name constructed from the source result in a reserved name. @@@PerlDef: __DEEP{ if (exists $self->{}) { $r = $self->{}; } elsif ($self-> () or $self-> ()) { $r = $self->{localName}; unless (defined $r) { __UNDEEP{ __EXCEPTION{NO_LOCAL_NAME_ERR:: DIS:uri => {$self->{uri}}, DIS:sourceNode => {$self->{src}}, }__; }__; } } elsif ($self-> () or $self-> ()) { if (defined $self->{localName}) { $r = ($self->{localName}); if ($self-> (, false)) { $r = '_' . $r; } if ({ import => 1, unimport => 1, isa => 1, can => 1, new => 1, as_string => 1, stringify => 1, clone => 1, }->{$r} or $r =~ /^___/) { __UNDEEP{ __EXCEPTION{RESERVED_PERL_METHOD_NAME_ERR:: DIS:uri => {$self->{uri}}, DIS:soruceNode => {$self->{src}}, DIS:generatedName => {$r}, }__; }__; } } elsif (my $op_uri = $self->) { $r = { => '___report_error', => 'as_string', => 'new', => 'clone', }->{$op_uri}; $r = $op_uri if $op_uri =~ /^[A-Z]+$/; } else { $r = null; } } else { $r = null; } $self->{} = $r; }__; @Attr: @@Name: plFullyQualifiedName @@enDesc: The fully-qualified Perl name of this resource. @@Type: DISLang:String::ManakaiDOM:all @@Get: @@@enDesc: Fully-qualified name. \ - ::: Class package name. \ - ::: Interface package name. \ - ::: Variable name (without variable type symbol such as ). @@@nullCase: @@@@enDesc: Otherwise. @@@NoPerlModuleNameException: @@@RaiseException: @@@@@: NO_LOCAL_NAME_ERR @@@@enDesc: The local name of this resource is not defined. @@@PerlDef: __DEEP{ if (exists $self->{}) { $r = $self->{}; } elsif ($self-> () or $self-> () or $self-> ()) { my $an_node = $self->{src}-> (, for_arg => $self->{for}, forp_arg => $self->{forp}, media_type => ); if ($an_node) { ## NOTE: "lang:Perl" is fully-qualified name by definition $r = $an_node->; } else { unless (defined $self->{localName}) { __UNDEEP{ __EXCEPTION{NO_LOCAL_NAME_ERR:: DIS:sourceNode => {$self->{src}}, }__; }__; } if ($self-> ()) { $r = $self-> -> . '::' . $self->{localName}; } else { $r = $self-> -> . '::' . $self->{localName}; } } } else { $r = null; } $self->{} = $r; }__; @Attr: @@Name: plVariableName @@enDesc: The Perl variable name with prefix. @@Type: lang:Perl::ManakaiDOM:all @@Get: @@@nullCase: @@@@enDesc: This resource does not define any Perl variable. @@@PerlDef: $r = $self->{localName}; if (defined $r) { __DEEP{ if ($self-> (, false)) { $r = '$opt{' . . '}'; } elsif ($self-> ()) { $r = '@' . $r; } elsif ($self-> ()) { $r = '%' . $r; } else { $r = '$' . $r; } }__; } @Attr: @@Name: plPrototype @@enDesc: The Perl parameter prototype character. @@Type: lang:Perl::ManakaiDOM:all @@Get: @@@PerlDef: __DEEP{ if ($self-> ()) { $r = '@' . $r; } elsif ($self-> ()) { $r = '%' . $r; } else { $r = '$' . $r; } }__; @Attr: @@Name: plMethodOperator @@enDesc: The operator to overload by this method. @@Type: DISLang:String::ManakaiDOM:all @@Get: @@@enDesc: The operator, either Perl operator name of manakai operator URI reference. @@@nullCase: @@@@enDesc: Either this resource does not define a Perl method or this method does not overload any operator. @@@UndeclaredPrefixException: @@@RaiseException: @@@@@: UNSUPPORTED_MEDIA_TYPE_ERR @@@@enDesc: Media type of the node is not supported. @@@PerlDef: __DEEP{ if (exists $self->{}) { $r = $self->{}; } else { my $op_node = $self->{src}-> (, for_arg => $self->{for}, forp_arg => $self->{forp}); if ($op_node) { if ($op_node-> (, for_arg => $self->{for}, for_arg => $self->{forp})) { $r = $op_node->; } elsif ($op_node-> (, for_arg => $self->{for}, for_arg => $self->{forp})) { $r = $op_node->; } else { my $ct_uri = $op_node-> (for_arg => $self->{for}, forp_arg => $self->{forp}); __UNDEEP{ __EXCEPTION{UNSUPPORTED_MEDIA_TYPE_ERR:: DIS:uri => {$ct_uri}, DIS:sourceNode => {$op_node}, }__; }__; } } else { $r = null; } $self->{} = $r; } }__; @Attr: @@Name: disDataTypeResource @@enDesc: attribute value of this resource. @@Type: ManakaiDISResourceDefinition @@Get: @@@RaiseException: @@@@@:NO_DIS_TYPE_ERR @@@@enDesc: attribute is not specified. @@@PerlDef: __DEEP{ if (defined $self->{}) { $r = $self->{db}-> ($self->{}); } else { $self->{} = $self->{src}-> (, for_arg => $self->{for}, forp_arg => $self->{forp}); if ($self->{}) { $r = $self->{} = $self->{} -> (null, $self->{for}); $r = $self->{db}-> ($r); $r-> ($self->{}); } else { my $pr = $self-> (); if ($pr) { $r = $pr->; $self->{} = $pr->{}; $self->{} = $r->; } else { ## No parent __UNDEEP{ __EXCEPTION{NO_DIS_TYPE_ERR:: DIS:sourceNode => {$self->{src}}, }__; }__; } } } }__; @Attr: @@Name: disDataTypeNode @@enDesc: node for this resource. @@Get: @@@Type: ManakaiDISElement @@@RaiseException: @@@@@:NO_DIS_TYPE_ERR @@@@enDesc: attribute is not specified. @@@PerlDef: __DEEP{ $self->; }__; $r = $self->{}; @Attr: @@Name: disActualDataTypeResource @@enDesc: attribute value of this resource. @@Type: ManakaiDISResourceDefinition @@Get: @@@RaiseException: @@@@@:NO_DIS_TYPE_ERR @@@@enDesc: attribute is not specified, and attribute, neigher. @@@PerlDef: __DEEP{ if (defined $self->{}) { $r = $self->{db}-> ($self->{}); } else { $self->{} = $self->{src}-> (, for_arg => $self->{for}, forp_arg => $self->{forp}); if ($self->{}) { $r = $self->{} = $self->{} -> (null, $self->{for}); $r = $self->{db}-> ($r); $r-> ($self->{}); } elsif (defined $self->{}) { $r = $self->{} = $self->{}; $self->{} = $self->{}; $r = $self->{db}-> ($r); } else { $self->{} = $self->{} = $self->{src}-> (, for_arg => $self->{for}, forp_arg => $self->{forp}); if ($self->{}) { $r = $self->{} = $self->{} = $self->{} -> (null, $self->{for}); $r = $self->{db}-> ($r); $r-> ($self->{}); } else { my $pr = $self-> (); if ($pr) { $r = $pr->; $self->{} = $pr->{}; $self->{} = $r->; } else { ## No parent __UNDEEP{ __EXCEPTION{NO_DIS_TYPE_ERR:: DIS:sourceNode => {$self->{src}}, }__; }__; } } } } }__; @Attr: @@Name: disActualDataTypeNode @@enDesc: node for this resource. @@Get: @@@Type: ManakaiDISElement @@@RaiseException: @@@@@:NO_DIS_TYPE_ERR @@@@enDesc: attribute is not specified, and attribute, neigher. @@@PerlDef: __DEEP{ $self->; }__; $r = $self->{}; @IntMethod: @@Operator: @@@@: <=> @@@ContentType: lang:Perl @@enDesc: Which is greater (i.e. the spaceship operator). A resource is less than another if it is loaded by before another is loaded. Order for non-loaded resource definitions are not defined. \ {NOTE:: In the current implementation, non-loaded resources are less than any loaded resource and the order in non-loaded resources is unknown. \ } @@Param: @@@Name: anotherResource @@@Type: ManakaiDISResourceDefinition @@@enDesc: Another resource to compare. @@Return: @@@Type: DOMMain:unsigned-long::ManakaiDOM:all @@@PerlDef: if (UNIVERSAL::isa ($anotherResource, )) { $r = $self->{seq} <=> $anotherResource->{seq}; } else { $r = overload::Overloaded ($self) <=> $anotherResource; } @Attr: @@Name: plCodeFragment @@enDesc: Perl code definition fragment of this resource. @@Type: MPLCodeFragment @@Get: @@@enDesc: Perl code. @@@nullCase: @@@@enDesc: This node does not have Perl code definition. @@@RaiseException: @@@@@:NO_METHOD_RETURN_ERR @@@@enDesc: This resource is a but it does not have child-resource. @@@RaiseException: @@@@@:NO_ATTR_GET_ERR @@@@enDesc: This resource is a but it does not have child-resource. @@@RaiseException: @@@@@:UNSUPPORTED_MEDIA_TYPE_ERR @@@@enDesc: The media type of element is not supported. @@@RaiseException: @@@@@: NON_NAMED_PARAMETER_AFTER_NAMED_ERR @@@@enDesc: A non-named method paarameter is defined after a named method parameter appeared. @@@disPerlException: @@@InlineElementException: @@@BlockElementException: @@@PerlDef: __DEEP{ if (exists $self->{}) { $r = $self->{}; } elsif (not $self->{src}) { $r = $self->{} = null; } elsif ($self-> () or $self-> () or $self-> () or $self-> () or $self-> () or $self-> ()) { $self->{} = null; ## To avoid loop my $def = $self->{src}-> (, for_arg => $self->{for}, forp_arg => $self->{forp}); my $is_inline = $self-> () ? true : false; unless ($def) { $r = null; } elsif ($def-> ()) { my $source_code = $def->; $r = $self->{} = $is_inline ? $self-> ($source_code, node => $def, contains_statements => false) : $self-> ($source_code, node => $def); } elsif ($def-> ()) { $r = $self->{} = $def-> ($self, for_arg => $self->{for}, forp_arg => $self->{forp}, contains_statements => not $is_inline); } else { my $mt = $def-> (for_arg => $self->{for}, forp_arg => $self->{forp}); __UNDEEP{ __EXCEPTION{UNSUPPORTED_MEDIA_TYPE_ERR:: DIS:uri => {$mt}, DIS:sourceNode => {$def}, }__; }__; } # media type } elsif ($self-> ()) { $self->{} = null; ## To avoid loop my $ret = $self-> (); unless ($ret) { __UNDEEP{ __EXCEPTION{NO_METHOD_RETURN_ERR:: DIS:errResource => {$self}, DIS:sourceNode => {$self->{src}}, }__; }__; } my $plimpl = $self->; $r = $self->{} = $plimpl-> ($self->); ## Method parameters my $params = $self-> (); my @param_variables; my @named_param_variables; my $prototype = '$'; my $is_optional_param = false; my $is_named_param = false; for my $param (@$params) { next unless $param-> (); unless ($is_named_param) { if ($param-> (, false)) { $is_named_param = true; $is_optional_param = true; push @param_variables, ['%opt']; $prototype .= '%'; } else { ## Non-named parameter push @param_variables, [ $param->, ]; if ($param->) { $prototype .= ';' unless $is_optional_param; $is_optional_param = true; } $prototype .= $param->; my $param_processor = $param->; if ($param_processor) { $param_variables[-1]->[1] = $param_processor->->clone; $param_variables[-1]->[1] -> ('$INPUT' => $param_variables[-1]->[0]); } } } else { ## Named parameter unless ($param-> (, false)) { __UNDEEP{__EXCEPTION{NON_NAMED_PARAMETER_AFTER_NAMED_ERR:: DIS:sourceNode => {$param->{src}}, DIS:uri => {$param->{uri}}, DIS:localName => {$param->{localName}}, }__}__; } } if ($is_named_param) { push @named_param_variables, [ $param->, null, '$' . $param->, ]; my $param_processor = $param->; if ($param_processor) { $named_param_variables[-1]->[1] = $param_processor->->clone; $named_param_variables[-1]->[1] -> ('$INPUT' => $param_variables[-1]->[0]); } } } # %$params $r-> ($prototype); $r-> ($plimpl-> ('my (' . join (', ', '$self', map {$_->[0]} @param_variables) . ') = @_')); for my $p (@param_variables, @named_param_variables) { if ($p->[1]) { ## Input processor $r-> ($p->[1]); } } ## TODO: in/out ## Return value my $data_type; try { $data_type = $ret->; } catch with { my $err = shift; if ($err->{} ne ) { $err->throw; } }; if ($data_type) { my $def = $ret->{src}-> (, $self->{db}, for_arg => $self->{for}, forp_arg => $self->{forp}, use_default_value => true, data_type_uri => $data_type ->); my $rs = $plimpl->; my $rvar = $plimpl-> ('$', null, 'r'); $rvar-> ('my'); if ($def) { $rs-> ($rvar => $def); } else { $rs-> ($rvar); } $r-> ($rs); } my $code = $ret->; if ($code) { for my $np (@named_param_variables) { $code-> ($np->[2] => $np->[0]); } $r-> ($code); $ret->{} = true; $self->{} = true; } else { my $cls = $self->{db}-> (, for_arg => ); my $const = $self->{db}-> (, for_arg => ); my $subtype = $self->{db}-> (, for_arg => ); $_-> ($ret->{src}) for $cls, $const, $subtype; my $context_param = $ret->; $self-> ($r, $cls, $const, $subtype, {%$context_param}); $ret->{} = false; $self->{} = false; } if ($data_type) { $r-> ($plimpl-> ('$', null, 'r')); } } elsif ($self-> ()) { $self->{} = null; ## To avoid loop my $plimpl = $self->; my $get = $self-> (); unless ($get) { __UNDEEP{ __EXCEPTION{NO_ATTR_GET_ERR:: DIS:errResource => {$self}, DIS:sourceNode => {$self->{src}}, }__; }__; } my $data_type = $get->; my $get_code = $plimpl->; $get_code-> (q); my $code = $get->; if ($code) { ## Default value my $def = $get->{src}-> (, $self->{db}, for_arg => $self->{for}, forp_arg => $self->{forp}, use_default_value => true, data_type_uri => $data_type ->); my $rs = $plimpl->; my $rvar = $plimpl-> ('$', null, 'r'); $rvar-> ('my'); if ($def) { $rs-> ($rvar => $def); } else { $rs-> ($rvar); } $get_code-> ($rs); ## Main code $get_code-> ($code); ## Return value $get_code-> (q<$r>); $get->{} = true; } else { ## Getter code not defined my $cls = $self->{db}-> (, for_arg => ); my $const = $self->{db}-> (, for_arg => ); my $subtype = $self->{db}-> (, for_arg => ); $_-> ($get->{src}) for $cls, $const, $subtype; my $context_param = $get->; $self-> ($get_code, $cls, $const, $subtype, {%$context_param}); $get->{} = false; $self->{} = false; } my $set = $self-> (); my $set_code = $plimpl->; if ($set) { my $data_type = $set->; my $code = $set->; if ($code) { ## Input $set_code-> (q); my $param_processor = $set->; if ($param_processor) { my $pcode = $param_processor->->clone; $pcode-> ('$INPUT' => '$given'); $set_code-> ($pcode); } ## Main code $set_code-> ($code); $set->{} = true; $self->{} = $get->{}; } else { ## Setter code not defined my $cls = $self->{db}-> (, for_arg => ); my $const = $self->{db}-> (, for_arg => ); my $subtype = $self->{db}-> (, for_arg => ); $_-> ($set->{src}) for $cls, $const, $subtype; my $context_param = $get->; $self-> ($set_code, $cls, $const, $subtype, {%$context_param}); } $set->{} = false; $self->{} = false; } else { ## No attribute setter my $cls = $self->{db}-> (, for_arg => ); my $const = $self->{db}-> (, for_arg => ); my $subtype = $self->{db}-> (, for_arg => ); $_-> ($self->{src}) for $cls, $const, $subtype; my $context_param = $get->; $self-> ($set_code, $cls, $const, $subtype, {%$context_param}); $self->{} = $get->{}; } $r = $self->{} = $plimpl-> ($self->); $r-> (q<$;$>); ## TODO: Don't output "if" if non-debug build $r-> ($plimpl-> (q<@_ == 1>), $get_code, $set_code); } else { ## Not supported $r = $self->{} = null; } # rdf:type }__; @Attr: @@Name:plImplementation @@enDesc: The object. @@Type: MPLImpl @@Get: @@@enDesc: The Perl code implementation object. @@@nullCase: This resource has no source tree associated. @@@RaiseException: @@@@@:NO_PERL_CODE_IMPL_ERR @@@@enDesc: There is no implementation that implements the feature, version . @@@PerlDef: if ($self->{src}) { __DEEP{ $r = ($self->{src}-> or $self->{src})-> -> ( => '1.0'); }__; unless (defined $r) { __EXCEPTION{NO_PERL_CODE_IMPL_ERR:: }__; } } @Method: @@Name: getChildResourceByType @@enDesc: Gets a static child resource selected by its type. @@Param: @@@Name:typeURI @@@Type:ResourceURI @@@enDesc: A URI reference identifying a resource type. @@Return: @@@Type: ManakaiDISResourceDefinition @@@enDesc: The first (by document order) child resource whose type matches with . @@@nullCase: @@@@enDesc: There is no resource whose type is . @@@PerlDef: __DEEP{ for my $cr_uri (@{$self->{}}) { my $cr = $self->{db}-> ($cr_uri); if ($cr-> ($typeURI)) { $r = $cr; last; } } }__; @Method: @@Name: getChildResourceByNameAndType @@enDesc: Gets a static child resource selected by its local name and type. @@Param: @@@Name: localName @@@Type: DISCore:LocalName::ManakaiDOM:all @@@enDesc: A local name. @@Param: @@@Name:typeURI @@@Type:ResourceURI @@@enDesc: A URI reference identifying a resource type. @@Return: @@@Type: ManakaiDISResourceDefinition @@@enDesc: The first (by document order) child resource whose type matches for and . @@@nullCase: @@@@enDesc: There is no resource whose name is and whose type is . @@@PerlDef: __DEEP{ for my $cr_uri (@{$self->{}}) { my $cr = $self->{db}-> ($cr_uri); my $ln = $cr->; if (defined $ln and $ln eq $localName and $cr-> ($typeURI)) { $r = $cr; last; } } }__; @Method: @@Name: getConstResourceByName @@enDesc: Gets a constant value resource by its local name. @@Param: @@@Name:localName @@@Type: DISLang:String::ManakaiDOM:all @@@enDesc: Constant name. @@Return: @@@Type: ManakaiDISResourceDefinition @@@enDesc: The constant resource identified by . @@@nullCase: @@@@enDesc: There is no such constant resource. @@@PerlDef: __DEEP{ my @constGroup; for my $cr_uri (@{$self->{}}) { my $cr = $self->{db}-> ($cr_uri); my $ln = $cr->; if ($ln and $ln eq $localName and $cr-> ()) { $r = $cr; last; } elsif ($cr-> ()) { push @constGroup, $cr; } } unless ($r) { for my $cg (@constGroup) { $r = $cg-> ($localName, ); last if $r; } } }__; @Method: @@Name: plPreprocessPerlCode @@enDesc: Preprocesses a Perl block-level code fragment. @@Param: @@@Name:codeArg @@@Type: lang:Perl::ManakaiDOM:all @@@enDesc: A Perl block-level code (statements and/or blocks). @@NodeParam: @@NamedParam: @@@Name:methodResource @@@Type:ManakaiDISResourceDefinition @@@enDesc: The resource definition of the Perl method to which the belongs. @@@nullCase: @@@@enDesc: The does not belong to any method. @@NamedParam: @@@Name:sourceFile @@@Type: DISLang:String::ManakaiDOM:all @@@enDesc: The source file name of the . @@@nullCase: @@@@enDesc: No source file information available. @@NamedParam: @@@Name:sourceLine @@@Type: DOMMain:unsigned-long::ManakaiDOM:all @@@enDesc: The line number in the from which the begins. @@@nullCase: @@@@enDesc: No source file information available. @@Return: @@@Type: lang:Perl::ManakaiDOM:all @@@enDesc: Preprocessed Perl code. @@@BlockElementException: @@@InlineElementException: @@@PerlDef: unless ($self->{src}) { __EXCEPTION{NO_SOURCE_NODE_ERR:: DIS:uri => {$self->{uri}}, }__; } __DEEP{ our $RegQNameChar; our $RegBlockContent; use re 'eval'; my $plimpl = $self->; $r = $plimpl->; if (defined $sourceLine) { $r-> ($sourceFile); $r-> ($sourceLine); $r-> ($sourceFile); $r-> ($sourceLine); } elsif ($node) { my $np = $node-> (key => [qw/Name QName Type type/]); $r-> ($np); $r-> (1); $r-> ($np); $r-> (1); } for my $source_code (split /\b(_ _(?:(?!_ _)$RegQNameChar)+ (?:\{$RegBlockContent\})? _ _)\b/x, $codeArg) { ## Block-level element if ($source_code =~ /_\_\z/ and $source_code =~ s/^_\_((?:(?!_\_)$RegQNameChar)+)//) { my $et = $self->{src} -> ($1, node => $node, default_namespace_uri => ); if ($source_code =~ s/^\{//) { $source_code =~ s/\}__\z//; } else { $source_code = ''; } # ## ISSUE: __FILE__ & __LINE__ will break if multiline substition happens. if ($et eq or $et eq ) { my $block = $r->; $block-> ('local $Error::Depth = $Error::Depth '. ($et eq ? '+' : '-'). ' 1'); $block-> ($self-> ($source_code, node => $node, method_resource => $methodResource, source_file => $r->, source_line => $r->)); $r-> ($source_code); } elsif ({ => 1, => 1, }->{$et}) { $r-> ($source_code); if ($source_code =~ s/^((?:(?!::).)+)(::\s*)?//s) { my ($cls, $const, $subtype) = @{$self->{db}-> ($1, $self->{src}, node => $node, for_arg => $self->{for})}; my $param = $self-> ($source_code, node => $node); my $context_param = $self->; $self-> ($r, $cls, $const, $subtype, {%$param, %$context_param}); } else { __UNDEEP{__EXCEPTION{PERL_PREPROCESS_NO_EXCEPTION_TYPE_ERR:: DIS:sourceNode => {$node}, DIS:sourceCode => {$source_code}, DIS:elementType => {$et}, }__}__; } } elsif ($et eq ) { $r-> ($source_code); my $code_name; $source_code =~ s/^\s+//; if ($source_code =~ s/^((?>(?!::).)+)//s) { $code_name = $1; } else { __UNDEEP{ __EXCEPTION{PERL_PREPROCESS_NO_CODE_NAME_ERR:: DIS:sourceCode => {$source_code}, DIS:sourceNode => {$node}, DIS:elementType => {$et}, }__; }__; } $source_code =~ s/^::\s*//; my $param = $self-> ($source_code, node => $node); my $code_uri = $self->{src}-> ($code_name, null, $self->{for}, node => $node); my $code = $self->{db}-> ($code_uri); $code-> ($node || $self->{src}); unless ($code-> ()) { __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:uri => {$code_uri}, DIS:sourceNode => {$node}, DIS:sourceCode => {$source_code}, DIS:expectedType => {}, }__;}__; } my $pc = $code->->clone; unless (defined $pc) { __UNDEEP{__EXCEPTION{PERL_CODE_NOT_DEFINED_ERR:: DIS:sourceNode => {$node}, DIS:sourceCode => {$source_code}, DIS:uri => {$code_uri}, }__}__; } for my $var (grep {/^\$/} keys %$param) { my $value; if ($param->{$var}->{type} eq 'variable') { $value = $plimpl-> ('$', null, $param->{$var}->{value}); } elsif ($param->{$var}->{type} eq 'code') { $value = $plimpl-> ($param->{$var}->{value}); } else { $value = $plimpl-> ($param->{$var}->{value}); } $pc-> ($var => $value); } $r-> ($pc); } elsif ($et eq ) { $r-> ($source_code); unless ($methodResource) { __UNDEEP{__EXCEPTION{PERL_PREPROCESS_NO_METHOD_ERR:: DIS:sourceNode => {$node}, DIS:sourceCode => {$source_code}, DIS:elementType => {$et}, }__}__; } my $param = $methodResource -> ($source_code, ); unless ($param) { __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:sourceNode => {$node}, DIS:sourceCode => {$source_code}, DIS:elementType => {$et}, DIS:localName => {$source_code}, DIS:expectedType => {}, }__}__; } my $norm = $param->; if ($norm) { my $norm_code = $norm->->clone; $norm_code-> ('$INPUT' => $param->); $r-> ($norm_code); } } elsif ($et eq ) { if ($source_code =~ s/^(((?>(?!::).)*)::\s*)//) { $r-> ($1); V: for (split /\s*\|\s*/, $2) { my $for_uri = $self->{src} -> ($_, node => $node); if ($self-> ($for_uri)) { $r-> ($self-> ($source_code, node => $node, method_resource => $methodResource, source_file => $r->, source_line => $r->)); last V; } } # V $r-> ($source_code); } else { __UNDEEP{__EXCEPTION{PERL_PREPROCESS_NO_FOR_ERR:: DIS:sourceNode => {$node}, DIS:sourceCode => {$source_code}, DIS:elementType => {$et}, }__}__; } } elsif ($et eq ) { $r-> ($source_code); my $assert_type; if ($source_code =~ s/^\s*($RegQNameChar+)\s*::\s*//o) { $assert_type = $self->{src} -> ($1, node => $node); } else { __UNDEEP{__EXCEPTION{PERL_PREPROCESS_NO_ASSERT_TYPE_ERR:: DIS:sourceNode => {$node}, DIS:sourceCode => {$source_code}, DIS:elementType => {$et}, }__}__; } # if output assertion then =pod my $assert_block = $r->; my $param = $self-> ($source_code, node => $node); my $context_param = $self->; if ($assert_type eq ) { $pre = perl_statement perl_assign 'my $asActual' => '('.perl_code ($param->{actual}, %opt).')'; $cond = '$asActual > 0'; $xparam->{ExpandedURI q} = 'a positive value'; $xparam->{ExpandedURI q} = perl_code_literal q<$asActual>; } elsif ($atype eq ExpandedURI q) { $cond = '0'; $xparam->{ExpandedURI q} = $param->{msg}; $xparam->{ExpandedURI q} = '(invariant)'; } else { valid_err (q[Assertion type <].$atype.q[> is not supported], node => $opt{node}); } $r = $pre . perl_if $cond, undef, my $cls = $self->{db}-> (); my $const = $self->{db}-> (); my $subtype = $self->{db}-> (); $_-> ($node || $self->{src}) for $cls, $const, $subtype; $self-> ($assert_block, $cls, $const, $subtype, {%$param, %$context_param, => { type => 'quoted', value => $assert_type, }, => { type => 'code', value => q<(sprintf 'at %s line %s%s%s', __FILE__, __LINE__, "\n\t", Carp::longmess ())>, }}); =cut } elsif ({ => 1, => 1, => 1, }->{$et}) { $r-> ('__'.{ => 'FILE', => 'LINE', => 'PACKAGE', }->{$et}.'__'); if (length $source_code) { __UNDEEP{__EXCEPTION{PERL_PREPROCESS_BLOCK_NOT_ALLOWED_ERR:: DIS:sourceNode => {$node}, DIS:sourceCode => {$source_code}, DIS:elementType => {$et}, }__}__; } } else { __UNDEEP{__EXCEPTION{UNSUPPORTED_ELEMENT_TYPE_ERR:: DIS:sourceNode => {$node}, DIS:sourceCode => {$source_code}, DIS:elementType => {$et}, }__}__; } } else { ## Other than block-level element $r-> ($self-> ($source_code, contains_statements => true, source_file => $r->, source_line => $r->)); $r-> ($source_code); } } # for }__; # DEEP ## Checks \p character classes # while ($s =~ /\\p{([^{}]+)}/gs) { # my $name = $1; # $State->{ExpandedURI q} # ->{$State->{ExpandedURI q}} # ->{ExpandedURI q} # ->{$name} ||= $opt{node} || 1; # } @Method: @@Name: plPreprocessPerlStatement @@enDesc: Preprocesses a Perl inline code fragment (code fragment smaller than statement). @@Param: @@@Name:codeArg @@@Type: lang:Perl::ManakaiDOM:all @@@enDesc: A Perl code fragment. @@NodeParam: @@NamedParam: @@@Name:containsStatements @@@Type: DOMMain:boolean::ManakaiDOM:all @@@enDesc: Whether one or more statements might be contained in or not. @@NamedParam: @@@Name:sourceFile @@@Type: DISLang:String::ManakaiDOM:all @@@enDesc: The source file name of the . @@@nullCase: @@@@enDesc: No source file information available. @@NamedParam: @@@Name:sourceLine @@@Type: DOMMain:unsigned-long::ManakaiDOM:all @@@enDesc: The line number in the from which the begins. @@@nullCase: @@@@enDesc: No source file information available. @@Return: @@@Type:MPLCodeFragment @@@enDesc: Preprocessed Perl code. @@@InCase: @@@@Type: PerlCode:ManakaiPerlBlock::ManakaiDOM:Perl @@@@enDesc: If is . @@@InCase: @@@@Type: PerlCode:ManakaiPerlInlineContainer::ManakaiDOM:Perl @@@@enDesc: If is . @@@InlineElementException: @@@PerlDef: unless ($self->{src}) { __EXCEPTION{NO_SOURCE_NODE_ERR:: DIS:uri => {$self->{uri}}, }__; } __DEEP{ our $RegQNameChar; my $plimpl = $self->; if ($containsStatements) { $r = $plimpl->; if (defined $sourceLine) { $r-> ($sourceFile); $r-> ($sourceLine); $r-> ($sourceFile); $r-> ($sourceLine); } elsif ($node) { my $np = $node-> (key => [qw/Name QName Type type/]); $r-> ($np); $r-> (1); $r-> ($np); $r-> (1); } } else { $r = $plimpl->; } for my $source_code (split /(?]+> )/ox, $codeArg) { if ($source_code =~ s/^\x3C//) { $source_code =~ s/>$//; if ($source_code =~ /=$/) { ## TODO: Warning # valid_warn qq" ends with a "=" - >. # q{should "=" be used place of "=>"?}; } if ($source_code =~ s/^(.+?):://) { my $et = $self->{src} -> ($1, node => $node, default_namespace_uri => ); if ($et eq ) { ## QName constant $r-> ($self->{src} -> ($source_code, node => $node)); } elsif ({ => 1, => 1, => 1, => 1, }->{$et}) { ## Method call my ($class_qname, $method_qname) = split /\s*\.\s*/, $source_code, 2; my $class_uri = $self->{src} -> ($class_qname, $self->, $self->{for}, node => $node); my $class = $self->{db}-> ($class_uri); unless ($class->) { __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:sourceNode => {$node}, DIS:sourceCode => {$source_code}, DIS:uri => {$class_uri}, DIS:elementType => {$et}, DIS:expectedType => {}, }__}__; } $class-> ($node || $self->{src}); if ($et eq and $class-> ()) { __UNDEEP{ __EXCEPTION{INTERFACE_CLASS_METHOD_ERR:: DIS:uri => {$class_uri}, DIS:elementType => {$et}, DIS:sourceNode => {$node || $self->{src}}, DIS:sourceCode => {$source_code}, DIS:expectedType => {}, }__; }__; } unless ($class-> ()) { $self-> -> ($class->); } my $method = $class-> ($method_qname, { => , => , }->{$et} || ); if (not $method or not $method->) { __UNDEEP{ __EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:localName => {$method_qname}, DIS:elementType => {$et}, DIS:sourceNode => {$node || $self->{src}}, DIS:sourceCode => {$source_code}, DIS:expectedType => {{ => , => , }->{$et} || }, }__; }__; } my $class_name = ''; if ($et eq ) { $class_name = $class-> . '->'; } my $method_name = $method->; $r-> ($class_name . $method_name); } elsif ({ => 1, => 1, => 1, => 1, }->{$et}) { ## Perl package name my $class_uri = $self->{src} -> ($source_code, $self->, $self->{for}, node => $node); my $class = $self->{db}-> ($class_uri); $class-> ($node || $self->{src}); my $pack = $class->; unless ($pack) { __UNDEEP{__EXCEPTION{NO_PERL_PACKAGE_NAME_ERR:: DIS:sourceNode => {$node || $self->{src}}, DIS:sourceCode => {$source_code}, DIS:uri => {$class_uri}, DIS:elementType => {$et}, }__}__; } if ({ => 1, => 1, }->{$et}) { $r-> ($pack); } else { $r-> ($pack); } } elsif ($et eq ) { ## Inline code my $code_name; $source_code =~ s/^\s+//; if ($source_code =~ s/^((?>(?!::).)+)//s) { $code_name = $1; } else { __UNDEEP{ __EXCEPTION{PERL_PREPROCESS_NO_CODE_NAME_ERR:: DIS:sourceCode => {$source_code}, DIS:sourceNode => {$node || $self->{src}}, }__; }__; } $source_code =~ s/^::\s*//; my $param = $self-> ($source_code, node => $node); my $code_uri = $self->{src}-> ($code_name, null, $self->{for}, node => $node); my $code = $self->{db}-> ($code_uri); $code-> ($node || $self->{src}); unless ($code-> ()) { __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:uri => {$code_uri}, DIS:sourceNode => {$node || $self->{src}}, DIS:sourceCode => {$source_code}, DIS:expectedType => {}, }__;}__; } my $pc = $code->->clone; unless (defined $pc) { __UNDEEP{__EXCEPTION{PERL_CODE_NOT_DEFINED_ERR:: DIS:sourceNode => {$node || $self->{src}}, DIS:sourceCode => {$source_code}, DIS:uri => {$code_uri}, }__}__; } for my $var (grep {/^\$/} keys %$param) { my $value; if ($param->{$var}->{type} eq 'variable') { $value = $plimpl-> ('$', null, $param->{$var}->{value}); } elsif ($param->{$var}->{type} eq 'code') { $value = $plimpl-> ($param->{$var}->{value}); } else { $value = $plimpl-> ($param->{$var}->{value}); } $pc-> ($var => $value); } $r-> ($pc); } elsif ($et eq ) { my ($class_qname, $const_name) = split /\./, $source_code, 2; my $class_uri = $self->{src} -> ($class_qname, $self->, $self->{for}, node => $node); my $class = $self->{db}-> ($class_uri); $class-> ($node || $self->{src}); my $const = $class-> ($const_name); unless (defined $const) { __UNDEEP{__EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:sourceNode => {$node || $self->{src}}, DIS:sourceCode => {$source_code}, DIS:localName => {$const_name}, DIS:expectedType => {}, }__}__; } my $pc = $const->->clone; unless (defined $pc) { __UNDEEP{__EXCEPTION{PERL_CODE_NOT_DEFINED_ERR:: DIS:sourceNode => {$node || $self->{src}}, DIS:sourceCode => {$source_code}, DIS:localName => {$const_name}, }__}__; } $r-> ($pc); } else { __UNDEEP{__EXCEPTION{UNSUPPORTED_ELEMENT_TYPE_ERR:: DIS:elementType => {$et}, DIS:sourceNode => {$node || $self->{src}}, DIS:sourceCode => {$source_code}, }__}__; } } else { __UNDEEP{__EXCEPTION{PERL_PREPROCESS_NO_ELEMENT_TYPE_ERR:: DIS:sourceNode => {$node || $self->{src}}, DIS:sourceCode => {$source_code}, DIS:expectedType => {}, }__}__; } } else { for my $source_code (split /\b( t r u e \b| f a l s e \b| n u l l \b| t r y \s* \{)/x, $source_code) { if ({ 'tr'.'ue' => true, 'fal'.'se' => true, 'nu'.'ll' => true, }->{$source_code}) { $r-> ({ 'tr'.'ue' => 1, 'fal'.'se' => 0, 'nu'.'ll' => 'undef', }->{$source_code}); } elsif ($source_code =~ /^t r y \s* \x7B$/x) { $r-> ('tr'. 'y '."\x7B".'local $Error::Depth = $Error::Depth + 3;'); } else { $r-> ($source_code); } } } # Inline instruction or not } # for }__; # DEEP @Attr: @@Name: ownerClassURI @@enDesc: The URI reference of the class resource this resource belongs to. @@Type: ResourceURI @@Get: @@@enDesc: The URI reference of the resource. If this resource is a class, then the URI reference of this resource is returned. @@@nullCase: @@@@enDesc: This resource does not belong to any class. @@@PerlDef: if (exists $self->{}) { $r = $self->{}; } else { my $res = $self; __DEEP{ { if ($res-> ()) { $r = $res->{uri}; } else { $res = $res-> (); redo if $res; } } }__; $self->{} = $r; } @IntMethod: @@Name: plParsePreprocessParameter @@enDesc: Parses a parameter specification in preprocessing instruction and return it as a hash reference. \ {NOTE:: The callee have to ensure that this resource has its before the call to this method. \ } @@Param: @@@Name: paramSpec @@@Type: DISLang:String::ManakaiDOM:all @@@enDesc: A parameter specification to parse. @@NodeParam: @@Return: @@@Type: Perl:hash::ManakaiDOM:all @@@enDesc: Hash containing parameters. Each hash value is also a hash reference, containing two keys (its value is either , , or ) and . @@@RaiseException: @@@@@:BROKEN_PARAM_SPEC_ERR @@@@enDesc: The is not well-formed. @@@PerlDef: BEGIN{ our $RegQNameChar = qr/[^\s<>"'\\\[\]\{\},=\$\@%]/; use re 'eval'; our $RegBlockContent; $RegBlockContent = qr/(?>[^{}\\]*)(?>(?>[^{}\\]+|\\.|\{(??{ $RegBlockContent})\})*)/s; } our $RegQNameChar; our $RegBlockContent; $r = {}; while ($paramSpec =~ s/^ ## Parameter name (\$? $RegQNameChar+)\s* (?: =>? \s* ## ">" is now optional for inline element (">" is delimiter) ## Parameter value ( ## Variable or Bare string \ \$? $RegQNameChar+ | ## Quoted string '(?>[^'\\]*)' ## ISSUE: escape mechanism required? | ## Code \ \{$RegBlockContent\} ) \s*)? (?:,\s*|$)//ox) { my ($n, $v) = ($1, $2); if (defined $v) { if ($v =~ /^'/) { $v = {type => 'quoted', value => substr ($v, 1, length ($v) - 2)}; } elsif ($v =~ /^\{/) { $v = {type => 'code', value => substr ($v, 1, length ($v) - 2)}; } elsif ($v =~ /^\$/) { $v = {type => 'variable', value => $v}; } else { $v = {type => 'bare', value => $v}; } } else { $v = {type => 'boolean', value => true}; } if ($n =~ /^\$/) { $r->{$n} = $v; } else { __DEEP{ $r->{$self->{src}-> ($n, node => $node || $self->{src})} = $v; }__; } } # while if (length $paramSpec) { __EXCEPTION{BROKEN_PARAM_SPEC_ERR:: DIS:sourceCode => {$paramSpec}, DIS:sourceNode => {$node || $self->{src}}, }__; } @IntMethod: @@Name: plGetContextParameter @@enDesc: Returns contextual parameters which describes the of this resource. @@Return: @@@Type: Perl:hash::ManakaiDOM:all @@@enDesc: Hash of parameters as returns. @@@PerlDef: $r = {}; __DEEP{ if ($self-> ()) { my $method = $self-> (); $r->{} = {type => 'quoted', value => $method->}; my $class = $method-> (); $r->{} = {type => 'quoted', value => $class->}; } elsif ($self-> ()) { my $attr = $self-> (); $r->{} = {type => 'quoted', value => $attr->}; my $class = $attr-> (); $r->{} = {type => 'quoted', value => $class->}; $r->{} = {type => 'quoted', value => 'get'}; } elsif ($self-> ()) { my $attr = $self-> (); $r->{} = {type => 'quoted', value => $attr->}; my $class = $attr-> (); $r->{} = {type => 'quoted', value => $class->}; $r->{} = {type => 'quoted', value => 'set'}; } else { $r->{} = {type => 'quoted', value => $self->{uri}}; } }__; @Method: @@Name: plGetMethodInputNormalizer @@enDesc: Returns an input processor. This method assumes that this resource is a method parameter () or an attribute setter (). @@Return: @@@Type:ManakaiDISResourceDefinition @@@enDesc: A corresponding to the parameter defined by this resource. \ {NOTE:: property is obsolete in favor of ; this method does not support the former. \ } @@@nullCase: @@@@enDesc: No input processor found. @@@PerlDef: my $type; try { $type = $self->; #$type_node = $self->< AG::ManakaiDISResourceDefinition # .disActualDataTypeNode>; } catch with { my $err = shift; unless ($err->{} eq ) { $err->throw; } }; if ($type) { __DEEP{ $r = $type-> (); }__; } @IntMethod: @@Name: plAppendThrow @@enDesc: Appends a method call statement for exception reporting. @@Param: @@@Name: parentNode @@@enDesc: The parent Perl code node to which a new statement is appended. @@@Type: PLBlockCon @@Param: @@@Name: xclass @@@Type: ManakaiDISResourceDefinition @@@enDesc: An exception class. @@Param: @@@Name: xcode @@@Type: ManakaiDISResourceDefinition @@@enDesc: An exception code constant. @@Param: @@@Name: xsubtype @@@Type: ManakaiDISResourceDefinition @@@enDesc: An exception subtype. @@@nullCase: @@@@enDesc: No subtype. @@Param: @@@Name: xparam @@@Type: Perl:hash::ManakaiDOM:all @@@enDesc: A hash containing parameters passed to the method. A hash key is to be a parameter name. Hash values should also be hashes. A hash value hash has two values: and . A value is a parameter value. If is , then is assumed as a Perl code fragment. Otherwise, is quoted to be interpreted as a string as is. @@Return: @@@RaiseException: @@@@@: RESOURCE_NOT_DEFINED_ERR @@@@enDesc: Either , or is not defined. @@@PerlDef: my $statement = $parentNode-> ('report '. $xclass->. ' -object => $self'); my $xclass_module = $xclass->; unless ($xclass-> or not $xclass_module) { __EXCEPTION{RESOURCE_NOT_DEFINED_ERR:: DIS:sourceNode => {$self->{src}}, DIS:uri => {$xclass->{uri}}, DIS:localName => {$xclass->{localName}}, DIS:expectedType => {}, }__; } $self-> -> ($xclass_module); $xparam->{-type} = {type => 'quoted', value => $xcode->}; $xparam->{} = {type => 'quoted', value => $xsubtype->{nameURI}} if $xsubtype; for my $name (keys %$xparam) { my $pname = $name; $pname =~ s/(['\\])/\\$1/g; $pname = qq<'$pname'>; $statement-> (', ' . $pname . ' => '); if ($xparam->{$name}->{type} eq 'code') { if (ref $xparam->{$name}->{value}) { $statement-> ($xparam->{$name}->{value}); } else { $statement-> ($self-> ($xparam->{$name}->{value})); } } else { ## String as is $statement-> ($xparam->{$name}->{value}); } } @Attr: @@Name: plIsNullable @@enDesc: Whether this resource is or not. is defined for method parameters, method returns, attribute getters and attribute setters. @@Type: DOMMain:boolean::ManakaiDOM:all @@Get: @@@RaiseException: @@@@@:NO_DIS_TYPE_ERR @@@@enDesc: There is a child resource that does not have attribute. @@@PerlDef: __DEEP{ for my $incase (@{$self-> ()}) { next unless $incase-> (); if ($incase-> or $incase-> -> ()) { $r = true; last; } } }__; @Attr: @@Name: disIsNullValue @@enDesc: Whether this resource have value or not. A resource have value iff it has attribute node that in turn has attribute whose value set to . @@Type: DOMMain:boolean::ManakaiDOM:all @@Get: @@@PerlDef: if ($self->{src}) { __DEEP{ my $val = $self->{src}-> (, for_arg => $self->{for}, forp_arg => $self->{forp}); if ($val) { my $isnull = $val-> (, for_arg => $self->{for}, forp_arg => $self->{forp}); if ($isnull and $isnull->) { $r = true; } } }__; } @Attr: @@Name:plIsDefined @@enDesc: Whether a Perl implementation for this resource is available or not. @@Type: DOMMain:boolean::ManakaiDOM:all @@Get: @@@TrueCase: @@@@enDesc: This resource has its Perl definition and it is implemented. @@@FalseCase: @@@@enDesc: Either this resource does not have any Perl definition or it does have but it is not implemented yet. @@@PerlDef: if (exists $self->{}->{}) { $r = $self->{}->{}; } else { __DEEP{ my $typeuri = { => [ , , ], => [ , ], => [ , , ], }; OUTMOST: for my $mytype (keys %$typeuri) { if ($self-> ($mytype)) { for my $ctype ($typeuri->{$mytype}) { for my $cres (@{$self-> ()}) { if ($cres-> ($ctype)) { unless ($cres->) { $r = false; last OUTMOST; } } } next OUTMOST; } } } # OUTMOST }__; $self->{}->{} = $r; } ##DISResourceDefinition PropDef: @QName:plDefined @enDesc: Whether a Perl definition for this resource is implemented or not. ElementTypeBinding: @Name: BlockElementException @ElementType: ManakaiDOM:raises @ShadowContent: @@@: PERL_PREPROCESS_NO_EXCEPTION_TYPE_ERR @@Description: @@@lang:en @@@@: An exception type specification is required but not specified. @ShadowSibling: @@ManakaiDOM:raises: @@@@: PERL_PREPROCESS_NO_CODE_NAME_ERR @@@Description: @@@@lang:en @@@@@: A code qualified name is required but not specified. @@ManakaiDOM:raises: @@@@: RESOURCE_NOT_DEFINED_ERR @@@Description: @@@@lang:en @@@@@: A referred resource is not defined or has different type. @@ManakaiDOM:raises: @@@@: PERL_CODE_NOT_DEFINED_ERR @@@Description: @@@@lang:en @@@@@: A referred resource does not have its Perl definition. @@ManakaiDOM:raises: @@@@: PERL_PREPROCESS_NO_METHOD_ERR @@@Description: @@@@lang:en @@@@@: A preprocessing instruction which is allowed only in methods is embeded in a context which is not in any method. @@ManakaiDOM:raises: @@@@: PERL_PREPROCESS_NO_FOR_ERR @@@Description: @@@@lang:en @@@@@: A qualified name is required but not specified. @@ManakaiDOM:raises: @@@@: PERL_PREPROCESS_NO_ASSERT_TYPE_ERR @@@Description: @@@@lang:en @@@@@: An assertion type qualified name is required but not specified. @@ManakaiDOM:raises: @@@@: PERL_PREPROCESS_BLOCK_NOT_ALLOWED_ERR @@@Description: @@@@lang:en @@@@@: A preprocessing instruction block is specified but not allowed for this element type. ElementTypeBinding: @Name: InlineElementException @ElementType: ManakaiDOM:raises @ShadowContent: @@@: NO_SOURCE_NODE_ERR @@Description: @@@lang:en @@@@: This resource definition does not have associated node in the source tree. @ShadowSibling: @@ManakaiDOM:raises: @@@@: INTERFACE_CLASS_METHOD_ERR @@@Description: @@@@lang:en @@@@@: An attempt is made to call a class (static) method via an interface, not class. @@ManakaiDOM:raises: @@@@: RESOURCE_NOT_DEFINED_ERR @@@Description: @@@@lang:en @@@@@: A package, method or attribute is not defined or not a resoure of that type. @@ManakaiDOM:raises: @@@@: NO_LOCAL_NAME_ERR @@@Description: @@@@lang:en @@@@@: A referred resource does not have its local name so that it is impossible to refer it by name. @@ManakaiDOM:raises: @@@@: RESERVED_PERL_METHOD_NAME_ERR @@@Description: @@@@lang:en @@@@@: A referred method has its name reserved for special-purpose. @@ManakaiDOM:raises: @@@@: BROKEN_PARAM_SPEC_ERR @@@Description: @@@@lang:en @@@@@: A parameter specification is not well-formed. @@ManakaiDOM:raises: @@@@: PERL_PREPROCESS_NO_CODE_NAME_ERR @@@Description: @@@@lang:en @@@@@: A preprocessing instruction does not contain Perl code fragment name. @@ManakaiDOM:raises: @@@@: PERL_CODE_NOT_DEFINED_ERR @@@Description: @@@@lang:en @@@@@: The referred resource does not have its Perl definition. @@ManakaiDOM:raises: @@@@: PERL_PREPROCESS_NO_ELEMENT_TYPE_ERR @@@Description: @@@@lang:en @@@@@: A preprocessing instruction does not contain its element type name. @@ManakaiDOM:raises: @@@@: UNSUPPORTED_ELEMENT_TYPE_ERR @@@Description: @@@@lang:en @@@@@: An unknown element type is encounted. @@ManakaiDOM:raises: @@@@: NO_PERL_PACKAGE_NAME_ERR @@@Description: @@@@lang:en @@@@@: No Perl package name is defined for a class or interface. PropDef: @QName: ownerClass @enDesc: The class to which this resource belongs. @Type: ResourceURI @rdfs:range: rdf:Resource @rdfs:domain: ManakaiDOM:Class ResourceDef: @QName: DOMMinImpl @rdf:type: ManakaiDOM:IF @AliasFor: DOMMetaImpl:ManakaiDOMMinimumImplementationIF::ManakaiDOM:ManakaiDOMLatest ResourceDef: @QName: SWCFGNode @rdf:type: ManakaiDOM:IF @AliasFor: swcfg21:SWCFGNode::swcfg21:ForLatest ResourceDef: @QName: SWCFGDoc @rdf:type: ManakaiDOM:IF @AliasFor: swcfg21:SWCFGDocument::swcfg21:ForLatest ResourceDef: @QName: MPLImpl @rdf:type: ManakaiDOM:Class @AliasFor: PerlCode:ManakaiPerlCodeImplementation::ManakaiDOM:Perl ResourceDef: @QName: MPLCodeFragment @rdf:type: ManakaiDOM:Class @AliasFor: PerlCode:ManakaiPerlCodeFragment::ManakaiDOM:Perl ResourceDef: @QName: PLInCon @rdf:type: ManakaiDOM:Class @AliasFor: PerlCode:ManakaiPerlInlineContainer::ManakaiDOM:Perl ResourceDef: @QName: PLBlockCon @rdf:type: ManakaiDOM:Class @AliasFor: PerlCode:ManakaiPerlStatementContainer::ManakaiDOM:Perl ResourceDef: @QName: PLAnyCon @rdf:type: ManakaiDOM:Class @AliasFor: PerlCode:ManakaiPerlAnyContainer::ManakaiDOM:Perl ResourceDef: @QName: MPLSS @rdf:type: ManakaiDOM:Class @AliasFor: PerlCode:ManakaiPerlStatementContainer::ManakaiDOM:Perl ResourceDef: @QName: MPLSub @rdf:type: ManakaiDOM:Class @AliasFor: PerlCode:ManakaiPerlSub::ManakaiDOM:Perl ResourceDef: @QName: MPLUnparsedCode @rdf:type: ManakaiDOM:Class @AliasFor: PerlCode:ManakaiPerlUnparsedCode::ManakaiDOM:Perl PropDef: @QName: plCodeFragment @enDesc: Cache for . XParamDef: @QName: errResource @enDesc: A resource on which an error has occurred. XParamDef: @QName: generatedName @enDesc: A generated name. ClsDef: @ClsQName: ManakaiDISPropertyAccessor @enDesc: Accessor methods for resource or module properties. @Method: @@Name: getPropertyBoolean @@enDesc: Gets boolean property value. @@PropNameParam: @@Param: @@@Name:default @@@Type: DOMMain:boolean::ManakaiDOM:all @@@enDesc: The default value that is returned if no explicit property value specification found for this resource. @@Return: @@@Type: DOMMain:boolean::ManakaiDOM:all @@@enDesc: The property value. @@@PerlDef: if (exists $self->{$propName}) { $r = defined $self->{$propName} ? $self->{$propName} : $default; } elsif ($self->{src}) { my $attr_node = $self->{src}-> ($propName, for_arg => $self->{for}, forp_arg => $self->{forp}); $r = $self->{$propName} = ($attr_node ? ($attr_node-> ? true : false) : null); $r = $default unless defined $r; } else { $r = $default; } @Method: @@Name: getPropertyText @@enDesc: Gets property value text. @@PropNameParam: @@Param: @@@Name:default @@@Type: swcfg21:SWCFGString::swcfg21:ForLatest @@@enDesc: The default value that is returned if no explicit property value specification found for this resource. @@@nullCase: @@@@enDesc: No default value supplied; is returned if no value specified. @@Return: @@@Type: swcfg21:SWCFGString::swcfg21:ForLatest @@@enDesc: The property value string. @@@nullCase: @@@@enDesc: No value nor default value has specified. @@@PerlDef: if (exists $self->{$propName}) { $r = defined $self->{$propName} ? $self->{$propName} : $default; } elsif ($self->{src}) { $r = $self->{src}-> ($propName, for_arg => $self->{for}, forp_arg => $self->{forp}); if ($r) { $r = $self->{$propName} = $r->; $r = $default unless defined $r; } else { $r = $default; $self->{$propName} = null; } } else { $r = $default; } @Method: @@Name: getPropertyResource @@enDesc: Gets property value resource. @@PropNameParam: @@NamedParam: @@@Name: defaultMediaType @@@Type: ResourceURI @@@enDesc: The URI reference of the default media type which is used when the property value is retrieved from the source tree and the source tree element does not have its attribute specified. @@@nullCase: @@@@enDesc: Defaulted to . @@Return: @@@Type: ManakaiDISResourceDefinition @@@enDesc: The property value resource. @@@nullCase: @@@@enDesc: No value has specified. @@@UndeclaredPrefixException: @@@RaiseException: @@@@@:UNSUPPORTED_MEDIA_TYPE_ERR @@@@enDesc: The media type of the attribute node in the source tree corresponding to this resource is not supported. @@@PerlDef: if (defined $self->{$propName}) { $r = $self->{db}-> ($self->{$propName}); } elsif ($self->{src}) { __DEEP{ $r = $self->{src}-> ($propName, for_arg => $self->{for}, forp_arg => $self->{forp}); if ($r) { $defaultMediaType = unless defined $defaultMediaType; if ($r-> (, $defaultMediaType, for_arg => $self->{for}, forp_arg => $self->{forp})) { $self->{$propName} = $r->; } elsif ($r-> (, $defaultMediaType, for_arg => $self->{for}, forp_arg => $self->{forp})) { $self->{$propName} = $r-> ($self->{src}->, $self->{for}); } else { my $mt = $r-> (for_arg => $self->{for}, forp_arg => $self->{forp}); __UNDEEP{ __EXCEPTION{UNSUPPORTED_MEDIA_TYPE_ERR:: DIS:uri => {$mt}, DIS:sourceNode => {$r}, }__; }__; } $r = $self->{db}-> ($self->{$propName}); $r-> ($self->{src}); } }__; } @Method: @@Name: getPropertyResourceList @@enDesc: Gets property value resource list. @@PropNameParam: @@NamedParam: @@@Name: recursiveISA @@@Type: DOMMain:boolean::ManakaiDOM:all @@@enDesc: Whether property resource values of resources of this resource should also be included to the returned list or not. @@NamedParam: @@@Name: defaultMediaType @@@Type: ResourceURI @@@enDesc: The URI reference of the default media type which is used when the property value is retrieved from the source tree and the source tree element does not have its attribute specified. @@@nullCase: @@@@enDesc: Defaulted to . @@Return: @@@Type: ResourceList @@@enDesc: An array reference of the property value resources. \ {NOTE:: This list is . \ } @@@UndeclaredPrefixException: @@@RaiseException: @@@@@:UNSUPPORTED_MEDIA_TYPE_ERR @@@@enDesc: The media type of the attribute node in the source tree corresponding to this resource is not supported. @@@PerlDef: $r = []; if (defined $self->{$propName}) { for my $res_uri (@{ref $self->{$propName} eq 'ARRAY' ? $self->{$propName} : []}) { push @$r, $self->{db}-> ($res_uri); } } elsif ($self->{src}) { __DEEP{ $self->{$propName} = []; $defaultMediaType = unless defined $defaultMediaType; for my $res_name_node (@{$self->{src}-> ($propName, for_arg => $self->{for}, forp_arg => $self->{forp})}) { my $res_uri; if ($res_name_node-> (, $defaultMediaType, for_arg => $self->{for}, forp_arg => $self->{forp})) { $res_uri = $res_name_node->; } elsif ($res_name_node-> (, $defaultMediaType, for_arg => $self->{for}, forp_arg => $self->{forp})) { $res_uri =$res_name_node-> ($self->{src}->, $self->{for}); } else { my $mt = $res_name_node-> (for_arg => $self->{for}, forp_arg => $self->{forp}); __UNDEEP{ __EXCEPTION{UNSUPPORTED_MEDIA_TYPE_ERR:: DIS:uri => {$mt}, DIS:sourceNode => {$res_name_node}, }__; }__; } push @{$self->{$propName}}, $res_uri; my $res = $self->{db}-> ($res_uri); push @$r, $res; $res-> ($res_name_node); } }__; } if ($recursiveISA) { __DEEP{ $opt{___recursive_isa_done} ||= {$self->{uri} => true}; my @p_res = @$r; for my $p_res (@p_res) { next if $opt{___recursive_isa_done}->{$p_res->{uri}}; $opt{___recursive_isa_done}->{$p_res->{uri}} = true; push @$r, @{$p_res-> (, recursive_isa => true, ___recursive_isa_done => $opt{___recursive_isa_done}, default_media_type => $defaultMediaType)}; } }__; } @Method: @@Name: addPropertyResourceList @@enDesc: Adds a resource to a resource-list property value. \ {ISSUE:: Should an exception be thrown if the property is not of list? \ } \ {NOTE:: If the property is not ten ever, adding an item clears the list --- i.e. the property values in the source tree will be ignored. Call before adding to avoid this behavior. \ } @@PropNameParam: @@Param: @@@Name: res @@@Type: ManakaiDISResourceDefinition @@@enDesc: A resource to add. @@Return: @@@PerlDef: if (ref $self->{$propName} eq 'ARRAY') { push @{$self->{$propName}}, $res->{uri}; } elsif (not defined $self->{$propName}) { $self->{$propName} = [$res->{uri}]; } ElementTypeBinding: @Name: PropNameParam @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:MethodParameter @@Name: propName @@Type: ResourceURI @@Description: @@@lang:en @@@@: The name of the property. ##DISPropertyAccessor PropDef: @QName:isAnon @Description: @@lang:en @@@: Whether the subject resource is anonymous or not. @Type: DOMMain:boolean::ManakaiDOM:all PropDef: @QName:isDefined @Description: @@lang:en @@@: Whether the subject resource is defined or not. PropDef: @QName:isReferred @Description: @@lang:en @@@: Whether the subject resource is referred or not. @Type: DOMMain:any PropDef: @QName:definingModule @Description: @@lang:en @@@: The module in which the subject resource is defined. @rdfs:domain: DISCore:Module ## -- Datatypes URITypeDef: @QName: AnyURI @Description: @@lang:en @@@: Any URI references. URITypeDef: @QName: FileURI @enDesc: URI references identifying file. URITypeDef: @QName: ForURI @Description: @@lang:en @@@: URI references. DataTypeDef: @QName: ForURIList @Description: @@lang:en @@@: References to the array containing URI references. URITypeDef: @QName: ResourceURI @Description: @@lang:en @@@: A URI reference for a resource. URITypeDef: @QName: MediaTypeURI @Description: @@lang:en @@@: Media type URI references. @rdfs:subClassOf: ResourceURI URITypeDef: @QName: ModuleURI @enDesc: URI references for modules. @rdfs:subClassOf: ResourceURI URITypeDef: @QName: NameURI @enDesc: URI references identifying a resource. @rdfs:subClassOf: ResourceURI DataTypeDef: @QName: ResourceList @enDesc: References to array containing resource definition objects. @rdfs:subClassOf: Perl:ARRAY::ManakaiDOM:all ElementTypeBinding: @Name: DataTypeDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:DataType ElementTypeBinding: @Name: URITypeDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:DataType @@rdfs:subClassOf: AnyURI ## -- Exceptions XParamDef: @QName: anotherSourceNode @enDesc: Another source node in which an error has occurred. In cases of errors, it is the node that defines the resource first. @Type: ManakaiDISNode ResourceDef: @QName: UNDECLARED_NS_PREFIX_ERR @For: ForLatest @AliasFor: DIS:UNDECLARED_NS_PREFIX_ERR::swcfg21:ForLatest ExceptionDef: @ClsQName: ManakaiDISException @enDesc: Exceptions for the operations. @ClsISA: ManakaiDOM:ManakaiDOMException::ManakaiDOM:Perl @XConstGroupDef: @@ClsQName: ManakaiDISExceptionCode @@enDesc: Exception codes for . @@XConstDef: @@@Name: HIERARCHY_REQUEST_ERR @@@Value:3 @@@enDesc: An attempt is made to break the hierarchy. @@@XSubTypeDef: @@@@QName: MERGE_ITSELF_ERR @@@@enDesc: An attempt is made to merge the resource to itself. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName:uri @@@@@enDesc: The URI reference of the resource to merge. @@@@enMufDef: An attempt is made to merge the resource <%p (name => {} );> to itself @@XConstDef: @@@Name: NOT_SUPPORTED_ERR @@@Value:9 @@@enDesc: An attempt is made to do something the implementation does not support. @@@XSubTypeDef: @@@@QName: UNSUPPORTED_MEDIA_TYPE_ERR @@@@enDesc: The implementation does not support the media type. @@@@XParam: @@@@@QName: uri @@@@@enDesc: The URI reference of the media type that is not supported. @@@@XSourceNodeParam: @@@@enMufDef: Media type <%p (name => {});> is not supported @@@XSubTypeDef: @@@@QName: UNSUPPORTED_ELEMENT_TYPE_ERR @@@@enDesc: An unsupported type of element is encounted. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The element type URI reference of the element. @@@@enMufDef: Element type "%p (name => {});" is not supported @@@XSubTypeDef: @@@@QName: NO_PERL_CODE_IMPL_ERR @@@@enDesc: There is no implementation that supports the feature, version . @@XConstDef: @@@Name: INVALID_STATE_ERR @@@Value:11 @@@enDesc: An attempt is made to use an object that is not (or no longer) usable. @@@XSubTypeDef: @@@@QName: NO_ASSOCIATED_DB_ERR @@@@enDesc: No database has been associated with this document. @@XConstDef: @@@Name: INVALID_SOURCE_ERR @@@Value: 200 @@@enDesc: The source input is well-formed but invalid. @@@XSubTypeDef: @@@@QName: NO_MODULE_QNAME_ERR @@@@enDesc: The element must have its attribute. @@@@XSourceNodeParam: @@@XSubTypeDef: @@@@QName: NO_LOCAL_NAME_ERR @@@@enDesc: The resource does not have a local name. @@@@XSourceNodeParam: @@@XSubTypeDef: @@@@QName: UNABLE_TO_GET_MODULE_ERR @@@@enDesc: The implementation is unable to get the module source. @@@@Def: @@@@@ContentType: lang:muf @@@@@lang:en @@@@@@: Unable to get the module source of <%p (name => {});> @@@@XParam: @@@@@QName: uri @@@@@enDesc: The URI reference of the module. @@@@XParam: @@@@@QName: namespaceURI @@@@@enDesc: The namespace URI of the module name. @@@@XParam: @@@@@QName: localName @@@@@enDesc: The local name of the module name. @@@@XParam: @@@@@QName: for @@@@@enDesc: The of the module. @@@XSubTypeDef: @@@@QName: NO_FOR_QNAME_ERR @@@@enDesc: A element must have attribute. @@@@XSourceNodeParam: @@@XSubTypeDef: @@@@QName: FOR_ALREADY_DEFINED_ERR @@@@enDesc: The named as the same URI reference has already defined. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName: anotherSourceNode @@@@@enDesc: The node that defines the URI reference before. @@@@XParam: @@@@@Name: uri @@@@@enDesc: The URI reference of the attempted to define. @@@@enMufDef: <%p (name => {});> is already defined @@@XSubTypeDef: @@@@QName: RESOURCE_ALREADY_DEFINED_ERR @@@@enDesc: The resource named as the same URI reference has already defined. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName: anotherSourceNode @@@@@enDesc: The node that defines the URI reference before. @@@@XParam: @@@@@Name: uri @@@@@enDesc: The URI reference of the resource attempted to define. @@@@enMufDef: Resource <%p (name => {});> is already defined @@@XSubTypeDef: @@@@QName: ELEMENT_NOT_ALLOWED_ERR @@@@enDesc: An element has occured where it is not allowed. @@@@enMufDef: Module <%p (name => {});>: Element of type <%p (name => {});> is not allowed here @@@@XSourceNodeParam: @@@@XParam: @@@@@QName: elementType @@@@@enDesc: The expanded element type name of the element. @@@@XParam: @@@@@QName: uri @@@@@enDesc: The URI reference of the module. @@@XSubTypeDef: @@@@QName: NO_REQUIRED_ATTR_ERR @@@@enDesc: A required attribute is not specified. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName: elementType @@@@@enDesc: The expanded URI reference of the attribute name. @@@@enMufDef: Attribute <%p (name => {});> must be specified @@@XSubTypeDef: @@@@QName: FOR_NOT_DEFINED_ERR @@@@enDesc: A is referred but not defined. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName: uri @@@@@enDesc: The URI reference of the that is not defined. @@@@enMufDef: <%p (name => {});> is not defined @@@XSubTypeDef: @@@@QName: RESOURCE_NOT_DEFINED_ERR @@@@enDesc: A resource is referred but not defined or the resource referred does not have the type expected. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName: uri @@@@@enDesc: The URI reference of the resource that is not defined. @@@@XParam: @@@@@QName: elementType @@@@@enDesc: element type (either tree element type or preprocessing element type) of the element in which a reference to the undefined resource is contained. @@@@XParam: @@@@@QName: localName @@@@@enDesc: The local name of the undefined resource. @@@@XParam: @@@@QName: sourceCode @@@@enDesc: Source code fragment that referres this resource. @@@@XParam: @@@@@QName:expectedType @@@@@enDesc: Expected resource type. @@@@enMufDef: %p (name => {}, prefix => {"}, suffix => {": }); Resource%p (name => {}, prefix => { <}, suffix => {>});%p (name => {}, prefix => { "}, suffix => {"}); is not defined or wrong type%p (name => {}, prefix => { (<}, suffix => {> is expected)}); @@@XSubTypeDef: @@@@QName: NO_SOURCE_NODE_ERR @@@@enDesc: A resource does not have associated node in the source tree. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName:uri @@@@@enDesc: The URI reference of the resource. @@@XSubTypeDef: @@@@QName: RESERVED_PERL_METHOD_NAME_ERR @@@@enDesc: A reserved Perl method name is used. @@@@XParam: @@@@@QName:uri @@@@@enDesc: The URI reference of the method resource. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName: generatedName @@@@@enDesc: A reserved method name. @@@XSubTypeDef: @@@@QName: NO_DIS_TYPE_ERR @@@@enDesc: attribute is not found. @@@@XSourceNodeParam: @@@XSubTypeDef: @@@@QName: NO_METHOD_RETURN_ERR @@@@enDesc: A resource does not have any child. @@@@XSourceNodeParam: @@@XSubTypeDef: @@@@QName: NO_ATTR_GET_ERR @@@@enDesc: A resource does not have any child. @@@@XSourceNodeParam: @@@XSubTypeDef: @@@@QName:INTERFACE_CLASS_METHOD_ERR @@@@enDesc: An attempt is made to call a static (class) method from an interface. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName:uri @@@@@enDesc: The URI reference of the interface. @@@@XParam: @@@@@QName:sourceCode @@@@@enDesc: Source code fragment that calls a class method. @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The element type URI reference of the element that calls a method. @@@XSubTypeDef: @@@@QName: BROKEN_PARAM_SPEC_ERR @@@@enDesc: A parameter specification is broken. @@@@XParam: @@@@@QName: sourceCode @@@@@enDesc: Source code fragment that contains the broken parameter specification. @@@@XSourceNodeParam: @@@@enMufDef: %p (name => {}, prefix => {"}, suffix => {": });Broken parameter specification @@@XSubTypeDef: @@@@QName:PERL_PREPROCESS_NO_ELEMENT_TYPE_ERR @@@@enDesc: A preprocessing instruction does not have its element type. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName:sourceCode @@@@@enDesc: Source code fragment. @@@@enMufDef: %p (name => {}, prefix => {"}, suffix => {": });Element type name is not specified @@@XSubTypeDef: @@@@QName: NO_PERL_PACKAGE_NAME_ERR @@@@enDesc: No Perl package name is defined for the resource referred. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName:sourceCode @@@@@enDesc: Source code fragment. @@@@XParam: @@@@@QName:uri @@@@@enDesc: THe URI reference of the resource referred. @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The element type of Perl preprocessing instruction in which the resource is referred. @@@@enMufDef: %p (name => {}, prefix => {<}, suffix => {>: });Perl package name is not defined @@@XSubTypeDef: @@@@QName: PERL_PREPROCESS_NO_EXCEPTION_TYPE_ERR @@@@enDesc: An exception type specification is required. @@@@XSourceNodeParam: @@@@XSourceCodeParam: @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The element type of the preprocessing instruction. @@@XSubTypeDef: @@@@QName: PERL_PREPROCESS_NO_CODE_NAME_ERR @@@@enDesc: A code name specification is required. @@@@XSourceNodeParam: @@@@XSourceCodeParam: @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The element type of the preprocessing instruction. @@@XSubTypeDef: @@@@QName: PERL_CODE_NOT_DEFINED_ERR @@@@enDesc: The specified resource does not have its Perl definition. @@@@XSourceNodeParam: @@@@XSourceCodeParam: @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The element type of the preprocessing instruction. @@@@XParam: @@@@@QName:uri @@@@@enDesc: The URI reference of the resource referred. @@@@XParam: @@@@@QName:localName @@@@@enDesc: The local name of the resource referred. @@@XSubTypeDef: @@@@QName: PERL_PREPROCESS_NO_METHOD_ERR @@@@enDesc: A preprocessing instruction which is only allowed in method definitions is used in a code which is not a method. @@@@XSourceNodeParam: @@@@XSourceCodeParam: @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The element type of the preprocessing instruction. @@@XSubTypeDef: @@@@QName: PERL_PREPROCESS_NO_FOR_ERR @@@@enDesc: A specification is required. @@@@XSourceNodeParam: @@@@XSourceCodeParam: @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The element type of the preprocessing instruction. @@@XSubTypeDef: @@@@QName: PERL_PREPROCESS_NO_ASSERT_TYPE_ERR @@@@enDesc: An assertion type specification is required. @@@@XSourceNodeParam: @@@@XSourceCodeParam: @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The element type of the preprocessing instruction. @@@XSubTypeDef: @@@@QName: PERL_PREPROCESS_BLOCK_NOT_ALLOWED_ERR @@@@enDesc: A preprocessing instruction block occurred with element type which does not allow it. @@@@XSourceNodeParam: @@@@XSourceCodeParam: @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The element type of the preprocessing instruction. @@@XSubTypeDef: @@@@QName: NON_NAMED_PARAMETER_AFTER_NAMED_ERR @@@@enDesc: A non-named method parameter following any named method parameter is occurred. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName:uri @@@@@enDesc: The URI reference of the non-named method parameter resource. @@@@XParam: @@@@@QName:localName @@@@@enDesc: The local name of the non-named method parameter. @@@XSubTypeDef: @@@@QName:DISPERL_NO_VALUE_ALLOWED_ERR @@@@enDesc: An element node have a value but the definition of that element type does not allow it. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The element type URI reference of the element. @@@XSubTypeDef: @@@@QName:NO_CONST_VALUE_ERR @@@@enDesc: The source element node for a constant value resource does not have attribute. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName:elemntType @@@@@enDesc: The element type URI reference of the element from which a constant value resource is referred. @@@@XParam: @@@@@QName:uri @@@@@enDesc: The resource URI reference of the constant value resource. @@@@XParam: @@@@@QName:localName @@@@@enDesc: The local name of the constant value resource. @@@XSubTypeDef: @@@@QName:NO_ATTR_SET_ERR @@@@enDesc: An attribute setter is referred but the attribute does not define any setter. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName:errResource @@@@@enDesc: The attribute resource. @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The type of the element by which this attribute is referred. ##DISException XParamDef: @QName:expectedType @Type: ResourceURI @enDesc: Expected resource type URI reference. XParamDef: @QName: sourceCode @Type: DISLang:String::ManakaiDOM:all @enDesc: The source code fragment in which an error occurred. XParamDef: @QName: elementType @Type: ResourceURI @enDesc: The name of the element type. XParamDef: @QName: uri @Type: ResourceURI @enDesc: The name of the resource, composed from , and . XParamDef: @QName: localName @Type: DISCore:LocalName::ManakaiDOM:all @enDesc: The local name of the resource, unique in namespace. XParamDef: @QName: namespaceURI @Type: AnyURI @enDesc: The namespace URI reference of the resource name. XParamDef: @QName: for @Type: ForURI @enDesc: The URI reference of the resource. ElementTypeBinding: @Name: XSourceNodeParam @ElementType: ManakaiDOM:exceptionOrWarningParameter @ShadowContent: @@QName: sourceNode @@Description: @@@lang:en @@@@: The node in which an error has occurred. ElementTypeBinding: @Name: XSourceCodeParam @ElementType: ManakaiDOM:exceptionOrWarningParameter @ShadowContent: @@QName: sourceCode @@Description: @@@lang:en @@@@: The source code in which an error has occurred. ClsDef: @ClsQName: ManakaiDISExceptionTarget @enDesc: Objects that is able to be the target of an exception. @IntMethod: @@Operator: @@@@: ManakaiDOM:MUErrorHandler @@@ContentType: dis:TypeQName @@Description: @@@lang:en @@@@: This method is a generic error handler; all manakai exceptions and warnings associated to an object are once reported to this method and then delivered to appropriate entities. \ If the error is an exception (such as or ), it is simply thrown. If the error is only a warning, it is reported via the interface. \ See documentation for more information on the error reporting mechanism. \ {NOTE:: This kind of methods are named as in the convention of . \ } @@Param: @@@Name:err @@@Type: ManakaiDOM:ManakaiDOMExceptionOrWarning::ManakaiDOM:Perl @@@Description: @@@@lang:en @@@@@: An exception object that describes what kind of error it is and how it should be recovered. \ {NOTE:: Exception objects in manakai implementation inherit the class , that in turn inherits . \ } @@Return: @@@PerlDef: if ($err->isa ()) { $err->throw; } else { \## TODO: Implement warning reporting warn $err->stringify; } ##DISExceptionTarget ForDef: @QName: DIS:ForIF ForDef: @QName: DIS:ForClass ElementTypeBinding: @Name: IFClsDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: @@@@: dis:MultipleResource @@@ForCheck: !ForClass !ForIF @@rdf:type: @@@@: ManakaiDOM:IF @@@ForCheck: ForIF @@rdf:type: @@@@: ManakaiDOM:Class @@@ForCheck: ForClass @@resourceFor: ForIF @@resourceFor: @@@@: ForClass @@@ForCheck: ForLatest @@DOMMain:implementFeature: @@@@:CoreFeature10 @@@ForCheck: ForClass @@ForCheck: ManakaiDOM:Perl ElementTypeBinding: @Name: ClsDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:Class @@AliasFor: @@@@: ::DIS:ForLatest @@@For: !=DIS:ForLatest @@ForCheck: ManakaiDOM:Perl @@DOMMain:implementFeature: CoreFeature10 ElementTypeBinding: @Name: ExceptionDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:ExceptionClass @@AliasFor: @@@@: ::ForLatest @@@For: !=ForLatest @@ForCheck: ManakaiDOM:Perl @@DOMMain:implementFeature: CoreFeature10 ElementTypeBinding: @Name: ClsQName @ElementType: dis:QName ElementTypeBinding: @Name: ClsISA @ElementType: dis:ISA ElementTypeBinding: @Name: Method @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:Method ElementTypeBinding: @Name: IntMethod @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:Method @@ManakaiDOM:isForInternal:1 ElementTypeBinding: @Name: Attr @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:Attribute ElementTypeBinding: @Name: Return @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:MethodReturn ElementTypeBinding: @Name: Get @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:AttributeGet ElementTypeBinding: @Name: Set @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:AttributeSet ElementTypeBinding: @Name: Param @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:MethodParameter ElementTypeBinding: @Name: PerlDef @ElementType: dis:Def @ShadowContent: @@ContentType: lang:Perl ElementTypeBinding: @Name: disDef @ElementType: dis:Def @ShadowContent: @@ContentType: lang:dis ElementTypeBinding: @Name: InCase @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:InCase ElementTypeBinding: @Name: nullCase @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:InCase @@Value: @@@is-null:1 ElementTypeBinding: @Name: TrueCase @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:InCase @@Value:true @@Type: DOMMain:boolean::ManakaiDOM:all ElementTypeBinding: @Name: FalseCase @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:InCase @@Value:false @@Type: DOMMain:boolean::ManakaiDOM:all ElementTypeBinding: @Name: enDesc @ElementType: dis:Description @ShadowContent: @@lang:en ElementTypeBinding: @Name: PropDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: rdf:Property @@AliasFor: @@@@: ::ManakaiDOM:all @@@For: !=ManakaiDOM:all ElementTypeBinding: @Name: MethodRedef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:Method @@ManakaiDOM:isRedefining:1 ElementTypeBinding: @Name: NamedParam @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:MethodParameter @@DISPerl:isNamedParameter:1 ElementTypeBinding: @Name: NodeParam @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:MethodParameter @@DISPerl:isNamedParameter:1 @@Name: node @@Type: ManakaiDISNode @@Description: @@@lang:en @@@@: The node in which the name has occurred. It is intended to be reported when an exception had been raised. @@ResourceDef: @@@rdf:type: ManakaiDOM:InCase @@@Value: @@@@is-null:1 @@@Description: @@@@lang:en @@@@@: The source of the name is not a node. ElementTypeBinding: @Name: ForParam @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:MethodParameter @@DISPerl:isNamedParameter:1 @@Name: forArg @@Type: ForURI @@Description: @@@lang:en @@@@: The URI reference. @@ResourceDef: @@@rdf:type: ManakaiDOM:InCase @@@Value: @@@@is-null:1 @@@Description: @@@@lang:en @@@@@: Equivalent to , i.e. . ElementTypeBinding: @Name: ForpParam @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:MethodParameter @@DISPerl:isNamedParameter:1 @@Name: forpArg @@Type: ForURIList @@Description: @@@lang:en @@@@: An array reference containing additional constraints ( list). @@ResourceDef: @@@rdf:type: ManakaiDOM:InCase @@@Value: @@@@is-null:1 @@@Description: @@@@lang:en @@@@@: Equivalent to the empty array reference. ElementTypeBinding: @Name: MediaTypeParam @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:MethodParameter @@DISPerl:isNamedParameter:1 @@Name: mediaType @@Type: MediaTypeURI @@Description: @@@lang:en @@@@: The URI reference identifying a media type. @@ResourceDef: @@@rdf:type: ManakaiDOM:InCase @@@Value: @@@@is-null:1 @@@Description: @@@@lang:en @@@@@: No media type specified. ElementTypeBinding: @Name: MediaTypeDefaultParam @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DISLang:MethodParameter @@DISPerl:isNamedParameter:1 @@Name: defaultMediaType @@Type: MediaTypeURI @@Description: @@@lang:en @@@@: The default media type, i.e. the type used when no explicit specification is not found in the source tree. @@ResourceDef: @@@rdf:type: ManakaiDOM:InCase @@@Value: @@@@is-null:1 @@@Description: @@@@lang:en @@@@@: Defaulted to . ElementTypeBinding: @Name: RaiseException @ElementType: ManakaiDOM:raises ElementTypeBinding: @Name: UndeclaredPrefixException @ElementType: ManakaiDOM:raises @ShadowContent: @@@: UNDECLARED_NS_PREFIX_ERR @@Description: @@@lang:en @@@@: The implementation has encounted an undeclared namespace prefix. ElementTypeBinding: @Name: NoDBException @ElementType: ManakaiDOM:raises @ShadowContent: @@@: NO_DB_ASSOCIATED_ERR @@Description: @@@lang:en @@@@: No database is associated to this document. ElementTypeBinding: @Name: XConstGroupDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:ConstGroup @@Type: DOMMain:unsigned-short::ManakaiDOM:all @@rdfs:subClassOf: DOMMain:unsigned-short::ManakaiDOM:all ElementTypeBinding: @Name: XConstDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:Const ElementTypeBinding: @Name: XSubTypeDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:ExceptionOrWarningSubType ElementTypeBinding: @Name: XParam @ElementType: ManakaiDOM:exceptionOrWarningParameter ElementTypeBinding: @Name: XParamDef @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: DOMMain:XWParameter @@For: =ManakaiDOM:all ElementTypeBinding: @Name: enMufDef @ElementType: dis:Def @ShadowContent: @@ContentType: lang:muf @@lang:en