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/02/27 14:27:56 $ @@ContentType: dis:Date.RCS @Require: @@Module: @@@Name: SuikaWikiConfig21 @@@QName: Markup:SuikaWikiConfig21 @@@WithFor: swcfg21:ForLatest @@Module: @@@Name: DIS @@@WithFor: DIS:ForLatest @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/ @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 => {}, }, ; @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: 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; ##DISImplementation 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 @ClsISA: swcfg21:ManakaiSWCFGNode::swcfg21:ForLatest @Description: @@lang:en @@@: node objects. @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; } } 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; } } } ## TODO: Module ns support @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. @@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. @@@PerlDef: my $od = $self-> || $self; my $binds = $od->{}->{}; if (exists $binds->{$prefix}) { $r = $binds->{$prefix}; } elsif ($makeNewBinding) { $r = $binds->{$prefix} = $prefix; } else { $r = null; } ## TODO: Module ns support @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: swcfg21:ManakaiSWCFGElement::swcfg21:ForLatest @ClsISA: ManakaiDISNode @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 @ce = @{$self->}; for my $ce (@ce) { my $et = $ce->; if ($et eq ) { my $for = [split /\s+/, $ce->]; FCs: for my $f (@$for) { if ($f =~ /^!=(.+)$/) { ## -- NOT EQUAL TO my $uri = $self-> ($1); my $f = $self-> -> -> ($uri); $f-> ($ce); for my $arg_uri ($forArg, @{$forpArg}) { if ($uri eq $arg_uri) { $r = false; last FORMATCH; } } } elsif ($f =~ /^!(.+)$/) { ## -- NOT ISA my $uri = $self-> ($1); my $f = $self-> -> -> ($uri); $f-> ($ce); for my $arg_uri ($forArg, @{$forpArg}) { if ($f-> ($arg_uri)) { $r = false; last FORMATCH; } } } elsif ($f =~ /^=(.+)$/) { ## -- EQUAL TO my $uri = $self-> ($1); my $f = $self-> -> -> ($uri); $f-> ($ce); for my $arg_uri ($forArg, @{$forpArg}) { if ($arg_uri eq $uri) { next FCs; } } $r = false; last FORMATCH; } else { ## -- ISA my $uri = $self-> ($1); my $f = $self-> -> -> ($uri); $f-> ($ce); for my $arg_uri ($forArg, @{$forpArg}) { if ($f-> ($arg_uri)) { next FCs; } } $r = false; last FORMATCH; } } # FCs } # dis:ForCheck } # children my $has_for = false; for my $ce (@ce) { if ($self-> eq ) { my $for = [split /\s+/, $ce->]; my $ok = true; $has_for = true; AFOR: for my $f (@$for) { if ($f =~ /^!=(.+)$/) { ## -- NOT EQUAL TO my $uri = $self-> ($1); my $f = $self-> -> -> ($uri); $f-> ($ce); if ($uri eq $forArg) { $ok = false; last AFOR; } } elsif ($f =~ /^!(.+)$/) { ## -- NOT ISA my $uri = $self-> ($1); my $f = $self-> -> -> ($uri); $f-> ($ce); if ($f-> ($forArg)) { $ok = false; last AFOR; } } elsif ($f =~ /^=(.+)$/) { ## -- EQUAL TO my $uri = $self-> ($1); my $f = $self-> -> -> ($uri); $f-> ($ce); unless ($uri eq $forArg) { $ok = false; last AFOR; } } else { ## -- ISA my $uri = $self-> ($1); my $f = $self-> -> -> ($uri); $f-> ($ce); unless ($f-> ($forArg)) { $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. @@Return: @@@Type: DOMMain:boolean @@@Description: @@@@lang:en @@@@@: Whether this element is of or not. @@@PerlDef: if (defined $mediaType) { __DEEP{ my $ctn = $self-> (); my $ct; $ct = $ctn-> if $ctn; $ct = $defaultMediaType unless defined $ct; my $res = $self-> -> -> ($ct); $res-> ($ctn or $self); unless ($res-> ($ct)) { $r = false; } else { $r = true; } }__; } else { $r = true; } @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 { ## TODO: default namespace } @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: @@Return: @@@Type: AnyURI @@@Description: @@@@lang:en @@@@@: The expanded URI reference. @@@UndeclaredPrefixException: @@@PerlDef: $qname =~ s/^\s+//; $qname =~ s/\s+$//; my ($prefix, $lname) = split /:/, $qname; __DEEP{ if (defined $lname) { $r = $self-> ($prefix) . $lname; } else { ## In default namespace $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; __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->}) { if ($c-> eq $attrName and $c-> ($forArg, $forpArg) and $c-> ($mediaType, $defaultMediaType)) { $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->}) { if ($c-> eq $attrName and $c-> ($forArg, $forpArg) and $c-> ($mediaType, $defaultMediaType)) { push @$r, $c; } } @Method: @@Name: disChildElements @@enDesc: A list of child elements. @@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; } }__; @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; } }__; @Attr: @@Name: tfqnamesValueURI @@enDesc: The element value (written as ), as URI reference. \ {NOTE:: What should be if list value? \ } @@Get: @@@Type:ResourceURI @@@nullCase: @@@@enDesc: No value. @@@UndeclaredPrefixException: @@@PerlDef: my $v = $self->; if (defined $v and not ref $v eq 'ARRAY') { __DEEP{ $r = $self-> ($v); }__; } else { $r = null; } ##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); }__; ##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: swcfg21:ManakaiSWCFGComment::swcfg21:ForLatest @ClsISA: ManakaiDISNode @Description: @@lang:en @@@: comment node objects. ##DISComment ClsDef: @ClsQName: ManakaiDISDocumentFragment @ClsISA: swcfg21:ManakaiSWCFGDocumentFragment::swcfg21:ForLatest @ClsISA: ManakaiDISNode @Description: @@lang:en @@@: document fragment node objects. ##DISDocumentFragment ClsDef: @ClsQName: ManakaiDISDocument @ClsISA: swcfg21:ManakaiSWCFGDocument::swcfg21:ForLatest @ClsISA: ManakaiDISNode @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. @@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; } }__; ##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: modURI @@@Type: ModuleURI @@@Description: @@@@lang:en @@@@@: A module URI reference. @@Return: @@@Type: ManakaiDISModuleDefinition @@@Description: @@@@lang:en @@@@@: The module definition. @@@PerlDef: 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: resURI @@@Type: ResourceURI @@@Description: @@@@lang:en @@@@@: A resource URI reference. @@@nullCase: @@@@Description: @@@@@lang:en @@@@@@: Defaulted to . @@Return: @@@Type: ManakaiDISResourceDefinition @@@Description: @@@@lang:en @@@@@: The resource definition. @@@PerlDef: $resURI = unless defined $resURI; if (defined $self->{resDef}->{$resURI}) { $r = $self->{resDef}->{$resURI}; } else { $r = $self->{resDef}->{$resURI} = bless { uri => $resURI, subOf => {}, supOf => {}, db => $self, for => , forp => [], }, ; 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: @@@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_uri; my $mod_name_uri = $mod_name_node ->; __CODE{tfurisToURI:: $turi => $mod_name_uri, $furi => $forArg, $uri => $mod_uri}__; my $mod = $self-> ($mod_uri); 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); ## -- Loads "for all" my $nuri = $mod->{nameURI}; my $forall = ; my $uri; __CODE{tfurisToURI:: $turi => $nuri, $furi => $forall, $uri => $uri}__; my $rmod = $self-> ($uri); unless ($rmod->) { my $rdoc = $resolver-> ($self, $uri, $mod->{namespaceURI}, $mod->{localName}, $forall); unless ($rdoc) { __UNDEEP{ __EXCEPTION{UNABLE_TO_GET_MODULE_ERR:: DIS:uri => {$uri}, DIS:namespaceURI => {$mod->{namespaceURI}}, DIS:localName => {$mod->{localName}}, DIS:for => {$forall}, DIS:sourceNode => {$mod->{src}}, }__; }__; } $self-> ($rdoc, $resolver, for_arg => $forall); } # Unless "for all" loaded ## -- Loads Required Modules 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 $xuri = $nuri . $ln; __CODE{tfurisToURI:: $turi => $xuri, $furi => $for, $uri => $uri}__; my $rmod = $self-> ($uri); unless ($rmod->) { my $rdoc = $resolver-> ($self, $uri, $nuri, $ln, $for); unless ($rdoc) { __UNDEEP{ __EXCEPTION{UNABLE_TO_GET_MODULE_ERR:: DIS:uri => {$uri}, DIS:namespaceURI => {$nuri}, DIS:localName => {$ln}, DIS:for => {$for}, DIS:sourceNode => {$rm}, }__; }__; } $self-> ($rdoc, $resolver, for_arg => $for); } } # Child Module elements my $root_elements = $doc->; if ($mod->{for} eq ) { ## -- Loads "for" definitions for my $el (@$root_elements) { next unless $el-> eq ; $self-> ($mod, $el); } } for my $el (@$root_elements) { my $et = $el->; if ($et eq ) { $self-> ($mod, null, $el); } elsif ({ => 1, => 1, => 1, }->{$et}) { # } else { __UNDEEP{ __EXCEPTION{ELEMENT_NOT_ALLOWED_ERR:: DIS:elementType => {$et}, DIS:sourceNode => {$el}, DIS:uri => {$mod->{uri}}, }__; }__; } } } # 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); ## 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 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: el @@@Type:ManakaiDISElement @@@enDesc: The source element object. @@ForParam: @@ForpParam: @@Return: @@@ResDefDupException: @@@ElementNotAllowedException: @@@PerlDef: $forArg = unless defined $forArg; $forpArg ||= []; __DEEP{ my $qn_node = $el-> (, for_arg => $forArg, forp_arg => $forpArg); my $res; if ($qn_node) { my $qn_uri = $qn_node->; my $uri; __CODE{tfurisToURI:: $turi => $qn_uri, $furi => $forArg, $uri => $uri}__; $res = $self-> ($uri); if ($res->) { __UNDEEP{ __EXCEPTION{RESOURCE_ALREADY_DEFINED_ERR:: DIS:uri => {$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) { $res->{localName} = $n_node->; if ($parentResource) { my $puri = $parentResource->{uri}; my $ru; my $ln = $res->{localName}; __CODE{getChildResourceURI:: $parentURI => $puri, $localName => $ln, $result => $ru}__; my $uri; __CODE{tfurisToURI:: $turi => $ru, $furi => $forArg, $uri => $uri}__; $res = $self-> ($uri); $res->{nameURI} = $ru; $res->{} = true; } else { ## Root local name resource $res->{namespaceURI} = $mod-> (, null); $res->{nameURI} = $res->{namespaceURI} . $res->{localName}; } } else { $res = $self-> (); $res->{} = true; } } $res->{for} = $forArg; $res->{forp} = $forpArg; $res->{src} = $el; $res->{} = $mod->{uri}; $res->{} = $parentResource->{uri} if $parentResource; =pod for my $ce (@{$el->}) { my $xn = $ce->; if ($xn eq or $xn eq ) { my $sfor = $self-> ($ce->); $for-> ($sfor); ## TODO: warn if dis:Implement } elsif ({ => 1, => 1, => 1, => 1, }->{$xn}) { # } else { __UNDEEP{ __EXCEPTION{ELEMENT_NOT_ALLOWED_ERR:: DIS:uri => {$mod->{uri}}, DIS:sourceNode => {$ce}, DIS:elementType => {$xn}, }__; }__; } } =cut }__; # DEEP ##DISDatabase 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->{}; ##DISModuleDefinition 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}; @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: DOMMain:any @@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->{} = true 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: $superFor->{} = true; my @from = ($self->{uri}, grep {$self->{revISA}->{$_}} keys %{$self->{revISA}}); my @to = ($superFor->{uri}, grep {$superFor->{isa}->{$_}} keys %{$superFor->{isa}}); for my $from (@from) { for my $to (@to) { $self->{isa}->{$to} = true; $superFor->{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: subsetOfURI @@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 = $superURI eq $self->{uri} ? true : $self->{subOf}->{$superURI}; @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: DOMMain:any @@Get: @@@InCase: @@@@Type:ManakaiDISElement @@@@enDesc: This resource is referred by the element. @@@nullCase: This resource is not referred. @@@PerlDef: $r = $self->{}; @@Set: @@@InCase: @@@@Type:ManakaiDISElement @@@@enDesc: This resource is referred by this element. @@@PerlDef: $self->{} = $given if $given; @Attr: @@Name: definingModule @@Description: @@@lang:en @@@@: The module in which this resource is defined. @@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->; ##DISResourceDefinition ClsDef: @ClsQName: ManakaiDISPropertyAccessor @enDesc: Accessor methods for resource or module properties. @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}); $self->{$propName} = $r; $r = $default unless defined $r; } else { $r = $default; } @Method: @@Name: getPropertyResource @@enDesc: Gets property value resource. @@PropNameParam: @@Return: @@@Type: ManakaiDISResourceDefinition @@@enDesc: The property value resource. @@@nullCase: @@@@enDesc: No value has specified. @@@PerlDef: if (defined $self->{$propName}) { $r = $self->{db}-> ($self->{$propName}); } else { $r = null; } @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? \ } @@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 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: sourceNode @Description: @@lang:en @@@: The node in which an error has occurred. @Type: ManakaiDISNode 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 ExceptionDef: @ClsQName: ManakaiDISException @enDesc: Exceptions for the operations. @ClsISA: ManakaiDOM:ManakaiDOMException::ManakaiDOM:Perl @XConstGroupDef: @@ClsQName: ManakaiDISExceptionCode @@enDesc: Exception codes for . @@XConstDef: @@@Name: NAMESPACE_ERR @@@Value:14 @@@enDesc: An error related to namespaces has occurred. @@@XSubTypeDef: @@@@QName: UNDECLARED_NS_PREFIX_ERR @@@@enDesc: The implementation has encounted an undeclared namespace prefix. @@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. @@@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. @@@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. @@@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. ##DISException 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: @@@@: ::ForLatest @@@For: !=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 @@AliasFor: @@@For: !=ManakaiDOM:all @@@@: ::ManakaiDOM:all ElementTypeBinding: @Name: enMufDef @ElementType: dis:Def @ShadowContent: @@ContentType: lang:muf @@lang:en