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 @@@Year:2004 @@@Author: @@@@FullName:Wakaba @@@@Mail:w@suika.fam.cx @Date: @@@: $Date: 2005/03/16 09:08:13 $ @@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 @@@enDesc: The source name. @@Return: @@@Type: DISLang:String @@@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 @@@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 @@@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 @@@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 @@@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 @@@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 @@@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 @@@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 /:/, $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 @@@Description: @@@@lang:en @@@@@: A qualified name. @@NodeParam: @@Return: @@@Type: Perl:ARRAY @@@Description: @@@@lang:en @@@@@: A list of namespace URI and local name. @@@UndeclaredPrefixException: @@@PerlDef: $qname =~ s/^\s+//; $qname =~ s/\s+$//; my ($prefix, $lname) = split /:/, $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 @@@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 @@@nullCase: @@@@enDesc: No value. @@@PerlDef: __DEEP{ my $v = $self->; if (defined $v and not ref $v eq 'ARRAY') { my ($n, $v) = split /:/, $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 /:/, $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 @@@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 @@@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 @@@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-> (); } }__; ##DISElement 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 @@@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; ##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 @@@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 @@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 @@@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 @@@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 @@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 @@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: @@@PerlDef: $r = $self->{forp}; @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 @@@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 @@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 @@@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 @@@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: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: 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->{}; } else { $self->{} = $self->{src}-> (, for_arg => $self->{for}, forp_arg => $self->{forp}); if ($self->{}) { $r = $self->{} = $self->{} ->; } else { my $pr = $self-> (); if ($pr) { $r = $pr->; $self->{} = $pr->{}; } 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->{}; } else { $self->{} = $self->{src}-> (, for_arg => $self->{for}, forp_arg => $self->{forp}); if ($self->{}) { $r = $self->{} = $self->{} ->; } elsif (defined $self->{}) { $r = $self->{} = $self->{}; $self->{} = $self->{}; } else { $self->{} = $self->{} = $self->{src}-> (, for_arg => $self->{for}, forp_arg => $self->{forp}); if ($self->{}) { $r = $self->{} = $self->{} = $self->{} ->; } else { my $pr = $self-> (); if ($pr) { $r = $self->{} = $pr->; $self->{} = $pr->{}; } 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 @@@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. @@@PerlDef: __DEEP{ if (exists $self->{}) { $r = $self->{}; } elsif (not $self->{src}) { $r = $self->{} = null; } elsif ($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}); if ($def-> ()) { $r = $self->{} = $self-> -> ($def->); $r-> ($self->{src}-> (key => [qw/Name QName type Type/])); $r-> (1); } elsif ($def-> ()) { $r = $self->{} = $self-> -> ($def->); ## TODO: implement } 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}}, }__; }__; } $r = $self->{} = $self-> -> ($self->); ## TODO: Parameter, sub, ... $r-> ($ret->); } elsif ($self-> ()) { $self->{} = null; ## To avoid loop my $get = $self-> (); unless ($get) { __UNDEEP{ __EXCEPTION{NO_ATTR_GET_ERR:: DIS:errResource => {$self}, DIS:sourceNode => {$self->{src}}, }__; }__; } $r = $self->{} = $self-> -> ($self->); ## TODO: Parameter, sub, set, ... $r-> ($get->); } 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). @@Return: @@@Type: lang:Perl::ManakaiDOM:all @@@enDesc: Preprocessed Perl code. @@@PerlDef: \## @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: @@Return: @@@Type: lang:Perl::ManakaiDOM:all @@@enDesc: Preprocessed Perl code. @@@InlineElementException: @@@PerlDef: unless ($self->{src}) { __EXCEPTION{NO_SOURCE_NODE_ERR:: DIS:uri => {$self->{uri}}, }__; } __DEEP{ our $RegQNameChar; my $plimpl = $self->; $r = $plimpl->; for my $source_code (split /(?]+> | \b(?:null|true|false)\b)/x, $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); $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}, }__; }__; } unless ($class-> ()) { $self-> -> ($class->); } my $method = $self-> ($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}, }__; }__; } 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->; 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; $code_name =~ tr/|/:/; } 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}, }__}__; } 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}}, }__}__; } } else { __UNDEEP{__EXCEPTION{PERL_PREPROCESS_NO_ELEMENT_TYPE_ERR:: DIS:sourceNode => {$node || $self->{src}}, DIS:sourceCode => {$source_code}, }__}__; } } elsif ({ 'tr'.'ue' => true, 'fal'.'se' => true, 'nu'.'ll' => true, }->{$source_code}) { $r-> ({ 'tr'.'ue' => 1, 'fal'.'se' => 0, 'nu'.'ll' => 'undef', }->{$source_code}); } else { $r-> ($source_code); } } # 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 ( ## 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}}, }__; } ##DISResourceDefinition 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 @@@enDesc: A preprocessing instruction does not contain Perl code fragment name. @@ManakaiDOM:raises: @@@@: PERL_CODE_NOT_DEFINED_ERR @@@enDesc: The referred resource does not have its Perl definition. @@ManakaiDOM:raises: @@@@: PERL_PREPROCESS_NO_ELEMENT_TYPE_ERR @@@enDesc: A preprocessing instruction does not contain its element type name. @@ManakaiDOM:raises: @@@@: UNSUPPORTED_ELEMENT_TYPE_ERR @@@enDesc: An unknown element type is encounted. 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: 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}) { $r = $self->{src}-> ($propName, for_arg => $self->{for}, forp_arg => $self->{forp}); $self->{$propName} = $r; $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 @@@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 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. @@@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: 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: @@@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. @@@XSubTypeDef: @@@@QName: PERL_PREPROCESS_NO_CODE_NAME_ERR @@@@enDesc: A preprocessing instruction requires Perl code fragment name but it is not specified. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName: sourceCode @@@@@enDesc: Source code fragment. @@@@XParam: @@@@@QName:elementType @@@@@enDesc: The type of the element in which code name should have been specified. @@@XSubTypeDef: @@@@QName: PERL_CODE_NOT_DEFINED_ERR @@@@enDesc: A resource does not have its Perl definition. @@@@XSourceNodeParam: @@@@XParam: @@@@@QName:sourceCode @@@@@enDesc: Source code fragment. @@@@XParam: @@@@@QName:localName @@@@@enDesc: The local name of the resource referred. @@@@XParam: @@@@@QName:uri @@@@@enDesc: The URI reference of the resource 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 @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. 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 ElementTypeBinding: @Name: FalseCase @ElementType: dis:ResourceDef @ShadowContent: @@rdf:type: ManakaiDOM:InCase @@Value:false @@Type: DOMMain:boolean 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