jackrabbit-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ju...@apache.org
Subject svn commit: r1427110 [14/18] - in /jackrabbit/site/trunk/content/JCR: ./ a-simple-ocm-project-with-maven-eclipse.data/ concurrency-control.data/ deployment-models.data/ how-jackrabbit-works.data/ how-to-map-associations-between-objects.data/ index-read...
Date Mon, 31 Dec 2012 12:40:13 GMT
Added: jackrabbit/site/trunk/content/JCR/node-type-notation.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/trunk/content/JCR/node-type-notation.html?rev=1427110&view=auto
==============================================================================
--- jackrabbit/site/trunk/content/JCR/node-type-notation.html (added)
+++ jackrabbit/site/trunk/content/JCR/node-type-notation.html Mon Dec 31 12:40:09 2012
@@ -0,0 +1,714 @@
+
+<!-- 
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE- 2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License. 
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+  <HEAD>
+    <TITLE>Node Type Notation</TITLE>
+    <LINK type="text/css" rel="stylesheet" href="http://jackrabbit.apache.org/style/site.css">
+  <META http-equiv="Content-Type" content="text/html;charset=UTF-8"></HEAD>
+  <BODY>
+    <DIV id="page">
+      <DIV id="header">
+        <P id="jcr"><A href="http://jackrabbit.apache.org/"><IMG src="http://jackrabbit.apache.org/style/jlogo.gif" alt="Apache Jackrabbit" height="100" width="336"></A></P>
+        <P id="asf"><A href="http://www.apache.org/"><IMG src="http://jackrabbit.apache.org/style/asf-logo.gif" alt="Apache Software Foundation" height="100" width="387"></A></P>
+      </DIV>
+      <DIV id="body">
+        <DIV id="navigation">
+  <UL>
+	<LI>Apache Jackrabbit
+	<UL>
+		<LI><A href="welcome-to-apache-jackrabbit.html" title="Welcome to Apache Jackrabbit">Welcome</A></LI>
+		<LI><A href="downloads.html" title="Downloads">Downloads</A></LI>
+		<LI><A href="frequently-asked-questions.html" title="Frequently Asked Questions">FAQ</A></LI>
+		<LI><A href="http://wiki.apache.org/jackrabbit/FrontPage" class="external-link">Jackrabbit Wiki</A></LI>
+		<LI><A href="jackrabbit-history.html" title="Jackrabbit History">Jackrabbit History</A></LI>
+	</UL>
+	</LI>
+	<LI>Documentation
+	<UL>
+		<LI><A href="getting-started-with-apache-jackrabbit.html" title="Getting Started with Apache Jackrabbit">Getting Started</A></LI>
+		<LI><A href="standalone-server.html" title="Standalone Server">Standalone Server</A></LI>
+		<LI><A href="jackrabbit-components.html" title="Jackrabbit Components">Jackrabbit Components</A></LI>
+		<LI><A href="first-hops.html" title="First Hops">First Hops</A></LI>
+		<LI><A href="jcr-api.html" title="JCR & API">JCR &amp; API</A></LI>
+		<LI><A href="jackrabbit-architecture.html" title="Jackrabbit Architecture">Jackrabbit Architecture</A></LI>
+		<LI><A href="deployment-models.html" title="Deployment Models">Deployment Models</A></LI>
+		<LI><A href="jackrabbit-configuration.html" title="Jackrabbit Configuration">Jackrabbit Configuration</A></LI>
+		<LI><A href="node-types.html" title="Node Types">Node Types</A></LI>
+		<LI><A href="object-content-mapping.html" title="Object Content Mapping">Object Content Mapping</A></LI>
+	</UL>
+	</LI>
+	<LI>Development
+	<UL>
+		<LI><A href="jackrabbit-team.html" title="Jackrabbit Team">Jackrabbit Team</A></LI>
+		<LI><A href="jackrabbit-roadmap.html" title="Jackrabbit Roadmap">Jackrabbit Roadmap</A></LI>
+		<LI><A href="building-jackrabbit.html" title="Building Jackrabbit">Building Jackrabbit</A></LI>
+		<LI><A href="mailing-lists.html" title="Mailing Lists">Mailing Lists</A></LI>
+		<LI><A href="issue-tracker.html" title="Issue Tracker">Issue Tracker</A></LI>
+		<LI><A href="source-repository.html" title="Source Repository">Source Repository</A></LI>
+		<LI><A href="continuous-integration.html" title="Continuous Integration">Continuous Integration</A></LI>
+		<LI><A href="website.html" title="Website">Website</A></LI>
+		<LI><A href="creating-releases.html" title="Creating Releases">Creating Releases</A></LI>
+		<LI><A href="supporting-software-attribution.html" title="Supporting software attribution">Attribution</A></LI>
+	</UL>
+	</LI>
+	<LI>Apache Software Foundation
+	<UL>
+		<LI><A href="http://www.apache.org/foundation/how-it-works.html" class="external-link">Introduction</A></LI>
+		<LI><A href="http://www.apache.org/foundation/sponsorship.html" class="external-link">Sponsorship</A></LI>
+		<LI><A href="http://www.apache.org/foundation/thanks.html" class="external-link">Current Sponsors</A></LI>
+	</UL>
+	</LI>
+</UL>
+        </DIV>
+        <DIV id="content">
+          <H1>Node Type Notation</H1>
+  <P>The Compact Namespace and Node Type Definition (CND) notation provides a compact standardized syntax for defining node types and making namespace declarations. The notation is intended both for documentation and for programmatically registering node types (if you are unfamiliar with JCR node types, you may want to read the general Node Types section first).</P>
+
+<P>Here is a &quot;worst-case scenario&quot; example that demonstrates all the features of the notation:</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+/*  An example node type definition */
+
+<SPAN class="code-comment">// The namespace declaration
+</SPAN>&lt;ns = 'http:<SPAN class="code-comment">//namespace.com/ns'&gt;
+</SPAN>
+<SPAN class="code-comment">// Node type name
+</SPAN>[ns:NodeType]
+
+<SPAN class="code-comment">// Supertypes
+</SPAN>&gt; ns:ParentType1, ns:ParentType2
+
+<SPAN class="code-comment">// This node type supports orderable child nodes
+</SPAN>orderable
+
+<SPAN class="code-comment">// This is a mixin node type
+</SPAN>mixin
+
+<SPAN class="code-comment">// Nodes of <SPAN class="code-keyword">this</SPAN> node type have a property called 'ex:property' of type STRING
+</SPAN>- ex:property (string)
+
+<SPAN class="code-comment">// The <SPAN class="code-keyword">default</SPAN> values <SPAN class="code-keyword">for</SPAN> <SPAN class="code-keyword">this</SPAN>
+</SPAN><SPAN class="code-comment">// (multi-value) property are...
+</SPAN>= 'default1', 'default2'
+
+<SPAN class="code-comment">// This property is the primary item
+</SPAN>primary
+
+<SPAN class="code-comment">// and it is...
+</SPAN>mandatory autocreated <SPAN class="code-keyword">protected</SPAN>
+
+<SPAN class="code-comment">// and multi-valued
+</SPAN>multiple
+
+<SPAN class="code-comment">// It has an on-parent-version setting of ...
+</SPAN>version
+
+<SPAN class="code-comment">// The constraint settings are...
+</SPAN>&lt; 'constraint1', 'constraint2'
+
+<SPAN class="code-comment">// Nodes of <SPAN class="code-keyword">this</SPAN> node type have a child node called ns:node which must be of
+</SPAN><SPAN class="code-comment">// at least the node types ns:reqType1 and ns:reqType2
+</SPAN>+ ns:node (ns:reqType1, ns:reqType2)
+
+<SPAN class="code-comment">// and the <SPAN class="code-keyword">default</SPAN> primary node type of the child node is...
+</SPAN>= ns:defaultType
+
+<SPAN class="code-comment">// This child node is...
+</SPAN>mandatory autocreated <SPAN class="code-keyword">protected</SPAN>
+
+<SPAN class="code-comment">// and supports same name siblings
+</SPAN>multiple
+
+<SPAN class="code-comment">// and has an on-parent-version setting of ...
+</SPAN>version
+</PRE>
+</DIV></DIV>
+
+<P>This definition can be written more compactly and with indentation:</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+/*  An example node type definition */
+&lt;ns = 'http:<SPAN class="code-comment">//namespace.com/ns'&gt;
+</SPAN>[ns:NodeType] &gt; ns:ParentType1, ns:ParentType2
+  orderable mixin
+  - ex:property (string)
+  = 'default1', 'default2'
+    primary mandatory autocreated <SPAN class="code-keyword">protected</SPAN> multiple
+    version
+    &lt; 'constraint1', 'constraint2'
+  + ns:node (ns:reqType1, ns:reqType2)
+    = ns:defaultType
+    mandatory autocreated <SPAN class="code-keyword">protected</SPAN> multiple version
+</PRE>
+</DIV></DIV>
+
+<P>or, using short forms for the attributes, even like this:</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+&lt;ns='http:<SPAN class="code-comment">//namespace.com/ns'&gt;
+</SPAN>[ns:NodeType]&gt;ns:ParentType1, ns:ParentType2 o m
+-ex:property='default1','default2' ! m a p * version
+ &lt;'constraint1', 'constraint2'
++ns:node(ns:reqType1,ns:reqType2)=ns:defaultType
+ m a p *  version
+</PRE>
+</DIV></DIV>
+
+<H2><A name="NodeTypeNotation-Grammar"></A>Grammar</H2>
+
+<P>The following grammar defines the CND notation. Terminal symbols are in double quotes.</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+cnd ::= {ns_mapping | node_type_def}
+
+ns_mapping ::= <SPAN class="code-quote">&quot;&lt;&quot;</SPAN> prefix <SPAN class="code-quote">&quot;=&quot;</SPAN> uri <SPAN class="code-quote">&quot;&gt;&quot;</SPAN>
+
+prefix ::= string
+
+uri ::= string
+
+node_type_def ::= node_type_name [supertypes] [options]
+                  {property_def | child_node_def}
+
+node_type_name ::= <SPAN class="code-quote">&quot;[&quot;</SPAN> string <SPAN class="code-quote">&quot;]&quot;</SPAN>
+
+supertypes ::= <SPAN class="code-quote">&quot;&gt;&quot;</SPAN> string_list
+
+options ::= orderable_opt | mixin_opt | orderable_opt
+            mixin_opt | mixin_opt orderable_opt
+
+orderable_opt ::= <SPAN class="code-quote">&quot;orderable&quot;</SPAN> | <SPAN class="code-quote">&quot;ord&quot;</SPAN> | <SPAN class="code-quote">&quot;o&quot;</SPAN>
+
+mixin_opt ::= <SPAN class="code-quote">&quot;mixin&quot;</SPAN> | <SPAN class="code-quote">&quot;mix&quot;</SPAN> | <SPAN class="code-quote">&quot;m&quot;</SPAN>
+
+property_def ::= <SPAN class="code-quote">&quot;-&quot;</SPAN> property_name [property_type_decl]
+                 [default_values] [attributes]
+                 [value_constraints]
+
+property_name ::= string
+
+property_type_decl ::= <SPAN class="code-quote">&quot;(&quot;</SPAN> property_type <SPAN class="code-quote">&quot;)&quot;</SPAN>
+
+property_type ::= <SPAN class="code-quote">&quot;STRING&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">String</SPAN>&quot;</SPAN> |<SPAN class="code-quote">&quot;string&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;BINARY&quot;</SPAN> | <SPAN class="code-quote">&quot;Binary&quot;</SPAN> | <SPAN class="code-quote">&quot;binary&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;LONG&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">Long</SPAN>&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">long</SPAN>&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;DOUBLE&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">Double</SPAN>&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">double</SPAN>&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;BOOLEAN&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">Boolean</SPAN>&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">boolean</SPAN>&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;DATE&quot;</SPAN> | <SPAN class="code-quote">&quot;Date&quot;</SPAN> | <SPAN class="code-quote">&quot;date&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;NAME | &quot;</SPAN>Name | <SPAN class="code-quote">&quot;name&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;PATH&quot;</SPAN> | <SPAN class="code-quote">&quot;Path&quot;</SPAN> | <SPAN class="code-quote">&quot;path&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;REFERENCE&quot;</SPAN> | <SPAN class="code-quote">&quot;Reference&quot;</SPAN> |
+                     <SPAN class="code-quote">&quot;reference&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;UNDEFINED&quot;</SPAN> | <SPAN class="code-quote">&quot;Undefined&quot;</SPAN> |
+                     <SPAN class="code-quote">&quot;undefined&quot;</SPAN> | <SPAN class="code-quote">&quot;*&quot;</SPAN>
+
+default_values ::= <SPAN class="code-quote">&quot;=&quot;</SPAN> string_list
+
+value_constraints ::= <SPAN class="code-quote">&quot;&lt;&quot;</SPAN> string_list
+
+node_def ::= <SPAN class="code-quote">&quot;+&quot;</SPAN> node_name [required_types]
+             [default_type] [attributes]
+
+node_name ::= string
+
+required_types ::= <SPAN class="code-quote">&quot;(&quot;</SPAN> string_list <SPAN class="code-quote">&quot;)&quot;</SPAN>
+
+default_type ::= <SPAN class="code-quote">&quot;=&quot;</SPAN> string
+
+attributes ::= <SPAN class="code-quote">&quot;primary&quot;</SPAN> | <SPAN class="code-quote">&quot;pri&quot;</SPAN> | <SPAN class="code-quote">&quot;!&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;autocreated&quot;</SPAN> | <SPAN class="code-quote">&quot;aut&quot;</SPAN> | <SPAN class="code-quote">&quot;a&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;mandatory&quot;</SPAN> | <SPAN class="code-quote">&quot;man&quot;</SPAN> | <SPAN class="code-quote">&quot;m&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;<SPAN class="code-keyword">protected</SPAN>&quot;</SPAN> | <SPAN class="code-quote">&quot;pro&quot;</SPAN> | <SPAN class="code-quote">&quot;p&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;multiple&quot;</SPAN> | <SPAN class="code-quote">&quot;mul&quot;</SPAN> | <SPAN class="code-quote">&quot;*&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;COPY&quot;</SPAN> | <SPAN class="code-quote">&quot;Copy&quot;</SPAN> | <SPAN class="code-quote">&quot;copy&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;VERSION&quot;</SPAN> | <SPAN class="code-quote">&quot;Version&quot;</SPAN> | <SPAN class="code-quote">&quot;version&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;INITIALIZE&quot;</SPAN> | <SPAN class="code-quote">&quot;Initialize&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;initialize&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;COMPUTE&quot;</SPAN> | <SPAN class="code-quote">&quot;Compute&quot;</SPAN> | <SPAN class="code-quote">&quot;compute&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;IGNORE&quot;</SPAN> | <SPAN class="code-quote">&quot;Ignore&quot;</SPAN> | <SPAN class="code-quote">&quot;ignore&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;ABORT&quot;</SPAN> | <SPAN class="code-quote">&quot;Abort&quot;</SPAN> | <SPAN class="code-quote">&quot;abort&quot;</SPAN>
+
+string_list ::= string {<SPAN class="code-quote">&quot;,&quot;</SPAN> string}
+
+string ::= quoted_string | unquoted_string
+
+quoted_string :: = <SPAN class="code-quote">&quot;'&quot;</SPAN> unquoted_string <SPAN class="code-quote">&quot;'&quot;</SPAN>
+
+unquoted_string ::= [A-Za-z0-9:_]+
+</PRE>
+</DIV></DIV>
+
+<H2><A name="NodeTypeNotation-CNDNotationinDetail"></A>CND Notation in Detail</H2>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+cnd ::= {ns_mapping | node_type_def}
+</PRE>
+</DIV></DIV>
+
+<P>A CND consists of zero or more blocks, each of which is either namespace declaration or a node type definition. Namespace prefixes referenced in a node type definition block must be declared in a preceding namespace declaration block.</P>
+
+<H3><A name="NodeTypeNotation-NamespaceDeclaration"></A>Namespace Declaration</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+ns_mapping ::= <SPAN class="code-quote">&quot;&lt;&quot;</SPAN> prefix <SPAN class="code-quote">&quot;=&quot;</SPAN> uri <SPAN class="code-quote">&quot;&gt;&quot;</SPAN>
+
+prefix ::= string
+
+uri ::= string
+</PRE>
+</DIV></DIV>
+
+<P>A namespace declaration consists of prefix/URI pair. The prefix must be a valid JCR namespace prefix, which is the same as a valid XML namespace prefix. The URI can in fact be any string. Just as in XML, it need not actually be a URI, though adhering to that convention is recommended.</P>
+
+<H3><A name="NodeTypeNotation-NodeTypeDefinition"></A>Node Type Definition</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+node_type_def ::= node_type_name [super_types] [options]
+                  {property_def | child_node_def}
+</PRE>
+</DIV></DIV>
+
+<P>A node type definition consists of a node type name followed by an optional supertypes block, an optional options block and zero or more blocks, each either a property or node definition.</P>
+
+<H3><A name="NodeTypeNotation-NodeTypeName"></A>Node Type Name</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+node_type_name ::= <SPAN class="code-quote">&quot;[&quot;</SPAN> string <SPAN class="code-quote">&quot;]&quot;</SPAN>
+</PRE>
+</DIV></DIV>
+
+<P>The node type name is delimited by square brackets and must be a valid JCR name. It may be single-quoted (see Quoting, below). This element is the only strictly required element within a node type definition, though a definition consisting only of a node type name would simply define a new node type identical to nt:base.</P>
+
+<H3><A name="NodeTypeNotation-Supertypes"></A>Supertypes</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+supertypes ::= <SPAN class="code-quote">&quot;&gt;&quot;</SPAN> string_list
+</PRE>
+</DIV></DIV>
+
+<P>After the node type name comes the optional list of supertypes. If this element is not present and the node type is not a mixin (see ?1.3.5 Options), then a supertype of nt:base is assumed. If present, the element consists of a greater-than sign followed by a comma delimited list of node type names, each of which may optionally be single-quoted (see Quoting below). In Jackrabbit, multiple inheritance of node types is supported, so this list can be greater than one item in length.</P>
+
+<H3><A name="NodeTypeNotation-Options"></A>Options</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+options ::= orderable_opt | mixin_opt | orderable_opt
+            mixin_opt | mixin_opt orderable_opt
+
+orderable_opt ::= <SPAN class="code-quote">&quot;orderable&quot;</SPAN> | <SPAN class="code-quote">&quot;ord&quot;</SPAN> | <SPAN class="code-quote">&quot;o&quot;</SPAN>
+
+mixin_opt ::= <SPAN class="code-quote">&quot;mixin&quot;</SPAN> | <SPAN class="code-quote">&quot;mix&quot;</SPAN> | <SPAN class="code-quote">&quot;m&quot;</SPAN>
+</PRE>
+</DIV></DIV>
+
+<P>The option indicators follow the node type name and optional supertype list.</P>
+
+<P>If the keyword orderable (or a short form) is present, then the orderable child node setting of the node type is true. If the keyword is missing, then the setting is false.</P>
+
+<P>If the keyword mixin (or a short form) is present, then this is a mixin node type. If the keyword is missing, then this is a primary node type.</P>
+
+<H3><A name="NodeTypeNotation-PropertyDefinition"></A>Property Definition</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+property_def ::= <SPAN class="code-quote">&quot;-&quot;</SPAN> property_name [property_type_decl]
+                 [default_values] [attributes]
+                 [value_constraints]
+</PRE>
+</DIV></DIV>
+
+<P>A property definition consists of a minus sign followed by a property name, followed in turn by optional elements defining the property type, the default values, the property attributes and the value constraints.</P>
+
+<H3><A name="NodeTypeNotation-PropertyName"></A>Property Name</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+property_name ::= string
+</PRE>
+</DIV></DIV>
+
+<P>The property name must be a valid JCR name or *, to indicate a residual property definition. It may be single-quoted.</P>
+
+<H3><A name="NodeTypeNotation-PropertyType"></A>Property Type</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+property_type_decl ::= <SPAN class="code-quote">&quot;(&quot;</SPAN> property_type <SPAN class="code-quote">&quot;)&quot;</SPAN>
+
+property_type ::= <SPAN class="code-quote">&quot;STRING&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">String</SPAN> |&quot;</SPAN>string&quot; |
+                  <SPAN class="code-quote">&quot;BINARY&quot;</SPAN> | <SPAN class="code-quote">&quot;Binary&quot;</SPAN> | <SPAN class="code-quote">&quot;binary&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;LONG&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">Long</SPAN>&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">long</SPAN>&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;DOUBLE&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">Double</SPAN>&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">double</SPAN>&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;BOOLEAN&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">Boolean</SPAN>&quot;</SPAN> | <SPAN class="code-quote">&quot;<SPAN class="code-object">boolean</SPAN>&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;DATE&quot;</SPAN> | <SPAN class="code-quote">&quot;Date&quot;</SPAN> | <SPAN class="code-quote">&quot;date&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;NAME | &quot;</SPAN>Name | <SPAN class="code-quote">&quot;name&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;PATH&quot;</SPAN> | <SPAN class="code-quote">&quot;Path&quot;</SPAN> | <SPAN class="code-quote">&quot;path&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;REFERENCE&quot;</SPAN> | <SPAN class="code-quote">&quot;Reference&quot;</SPAN> | <SPAN class="code-quote">&quot;reference&quot;</SPAN> |
+                  <SPAN class="code-quote">&quot;UNDEFINED&quot;</SPAN> | <SPAN class="code-quote">&quot;Undefined&quot;</SPAN> | <SPAN class="code-quote">&quot;undefined&quot;</SPAN> | <SPAN class="code-quote">&quot;*&quot;</SPAN>
+</PRE>
+</DIV></DIV>
+
+<P>The property type is indicated by a keyword delimited by parentheses. If the property type declaration is missing a type of STRING is assumed.</P>
+
+<H3><A name="NodeTypeNotation-DefaultValues"></A>Default Values</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+default_values ::= <SPAN class="code-quote">&quot;=&quot;</SPAN> string_list
+</PRE>
+</DIV></DIV>
+
+<P>The default value or values, in the case of a multi-value property, are indicated by an equal sign followed by either a single value in string form or a comma-delimited list of values. The values may be single-quoted. If the default value definition is missing then no default value is set.</P>
+
+<H3><A name="NodeTypeNotation-Attributes"></A>Attributes</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+attributes ::= <SPAN class="code-quote">&quot;primary&quot;</SPAN> | <SPAN class="code-quote">&quot;pri&quot;</SPAN> | <SPAN class="code-quote">&quot;!&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;autocreated&quot;</SPAN> | <SPAN class="code-quote">&quot;aut&quot;</SPAN> | <SPAN class="code-quote">&quot;a&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;mandatory&quot;</SPAN> | <SPAN class="code-quote">&quot;man&quot;</SPAN> | <SPAN class="code-quote">&quot;m&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;<SPAN class="code-keyword">protected</SPAN>&quot;</SPAN> | <SPAN class="code-quote">&quot;pro&quot;</SPAN> | <SPAN class="code-quote">&quot;p&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;multiple&quot;</SPAN> | <SPAN class="code-quote">&quot;mul&quot;</SPAN> | <SPAN class="code-quote">&quot;*&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;COPY&quot;</SPAN> | <SPAN class="code-quote">&quot;Copy&quot;</SPAN> | <SPAN class="code-quote">&quot;copy&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;VERSION&quot;</SPAN> | <SPAN class="code-quote">&quot;Version&quot;</SPAN> | <SPAN class="code-quote">&quot;version&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;INITIALIZE&quot;</SPAN> | <SPAN class="code-quote">&quot;Initialize&quot;</SPAN> | <SPAN class="code-quote">&quot;initialize&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;COMPUTE&quot;</SPAN> | <SPAN class="code-quote">&quot;Compute&quot;</SPAN> | <SPAN class="code-quote">&quot;compute&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;IGNORE&quot;</SPAN> | <SPAN class="code-quote">&quot;Ignore&quot;</SPAN> | <SPAN class="code-quote">&quot;ignore&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;ABORT&quot;</SPAN> | <SPAN class="code-quote">&quot;Abort&quot;</SPAN> | <SPAN class="code-quote">&quot;abort&quot;</SPAN>
+</PRE>
+</DIV></DIV>
+
+<P>The attribute indicators describe the characteristics of the property. The presence of an attribute keyword indicates that the corresponding characteristic applies to this property. It's absence indicates that the corresponding characteristic does not apply.</P>
+
+<P>The primary keyword indicates that this property is the primary item. It may appear on a maximum of one property or child node definition within a node type definition.</P>
+
+<P>The multiple keyword indicates that this property is multi-valued.</P>
+
+<P>A maximum of one on-version indicator may be present. If none is present then an on-version setting of COPY is assumed.</P>
+
+<H3><A name="NodeTypeNotation-ValueConstraints"></A>Value Constraints</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+value_constraints ::= <SPAN class="code-quote">&quot;&lt;&quot;</SPAN> string_list
+</PRE>
+</DIV></DIV>
+
+<P>Value constraint are specified by a less-than sign followed by a comma-delimited list of constraint strings, each optionally single-quoted.</P>
+
+<H3><A name="NodeTypeNotation-ChildNodeDefinition"></A>Child Node Definition</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+child_node_def ::= <SPAN class="code-quote">&quot;+&quot;</SPAN> node_name [required_types]
+             [default_type] [attributes]
+</PRE>
+</DIV></DIV>
+
+<P>A child node definition consists of a plus sign followed by a property name, followed in turn by optional elements defining the required primary node types, the default node type, and the node attributes.</P>
+
+<H3><A name="NodeTypeNotation-NodeName"></A>Node Name</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+node_name ::= string
+</PRE>
+</DIV></DIV>
+
+<P>The node name must be a valid JCR name or *, to indicate a residual child node definition. It may be single-quoted.</P>
+
+<H3><A name="NodeTypeNotation-RequiredPrimaryNodeTypes"></A>Required Primary Node Types</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+required_types ::= <SPAN class="code-quote">&quot;(&quot;</SPAN> string_list <SPAN class="code-quote">&quot;)&quot;</SPAN>
+</PRE>
+</DIV></DIV>
+
+<P>The required node types of the child node are indicated by a comma-delimited list of node types, within parentheses. If this element is missing then a required primary node type of nt:base is assumed. This is the least restrictive setting possible.</P>
+
+<H3><A name="NodeTypeNotation-DefaultPrimaryNodeType"></A>Default Primary Node Type</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+default_type ::= <SPAN class="code-quote">&quot;=&quot;</SPAN> string
+</PRE>
+</DIV></DIV>
+
+<P>The default primary node type is indicated by an equals-sign followed by a node type name, which may be single-quoted. If this element is missing then no default primary node type is set.</P>
+
+<H3><A name="NodeTypeNotation-Attributes"></A>Attributes</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+attributes ::= <SPAN class="code-quote">&quot;primary&quot;</SPAN> | <SPAN class="code-quote">&quot;pri&quot;</SPAN> | <SPAN class="code-quote">&quot;!&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;autocreated&quot;</SPAN> | <SPAN class="code-quote">&quot;aut&quot;</SPAN> | <SPAN class="code-quote">&quot;a&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;mandatory&quot;</SPAN> | <SPAN class="code-quote">&quot;man&quot;</SPAN> | <SPAN class="code-quote">&quot;m&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;<SPAN class="code-keyword">protected</SPAN>&quot;</SPAN> | <SPAN class="code-quote">&quot;pro&quot;</SPAN> | <SPAN class="code-quote">&quot;p&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;multiple&quot;</SPAN> | <SPAN class="code-quote">&quot;mul&quot;</SPAN> | <SPAN class="code-quote">&quot;*&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;COPY&quot;</SPAN> | <SPAN class="code-quote">&quot;Copy&quot;</SPAN> | <SPAN class="code-quote">&quot;copy&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;VERSION&quot;</SPAN> | <SPAN class="code-quote">&quot;Version&quot;</SPAN> | <SPAN class="code-quote">&quot;version&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;INITIALIZE&quot;</SPAN> | <SPAN class="code-quote">&quot;Initialize&quot;</SPAN> | <SPAN class="code-quote">&quot;initialize&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;COMPUTE&quot;</SPAN> | <SPAN class="code-quote">&quot;Compute&quot;</SPAN> | <SPAN class="code-quote">&quot;compute&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;IGNORE&quot;</SPAN> | <SPAN class="code-quote">&quot;Ignore&quot;</SPAN> | <SPAN class="code-quote">&quot;ignore&quot;</SPAN> |
+               <SPAN class="code-quote">&quot;ABORT&quot;</SPAN> | <SPAN class="code-quote">&quot;Abort&quot;</SPAN> | <SPAN class="code-quote">&quot;abort&quot;</SPAN>
+</PRE>
+</DIV></DIV>
+
+<P>The attribute indicators describe the characteristics of the child node. The presence of an attribute keyword indicates that the corresponding characteristic applies to this child node. It's absence indicates that the corresponding characteristic does not apply.</P>
+
+<P>The primary keyword indicates that this child node is the primary item. It may appear on a maximum of one property or child node definition within a node type definition.</P>
+
+<P>The multiple keyword indicates that this child node may have same-name siblings.</P>
+
+<P>A maximum of one on-version indicator may be present. If none is present then an on-version setting of COPY is assumed.</P>
+
+<H3><A name="NodeTypeNotation-Quoting"></A>Quoting</H3>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+string_list ::= string {<SPAN class="code-quote">&quot;,&quot;</SPAN> string}
+
+string ::= quoted_string | unquoted_string
+
+quoted_string :: = <SPAN class="code-quote">&quot;'&quot;</SPAN> unquoted_string <SPAN class="code-quote">&quot;'&quot;</SPAN>
+
+unquoted_string ::= /* a string */
+</PRE>
+</DIV></DIV>
+
+<P>Single quotes (') are used to allow for strings (i.e., names, prefixes, URIs, values or constraint strings) with characters that would otherwise be interpreted as delimiters.</P>
+
+<H3><A name="NodeTypeNotation-Escaping"></A>Escaping</H3>
+
+<P>The standard Java escape sequences are also supported:</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+\n newline
+\t tab
+\b backspace
+\f form feed
+\r <SPAN class="code-keyword">return</SPAN>
+\&quot; <SPAN class="code-object">double</SPAN> quote
+\' single quote
+\\ back slash
+\uHHHH Unicode character in hexadecimal
+</PRE>
+</DIV></DIV>
+
+<H3><A name="NodeTypeNotation-Comments"></A>Comments</H3>
+
+<P>Comment can also be included in the notation using either of the standard Java forms:</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+<SPAN class="code-comment">// A comment
+</SPAN>
+/* Another comment */
+</PRE>
+</DIV></DIV>
+
+<H3><A name="NodeTypeNotation-WhitespaceandShortForms"></A>Whitespace and Short Forms</H3>
+
+<P>The notation can be compacted by taking advantage of the following the fact that spacing around keychars ([ ] &gt; , - ( ) = &lt;), newlines and indentation are not required. So, the following is also well-formed:</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+[x]&gt;y,z orderable mixin -p(date)=a,b primary mandatory autocreated <SPAN class="code-keyword">protected</SPAN> multiple version &lt;c,d
+</PRE>
+</DIV></DIV>
+
+<P>Additionally, though spaces are required around the keywords (orderable, mixin, date, mandatory, etc.), short forms for keywords can be used. So, this:</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+[x]&gt;y,z o m-p(date)=a,b ! m a p * version &lt;c,d
+</PRE>
+</DIV></DIV>
+
+<P>is well-formed (but perhaps not recommended!).</P>
+
+<H3><A name="NodeTypeNotation-WhythisWeirdNotation%3F"></A>Why this Weird Notation?</H3>
+
+<P>Here's why:</P>
+
+<P>Old Documentation Notation</P>
+
+<P>Here is the definition of the built-in node type nt:resource using the old documentation notation (used in v1.0 of the JCR specification, for example):</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+NodeTypeName
+  nt:resource
+Supertypes
+  nt:base
+  mix:referenceable
+IsMixin
+  <SPAN class="code-keyword">false</SPAN>
+HasOrderableChildNodes
+  <SPAN class="code-keyword">false</SPAN>
+PrimaryItemName
+  jcr:data
+PropertyDefinition
+  Name jcr:encoding
+  RequiredType STRING
+  ValueConstraints []
+  DefaultValues <SPAN class="code-keyword">null</SPAN>
+  AutoCreated <SPAN class="code-keyword">false</SPAN>
+  Mandatory <SPAN class="code-keyword">false</SPAN>
+  OnParentVersion COPY
+  Protected <SPAN class="code-keyword">false</SPAN>
+  Multiple <SPAN class="code-keyword">false</SPAN>
+PropertyDefinition
+  Name jcr:mimeType
+  RequiredType STRING
+  ValueConstraints []
+  DefaultValues <SPAN class="code-keyword">null</SPAN>
+  AutoCreated <SPAN class="code-keyword">false</SPAN>
+  Mandatory <SPAN class="code-keyword">true</SPAN>
+  OnParentVersion COPY
+  Protected <SPAN class="code-keyword">false</SPAN>
+  Multiple <SPAN class="code-keyword">false</SPAN>
+PropertyDefinition
+  Name jcr:data
+  RequiredType BINARY
+  ValueConstraints []
+  DefaultValues <SPAN class="code-keyword">null</SPAN>
+  AutoCreated <SPAN class="code-keyword">false</SPAN>
+  Mandatory <SPAN class="code-keyword">true</SPAN>
+  OnParentVersion COPY
+  Protected <SPAN class="code-keyword">false</SPAN>
+  Multiple <SPAN class="code-keyword">false</SPAN>
+PropertyDefinition
+  Name jcr:lastModified
+  RequiredType DATE
+  ValueConstraints []
+  DefaultValues <SPAN class="code-keyword">null</SPAN>
+  AutoCreated <SPAN class="code-keyword">false</SPAN>
+  Mandatory <SPAN class="code-keyword">true</SPAN>
+  OnParentVersion IGNORE
+  Protected <SPAN class="code-keyword">false</SPAN>
+  Multiple <SPAN class="code-keyword">false</SPAN>
+</PRE>
+</DIV></DIV>
+
+<P>Old Configuration Notation</P>
+
+<P>Here is the same node type in the standard XML notation (used in configuration files in the Jackrabbit project, for example):</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+&lt;nodeType name=<SPAN class="code-quote">&quot;nt:resource&quot;</SPAN>
+          isMixin=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>
+          hasOrderableChildNodes=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>
+          primaryItemName=<SPAN class="code-quote">&quot;jcr:data&quot;</SPAN>&gt;
+    &lt;supertypes&gt;
+        &lt;supertype&gt;nt:base&lt;/supertype&gt;
+        &lt;supertype&gt;mix:referenceable&lt;/supertype&gt;
+    &lt;/supertypes&gt;
+    &lt;propertyDefinition name=<SPAN class="code-quote">&quot;jcr:encoding&quot;</SPAN>
+                        requiredType=<SPAN class="code-quote">&quot;<SPAN class="code-object">String</SPAN>&quot;</SPAN>
+                        autoCreated=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>
+                        mandatory=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>
+                        onParentVersion=<SPAN class="code-quote">&quot;COPY&quot;</SPAN>
+                        <SPAN class="code-keyword">protected</SPAN>=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>
+                        multiple=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>/&gt;
+    &lt;propertyDefinition name=<SPAN class="code-quote">&quot;jcr:mimeType&quot;</SPAN>
+                        requiredType=<SPAN class="code-quote">&quot;<SPAN class="code-object">String</SPAN>&quot;</SPAN>
+                        autoCreated=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>
+                        mandatory=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">true</SPAN>&quot;</SPAN>
+                        onParentVersion=<SPAN class="code-quote">&quot;COPY&quot;</SPAN>
+                        <SPAN class="code-keyword">protected</SPAN>=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>
+                        multiple=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>/&gt;
+    &lt;propertyDefinition name=<SPAN class="code-quote">&quot;jcr:data&quot;</SPAN>
+                        requiredType=<SPAN class="code-quote">&quot;Binary&quot;</SPAN>
+                        autoCreated=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>
+                        mandatory=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">true</SPAN>&quot;</SPAN>
+                        onParentVersion=<SPAN class="code-quote">&quot;COPY&quot;</SPAN>
+                        <SPAN class="code-keyword">protected</SPAN>=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>
+                        multiple=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>/&gt;
+    &lt;propertyDefinition name=<SPAN class="code-quote">&quot;jcr:lastModified&quot;</SPAN>
+                        requiredType=<SPAN class="code-quote">&quot;Date&quot;</SPAN>
+                        autoCreated=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>
+                        mandatory=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">true</SPAN>&quot;</SPAN>
+                        onParentVersion=<SPAN class="code-quote">&quot;IGNORE&quot;</SPAN>
+                        <SPAN class="code-keyword">protected</SPAN>=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>
+                        multiple=<SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>/&gt;
+&lt;/nodeType&gt;
+</PRE>
+</DIV></DIV>
+
+<P>New Format</P>
+
+<P>And, here it is in the new CND notation:</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+[nt:resource] &gt; mix:referenceable
+- jcr:encoding
+- jcr:mimeType mandatory
+- jcr:data (binary) mandatory
+- jcr:lastModified (date) mandatory ignore
+</PRE>
+</DIV></DIV>
+
+<P>Case closed.</P>
+
+<H2><A name="NodeTypeNotation-Syntaxhightlightingfortexteditors"></A>Syntax hightlighting for text editors</H2>
+
+<P>Here is a TextMate bundle for CND syntax highlighting: <A href="node-type-notation.data/CND.zip">CND.zip</A></P>
+        </DIV>
+        <DIV id="end"></DIV>
+      </DIV>
+      <DIV id="footer">
+        <P>
+          &copy; 2004-2010 The Apache Software Foundation.
+          - <A href="http://jackrabbit.apache.org/privacy-policy.html">Privacy Policy</A> -
+          [<A href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=75305">edit this page</A>]
+          <BR>
+          Apache Jackrabbit, Jackrabbit, Apache, the Apache feather logo, and the Apache
+          Jackrabbit project logo are trademarks of The Apache Software Foundation.
+        </P>
+      </DIV>
+    </DIV>
+<!-- JCR- 1315: Add Google Analytics to Jackrabbit web site -->
+<SCRIPT type="text/javascript">
+var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</SCRIPT>
+<SCRIPT type="text/javascript">
+var pageTracker = _gat._getTracker("UA-837900-2");
+pageTracker._initData();
+pageTracker._trackPageview();
+</SCRIPT>
+  </BODY>
+</HTML>

Added: jackrabbit/site/trunk/content/JCR/node-type-visualization.data/jackrabbit-nodetypes.png
URL: http://svn.apache.org/viewvc/jackrabbit/site/trunk/content/JCR/node-type-visualization.data/jackrabbit-nodetypes.png?rev=1427110&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jackrabbit/site/trunk/content/JCR/node-type-visualization.data/jackrabbit-nodetypes.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: jackrabbit/site/trunk/content/JCR/node-type-visualization.data/jackrabbit-nodetypes.png.jpeg
URL: http://svn.apache.org/viewvc/jackrabbit/site/trunk/content/JCR/node-type-visualization.data/jackrabbit-nodetypes.png.jpeg?rev=1427110&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jackrabbit/site/trunk/content/JCR/node-type-visualization.data/jackrabbit-nodetypes.png.jpeg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: jackrabbit/site/trunk/content/JCR/node-type-visualization.data/jackrabbit-nodetypes.svg
URL: http://svn.apache.org/viewvc/jackrabbit/site/trunk/content/JCR/node-type-visualization.data/jackrabbit-nodetypes.svg?rev=1427110&view=auto
==============================================================================
--- jackrabbit/site/trunk/content/JCR/node-type-visualization.data/jackrabbit-nodetypes.svg (added)
+++ jackrabbit/site/trunk/content/JCR/node-type-visualization.data/jackrabbit-nodetypes.svg Mon Dec 31 12:40:09 2012
@@ -0,0 +1,622 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ATTLIST svg xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
+]>
+<!-- Generated by dot version 2.8 (Fri Feb  3 22:38:53 UTC 2006)
+     For user: John Doe -->
+<!-- Title: _anonymous_0 Pages: 1 -->
+<svg width="626pt" height="1129pt"
+ viewBox = "0 0 626 1129"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" style="font-family:Times-Roman;font-size:14.00;">
+<title>_anonymous_0</title>
+<polygon style="fill:white;stroke:white;" points="-2,1131 -2,-2 628,-2 628,1131 -2,1131"/>
+<!-- rep:versionStorage -->
+<g id="node1" class="node"><title>rep:versionStorage</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="384" rx="66" ry="18"/>
+<text text-anchor="middle" x="244" y="389">rep:versionStorage</text>
+</g>
+<!-- d0e22 -->
+<g id="node4" class="node"><title>d0e22</title>
+<polygon style="fill:khaki;stroke:black;" points="460,366 406,366 406,402 460,402 460,366"/>
+<text text-anchor="middle" x="433" y="389">*</text>
+</g>
+<!-- rep:versionStorage&#45;&gt;d0e22 -->
+<g id="edge4" class="edge"><title>rep:versionStorage&#45;&gt;d0e22</title>
+<a xlink:title="is child node of">
+<path style="fill:none;stroke:black;stroke-dasharray:1,5;" d="M316,390C348,391 383,391 406,389"/>
+<polygon style="fill:black;stroke:black;" points="316,393 306,390 316,386 316,393"/>
+</a>
+</g>
+<!-- rep:versionStorage&#45;&gt;d0e22 -->
+<g id="edge6" class="edge"><title>rep:versionStorage&#45;&gt;d0e22</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M316,378C348,377 383,377 406,379"/>
+<polygon style="fill:black;stroke:black;" points="316,381 306,378 316,374 316,381"/>
+</a>
+</g>
+<!-- d0e48 -->
+<g id="node7" class="node"><title>d0e48</title>
+<polygon style="fill:khaki;stroke:black;" points="460,258 406,258 406,294 460,294 460,258"/>
+<text text-anchor="middle" x="433" y="281">*</text>
+</g>
+<!-- rep:versionStorage&#45;&gt;d0e48 -->
+<g id="edge8" class="edge"><title>rep:versionStorage&#45;&gt;d0e48</title>
+<a xlink:title="is child node of">
+<path style="fill:none;stroke:black;stroke-dasharray:1,5;" d="M272,361C294,343 327,319 358,303 373,295 391,288 406,284"/>
+<polygon style="fill:black;stroke:black;" points="274,364 264,367 270,358 274,364"/>
+</a>
+</g>
+<!-- d0e2255 -->
+<g id="node90" class="node"><title>d0e2255</title>
+<polygon style="fill:khaki;stroke:black;" points="492,604 374,604 374,640 492,640 492,604"/>
+<text text-anchor="middle" x="433" y="627">jcr:versionStorage</text>
+</g>
+<!-- rep:versionStorage&#45;&gt;d0e2255 -->
+<g id="edge110" class="edge"><title>rep:versionStorage&#45;&gt;d0e2255</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M264,410C281,433 305,466 322,499 343,539 326,562 358,595 363,599 368,603 373,606"/>
+<polygon style="fill:black;stroke:black;" points="261,412 258,402 267,408 261,412"/>
+</a>
+</g>
+<!-- nt:base -->
+<g id="node2" class="node"><title>nt:base</title>
+<ellipse style="fill:gold;stroke:black;" cx="67" cy="580" rx="33" ry="18"/>
+<text text-anchor="middle" x="67" y="585">nt:base</text>
+</g>
+<!-- nt:base&#45;&gt;rep:versionStorage -->
+<g id="edge2" class="edge"><title>nt:base&#45;&gt;rep:versionStorage</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M77,553C92,517 122,453 166,416 175,408 187,402 198,397"/>
+<polygon style="fill:black;stroke:black;" points="80,554 73,562 74,551 80,554"/>
+</a>
+</g>
+<!-- nt:versionHistory -->
+<g id="node9" class="node"><title>nt:versionHistory</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="184" rx="61" ry="18"/>
+<text text-anchor="middle" x="244" y="189">nt:versionHistory</text>
+</g>
+<!-- nt:base&#45;&gt;nt:versionHistory -->
+<g id="edge34" class="edge"><title>nt:base&#45;&gt;nt:versionHistory</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M72,552C83,475 119,262 166,211 174,203 183,198 193,194"/>
+<polygon style="fill:black;stroke:black;" points="75,553 70,562 69,552 75,553"/>
+</a>
+</g>
+<!-- nt:versionedChild -->
+<g id="node12" class="node"><title>nt:versionedChild</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="672" rx="63" ry="18"/>
+<text text-anchor="middle" x="244" y="677">nt:versionedChild</text>
+</g>
+<!-- nt:base&#45;&gt;nt:versionedChild -->
+<g id="edge12" class="edge"><title>nt:base&#45;&gt;nt:versionedChild</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M97,599C117,612 143,628 166,640 179,646 193,652 206,657"/>
+<polygon style="fill:black;stroke:black;" points="96,602 89,594 99,596 96,602"/>
+</a>
+</g>
+<!-- nt:versionLabels -->
+<g id="node14" class="node"><title>nt:versionLabels</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="292" rx="59" ry="18"/>
+<text text-anchor="middle" x="244" y="297">nt:versionLabels</text>
+</g>
+<!-- nt:base&#45;&gt;nt:versionLabels -->
+<g id="edge14" class="edge"><title>nt:base&#45;&gt;nt:versionLabels</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M70,552C78,500 103,389 166,324 175,315 187,308 198,304"/>
+<polygon style="fill:black;stroke:black;" points="73,552 69,562 67,552 73,552"/>
+</a>
+</g>
+<!-- nt:childNodeDefinition -->
+<g id="node16" class="node"><title>nt:childNodeDefinition</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="984" rx="77" ry="18"/>
+<text text-anchor="middle" x="244" y="989">nt:childNodeDefinition</text>
+</g>
+<!-- nt:base&#45;&gt;nt:childNodeDefinition -->
+<g id="edge16" class="edge"><title>nt:base&#45;&gt;nt:childNodeDefinition</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M71,608C82,687 118,904 166,957 172,963 180,968 188,972"/>
+<polygon style="fill:black;stroke:black;" points="68,608 70,598 74,608 68,608"/>
+</a>
+</g>
+<!-- nt:hierarchyNode -->
+<g id="node20" class="node"><title>nt:hierarchyNode</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="526" rx="62" ry="18"/>
+<text text-anchor="middle" x="244" y="531">nt:hierarchyNode</text>
+</g>
+<!-- nt:base&#45;&gt;nt:hierarchyNode -->
+<g id="edge20" class="edge"><title>nt:base&#45;&gt;nt:hierarchyNode</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M106,568C134,559 172,548 201,539"/>
+<polygon style="fill:black;stroke:black;" points="107,571 96,571 105,565 107,571"/>
+</a>
+</g>
+<!-- d0e693 -->
+<g id="node24" class="node"><title>d0e693</title>
+<polygon style="fill:khaki;stroke:black;" points="621,435 545,435 545,471 621,471 621,435"/>
+<text text-anchor="middle" x="583" y="458">jcr:content</text>
+</g>
+<!-- nt:base&#45;&gt;d0e693 -->
+<g id="edge26" class="edge"><title>nt:base&#45;&gt;d0e693</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M89,557C109,538 137,513 166,499 293,434 468,441 544,449"/>
+<polygon style="fill:black;stroke:black;" points="92,559 82,564 87,554 92,559"/>
+</a>
+</g>
+<!-- nt:resource -->
+<g id="node27" class="node"><title>nt:resource</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="76" rx="44" ry="18"/>
+<text text-anchor="middle" x="244" y="81">nt:resource</text>
+</g>
+<!-- nt:base&#45;&gt;nt:resource -->
+<g id="edge30" class="edge"><title>nt:base&#45;&gt;nt:resource</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M69,552C77,460 106,171 166,103 175,93 189,86 202,82"/>
+<polygon style="fill:black;stroke:black;" points="72,552 68,562 66,552 72,552"/>
+</a>
+</g>
+<!-- nt:version -->
+<g id="node34" class="node"><title>nt:version</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="130" rx="41" ry="18"/>
+<text text-anchor="middle" x="244" y="135">nt:version</text>
+</g>
+<!-- nt:base&#45;&gt;nt:version -->
+<g id="edge50" class="edge"><title>nt:base&#45;&gt;nt:version</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M70,552C80,467 113,216 166,157 176,146 191,140 205,136"/>
+<polygon style="fill:black;stroke:black;" points="73,552 69,562 67,552 73,552"/>
+</a>
+</g>
+<!-- nt:frozenNode -->
+<g id="node46" class="node"><title>nt:frozenNode</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="238" rx="53" ry="18"/>
+<text text-anchor="middle" x="244" y="243">nt:frozenNode</text>
+</g>
+<!-- nt:base&#45;&gt;nt:frozenNode -->
+<g id="edge74" class="edge"><title>nt:base&#45;&gt;nt:frozenNode</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M73,552C86,483 125,307 166,265 174,256 185,250 196,246"/>
+<polygon style="fill:black;stroke:black;" points="76,553 71,562 70,552 76,553"/>
+</a>
+</g>
+<!-- nt:unstructured -->
+<g id="node51" class="node"><title>nt:unstructured</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="1038" rx="55" ry="18"/>
+<text text-anchor="middle" x="244" y="1043">nt:unstructured</text>
+</g>
+<!-- nt:base&#45;&gt;nt:unstructured -->
+<g id="edge80" class="edge"><title>nt:base&#45;&gt;nt:unstructured</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M70,608C80,694 112,950 166,1011 174,1020 185,1025 196,1029"/>
+<polygon style="fill:black;stroke:black;" points="67,608 69,598 73,608 67,608"/>
+</a>
+</g>
+<!-- rep:system -->
+<g id="node55" class="node"><title>rep:system</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="730" rx="43" ry="18"/>
+<text text-anchor="middle" x="244" y="735">rep:system</text>
+</g>
+<!-- nt:base&#45;&gt;rep:system -->
+<g id="edge98" class="edge"><title>nt:base&#45;&gt;rep:system</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M83,606C101,632 131,673 166,699 179,708 194,715 208,719"/>
+<polygon style="fill:black;stroke:black;" points="80,607 77,597 85,603 80,607"/>
+</a>
+</g>
+<!-- rep:nodeTypes -->
+<g id="node57" class="node"><title>rep:nodeTypes</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="822" rx="54" ry="18"/>
+<text text-anchor="middle" x="244" y="827">rep:nodeTypes</text>
+</g>
+<!-- nt:base&#45;&gt;rep:nodeTypes -->
+<g id="edge64" class="edge"><title>nt:base&#45;&gt;rep:nodeTypes</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M78,607C95,644 127,709 166,757 182,776 204,793 220,806"/>
+<polygon style="fill:black;stroke:black;" points="75,609 74,598 81,606 75,609"/>
+</a>
+</g>
+<!-- nt:nodeType -->
+<g id="node61" class="node"><title>nt:nodeType</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="930" rx="48" ry="18"/>
+<text text-anchor="middle" x="244" y="935">nt:nodeType</text>
+</g>
+<!-- nt:base&#45;&gt;nt:nodeType -->
+<g id="edge86" class="edge"><title>nt:base&#45;&gt;nt:nodeType</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M72,608C86,678 124,859 166,903 175,912 188,918 200,922"/>
+<polygon style="fill:black;stroke:black;" points="69,608 70,598 75,607 69,608"/>
+</a>
+</g>
+<!-- nt:propertyDefinition -->
+<g id="node63" class="node"><title>nt:propertyDefinition</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="876" rx="72" ry="18"/>
+<text text-anchor="middle" x="244" y="881">nt:propertyDefinition</text>
+</g>
+<!-- nt:base&#45;&gt;nt:propertyDefinition -->
+<g id="edge70" class="edge"><title>nt:base&#45;&gt;nt:propertyDefinition</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M70,608C77,663 98,781 166,849 173,855 181,860 190,864"/>
+<polygon style="fill:black;stroke:black;" points="67,608 69,598 73,608 67,608"/>
+</a>
+</g>
+<!-- d0e1779 -->
+<g id="node67" class="node"><title>d0e1779</title>
+<polygon style="fill:khaki;stroke:black;" points="460,312 406,312 406,348 460,348 460,312"/>
+<text text-anchor="middle" x="433" y="335">*</text>
+</g>
+<!-- nt:base&#45;&gt;d0e1779 -->
+<g id="edge78" class="edge"><title>nt:base&#45;&gt;d0e1779</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M70,552C78,503 102,404 166,357 204,330 346,329 406,329"/>
+<polygon style="fill:black;stroke:black;" points="73,552 69,562 67,552 73,552"/>
+</a>
+</g>
+<!-- d0e1869 -->
+<g id="node71" class="node"><title>d0e1869</title>
+<polygon style="fill:khaki;stroke:black;" points="460,1074 406,1074 406,1110 460,1110 460,1074"/>
+<text text-anchor="middle" x="433" y="1097">*</text>
+</g>
+<!-- nt:base&#45;&gt;d0e1869 -->
+<g id="edge84" class="edge"><title>nt:base&#45;&gt;d0e1869</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M69,608C75,702 98,1002 166,1065 234,1125 353,1109 406,1098"/>
+<polygon style="fill:black;stroke:black;" points="66,608 68,598 72,608 66,608"/>
+</a>
+</g>
+<!-- nt:query -->
+<g id="node81" class="node"><title>nt:query</title>
+<ellipse style="fill:gold;stroke:black;" cx="244" cy="580" rx="36" ry="18"/>
+<text text-anchor="middle" x="244" y="585">nt:query</text>
+</g>
+<!-- nt:base&#45;&gt;nt:query -->
+<g id="edge96" class="edge"><title>nt:base&#45;&gt;nt:query</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M111,580C141,580 179,580 207,580"/>
+<polygon style="fill:black;stroke:black;" points="111,583 101,580 111,576 111,583"/>
+</a>
+</g>
+<!-- d0e2200 -->
+<g id="node84" class="node"><title>d0e2200</title>
+<polygon style="fill:khaki;stroke:black;" points="460,712 406,712 406,748 460,748 460,712"/>
+<text text-anchor="middle" x="433" y="735">*</text>
+</g>
+<!-- nt:base&#45;&gt;d0e2200 -->
+<g id="edge102" class="edge"><title>nt:base&#45;&gt;d0e2200</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M107,591C125,596 147,602 166,607 236,624 265,603 322,645 347,662 335,683 358,703 372,714 391,721 406,725"/>
+<polygon style="fill:black;stroke:black;" points="106,594 97,588 108,588 106,594"/>
+</a>
+</g>
+<!-- nt:versionHistory&#45;&gt;d0e48 -->
+<g id="edge10" class="edge"><title>nt:versionHistory&#45;&gt;d0e48</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M300,200C307,203 315,207 322,211 342,224 339,237 358,249 373,258 391,265 406,269"/>
+<polygon style="fill:black;stroke:black;" points="298,203 290,196 301,196 298,203"/>
+</a>
+</g>
+<!-- d0e971 -->
+<g id="node32" class="node"><title>d0e971</title>
+<polygon style="fill:khaki;stroke:black;" points="460,42 406,42 406,78 460,78 460,42"/>
+<text text-anchor="middle" x="433" y="65">*</text>
+</g>
+<!-- nt:versionHistory&#45;&gt;d0e971 -->
+<g id="edge36" class="edge"><title>nt:versionHistory&#45;&gt;d0e971</title>
+<a xlink:title="is child node of">
+<path style="fill:none;stroke:black;stroke-dasharray:1,5;" d="M304,169C310,166 317,162 322,157 349,135 332,111 358,87 372,75 391,69 406,65"/>
+<polygon style="fill:black;stroke:black;" points="305,173 294,173 302,166 305,173"/>
+</a>
+</g>
+<!-- d0e997 -->
+<g id="node36" class="node"><title>d0e997</title>
+<polygon style="fill:khaki;stroke:black;" points="490,204 376,204 376,240 490,240 490,204"/>
+<text text-anchor="middle" x="433" y="227">jcr:versionLabels</text>
+</g>
+<!-- nt:versionHistory&#45;&gt;d0e997 -->
+<g id="edge40" class="edge"><title>nt:versionHistory&#45;&gt;d0e997</title>
+<a xlink:title="is mandatory child node of">
+<path style="fill:none;stroke:black;" d="M305,196C328,201 353,206 376,211"/>
+<polygon style="fill:black;stroke:black;" points="304,199 295,194 305,193 304,199"/>
+</a>
+</g>
+<!-- d0e1026 -->
+<g id="node39" class="node"><title>d0e1026</title>
+<polygon style="fill:khaki;stroke:black;" points="483,96 383,96 383,132 483,132 483,96"/>
+<text text-anchor="middle" x="433" y="119">jcr:rootVersion</text>
+</g>
+<!-- nt:versionHistory&#45;&gt;d0e1026 -->
+<g id="edge44" class="edge"><title>nt:versionHistory&#45;&gt;d0e1026</title>
+<a xlink:title="is mandatory child node of">
+<path style="fill:none;stroke:black;" d="M295,168C304,164 313,161 322,157 339,151 342,148 358,141 366,138 374,135 382,132"/>
+<polygon style="fill:black;stroke:black;" points="297,171 286,171 294,165 297,171"/>
+</a>
+</g>
+<!-- mix:referenceable -->
+<g id="node11" class="node"><title>mix:referenceable</title>
+<ellipse style="fill:greenyellow;stroke:black;" cx="67" cy="130" rx="63" ry="18"/>
+<text text-anchor="middle" x="67" y="135">mix:referenceable</text>
+</g>
+<!-- mix:referenceable&#45;&gt;nt:versionHistory -->
+<g id="edge32" class="edge"><title>mix:referenceable&#45;&gt;nt:versionHistory</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M120,146C146,153 177,163 202,171"/>
+<polygon style="fill:black;stroke:black;" points="119,149 110,143 121,143 119,149"/>
+</a>
+</g>
+<!-- mix:versionable -->
+<g id="node18" class="node"><title>mix:versionable</title>
+<ellipse style="fill:greenyellow;stroke:black;" cx="244" cy="22" rx="57" ry="18"/>
+<text text-anchor="middle" x="244" y="27">mix:versionable</text>
+</g>
+<!-- mix:referenceable&#45;&gt;mix:versionable -->
+<g id="edge18" class="edge"><title>mix:referenceable&#45;&gt;mix:versionable</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M118,111C122,109 127,106 130,103 153,85 144,67 166,49 175,42 187,37 198,33"/>
+<polygon style="fill:black;stroke:black;" points="119,114 109,116 116,108 119,114"/>
+</a>
+</g>
+<!-- mix:referenceable&#45;&gt;nt:resource -->
+<g id="edge28" class="edge"><title>mix:referenceable&#45;&gt;nt:resource</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M120,114C148,106 183,95 208,87"/>
+<polygon style="fill:black;stroke:black;" points="121,117 110,117 119,111 121,117"/>
+</a>
+</g>
+<!-- mix:referenceable&#45;&gt;nt:version -->
+<g id="edge48" class="edge"><title>mix:referenceable&#45;&gt;nt:version</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M140,130C161,130 184,130 203,130"/>
+<polygon style="fill:black;stroke:black;" points="140,133 130,130 140,126 140,133"/>
+</a>
+</g>
+<!-- mix:referenceable&#45;&gt;nt:frozenNode -->
+<g id="edge72" class="edge"><title>mix:referenceable&#45;&gt;nt:frozenNode</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M91,154C110,172 139,196 166,211 177,217 190,222 202,227"/>
+<polygon style="fill:black;stroke:black;" points="89,157 84,147 94,152 89,157"/>
+</a>
+</g>
+<!-- nt:versionLabels&#45;&gt;d0e997 -->
+<g id="edge42" class="edge"><title>nt:versionLabels&#45;&gt;d0e997</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M293,276C303,272 313,269 322,265 339,258 342,255 358,249 366,246 374,243 382,240"/>
+<polygon style="fill:black;stroke:black;" points="295,279 284,279 292,273 295,279"/>
+</a>
+</g>
+<!-- d0e2052 -->
+<g id="node75" class="node"><title>d0e2052</title>
+<polygon style="fill:khaki;stroke:black;" points="508,966 358,966 358,1002 508,1002 508,966"/>
+<text text-anchor="middle" x="433" y="989">jcr:childNodeDefinition</text>
+</g>
+<!-- nt:childNodeDefinition&#45;&gt;d0e2052 -->
+<g id="edge90" class="edge"><title>nt:childNodeDefinition&#45;&gt;d0e2052</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M332,984C341,984 349,984 358,984"/>
+<polygon style="fill:black;stroke:black;" points="332,987 322,984 332,980 332,987"/>
+</a>
+</g>
+<!-- nt:file -->
+<g id="node22" class="node"><title>nt:file</title>
+<ellipse style="fill:gold;stroke:black;" cx="433" cy="476" rx="30" ry="18"/>
+<text text-anchor="middle" x="433" y="481">nt:file</text>
+</g>
+<!-- nt:hierarchyNode&#45;&gt;nt:file -->
+<g id="edge22" class="edge"><title>nt:hierarchyNode&#45;&gt;nt:file</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M300,511C335,502 378,490 405,483"/>
+<polygon style="fill:black;stroke:black;" points="301,514 290,514 299,508 301,514"/>
+</a>
+</g>
+<!-- nt:linkedFile -->
+<g id="node48" class="node"><title>nt:linkedFile</title>
+<ellipse style="fill:gold;stroke:black;" cx="433" cy="568" rx="48" ry="18"/>
+<text text-anchor="middle" x="433" y="573">nt:linkedFile</text>
+</g>
+<!-- nt:hierarchyNode&#45;&gt;nt:linkedFile -->
+<g id="edge56" class="edge"><title>nt:hierarchyNode&#45;&gt;nt:linkedFile</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M304,539C332,546 366,553 391,559"/>
+<polygon style="fill:black;stroke:black;" points="303,542 294,537 304,536 303,542"/>
+</a>
+</g>
+<!-- nt:folder -->
+<g id="node94" class="node"><title>nt:folder</title>
+<ellipse style="fill:gold;stroke:black;" cx="433" cy="676" rx="37" ry="18"/>
+<text text-anchor="middle" x="433" y="681">nt:folder</text>
+</g>
+<!-- nt:hierarchyNode&#45;&gt;nt:folder -->
+<g id="edge112" class="edge"><title>nt:hierarchyNode&#45;&gt;nt:folder</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M304,540C311,544 317,548 322,553 355,584 326,616 358,649 369,659 384,666 398,670"/>
+<polygon style="fill:black;stroke:black;" points="303,543 295,536 306,537 303,543"/>
+</a>
+</g>
+<!-- d0e2372 -->
+<g id="node96" class="node"><title>d0e2372</title>
+<polygon style="fill:khaki;stroke:black;" points="610,581 556,581 556,617 610,617 610,581"/>
+<text text-anchor="middle" x="583" y="604">*</text>
+</g>
+<!-- nt:hierarchyNode&#45;&gt;d0e2372 -->
+<g id="edge116" class="edge"><title>nt:hierarchyNode&#45;&gt;d0e2372</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M312,518C367,515 445,517 508,541 531,549 552,567 566,581"/>
+<polygon style="fill:black;stroke:black;" points="312,521 302,519 312,515 312,521"/>
+</a>
+</g>
+<!-- nt:file&#45;&gt;d0e693 -->
+<g id="edge24" class="edge"><title>nt:file&#45;&gt;d0e693</title>
+<a xlink:title="is mandatory child node of">
+<path style="fill:none;stroke:black;" d="M472,470C495,467 522,462 544,459"/>
+<polygon style="fill:black;stroke:black;" points="472,473 462,472 471,467 472,473"/>
+</a>
+</g>
+<!-- nt:version&#45;&gt;d0e971 -->
+<g id="edge38" class="edge"><title>nt:version&#45;&gt;d0e971</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M287,116C299,112 311,108 322,103 339,97 342,94 358,87 374,81 391,74 406,69"/>
+<polygon style="fill:black;stroke:black;" points="288,119 277,119 286,113 288,119"/>
+</a>
+</g>
+<!-- nt:version&#45;&gt;d0e1026 -->
+<g id="edge46" class="edge"><title>nt:version&#45;&gt;d0e1026</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M295,126C322,123 356,121 382,118"/>
+<polygon style="fill:black;stroke:black;" points="295,129 285,127 295,123 295,129"/>
+</a>
+</g>
+<!-- d0e1162 -->
+<g id="node44" class="node"><title>d0e1162</title>
+<polygon style="fill:khaki;stroke:black;" points="484,150 382,150 382,186 484,186 484,150"/>
+<text text-anchor="middle" x="433" y="173">jcr:frozenNode</text>
+</g>
+<!-- nt:version&#45;&gt;d0e1162 -->
+<g id="edge52" class="edge"><title>nt:version&#45;&gt;d0e1162</title>
+<a xlink:title="is child node of">
+<path style="fill:none;stroke:black;stroke-dasharray:1,5;" d="M291,140C319,146 353,153 382,158"/>
+<polygon style="fill:black;stroke:black;" points="290,143 281,138 291,137 290,143"/>
+</a>
+</g>
+<!-- nt:frozenNode&#45;&gt;d0e1162 -->
+<g id="edge54" class="edge"><title>nt:frozenNode&#45;&gt;d0e1162</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M292,222C302,218 312,215 322,211 339,205 342,202 358,195 366,192 374,189 382,186"/>
+<polygon style="fill:black;stroke:black;" points="294,225 283,226 291,219 294,225"/>
+</a>
+</g>
+<!-- nt:frozenNode&#45;&gt;d0e1779 -->
+<g id="edge76" class="edge"><title>nt:frozenNode&#45;&gt;d0e1779</title>
+<a xlink:title="is child node of">
+<path style="fill:none;stroke:black;stroke-dasharray:1,5;" d="M297,252C306,256 315,260 322,265 342,277 339,290 358,303 373,312 391,319 406,323"/>
+<polygon style="fill:black;stroke:black;" points="296,255 287,249 298,249 296,255"/>
+</a>
+</g>
+<!-- rep:root -->
+<g id="node50" class="node"><title>rep:root</title>
+<ellipse style="fill:gold;stroke:black;" cx="433" cy="1038" rx="35" ry="18"/>
+<text text-anchor="middle" x="433" y="1043">rep:root</text>
+</g>
+<!-- d0e1253 -->
+<g id="node53" class="node"><title>d0e1253</title>
+<polygon style="fill:khaki;stroke:black;" points="620,889 546,889 546,925 620,925 620,889"/>
+<text text-anchor="middle" x="583" y="912">jcr:system</text>
+</g>
+<!-- rep:root&#45;&gt;d0e1253 -->
+<g id="edge60" class="edge"><title>rep:root&#45;&gt;d0e1253</title>
+<a xlink:title="is mandatory child node of">
+<path style="fill:none;stroke:black;" d="M476,1028C487,1024 499,1018 508,1011 539,987 562,948 574,925"/>
+<polygon style="fill:black;stroke:black;" points="477,1031 466,1031 475,1025 477,1031"/>
+</a>
+</g>
+<!-- nt:unstructured&#45;&gt;rep:root -->
+<g id="edge58" class="edge"><title>nt:unstructured&#45;&gt;rep:root</title>
+<a xlink:title="supertype">
+<path style="fill:none;stroke:black;" d="M309,1038C339,1038 373,1038 397,1038"/>
+<polygon style="fill:black;stroke:black;" points="309,1041 299,1038 309,1034 309,1041"/>
+</a>
+</g>
+<!-- nt:unstructured&#45;&gt;d0e1869 -->
+<g id="edge82" class="edge"><title>nt:unstructured&#45;&gt;d0e1869</title>
+<a xlink:title="is child node of">
+<path style="fill:none;stroke:black;stroke-dasharray:1,5;" d="M295,1053C331,1063 377,1076 406,1084"/>
+<polygon style="fill:black;stroke:black;" points="294,1056 285,1050 296,1050 294,1056"/>
+</a>
+</g>
+<!-- rep:system&#45;&gt;d0e1253 -->
+<g id="edge62" class="edge"><title>rep:system&#45;&gt;d0e1253</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M292,741C367,759 503,791 508,795 543,819 565,864 576,889"/>
+<polygon style="fill:black;stroke:black;" points="291,744 282,739 292,738 291,744"/>
+</a>
+</g>
+<!-- rep:system&#45;&gt;d0e2200 -->
+<g id="edge100" class="edge"><title>rep:system&#45;&gt;d0e2200</title>
+<a xlink:title="is child node of">
+<path style="fill:none;stroke:black;stroke-dasharray:1,5;" d="M298,730C334,730 378,730 406,730"/>
+<polygon style="fill:black;stroke:black;" points="298,733 288,730 298,726 298,733"/>
+</a>
+</g>
+<!-- d0e2226 -->
+<g id="node87" class="node"><title>d0e2226</title>
+<polygon style="fill:khaki;stroke:black;" points="481,804 385,804 385,840 481,840 481,804"/>
+<text text-anchor="middle" x="433" y="827">jcr:nodeTypes</text>
+</g>
+<!-- rep:system&#45;&gt;d0e2226 -->
+<g id="edge104" class="edge"><title>rep:system&#45;&gt;d0e2226</title>
+<a xlink:title="is mandatory child node of">
+<path style="fill:none;stroke:black;" d="M280,750C302,761 332,777 358,790 368,795 379,799 390,804"/>
+<polygon style="fill:black;stroke:black;" points="278,753 271,745 281,747 278,753"/>
+</a>
+</g>
+<!-- rep:system&#45;&gt;d0e2255 -->
+<g id="edge108" class="edge"><title>rep:system&#45;&gt;d0e2255</title>
+<a xlink:title="is mandatory child node of">
+<path style="fill:none;stroke:black;" d="M291,716C302,712 313,706 322,699 344,682 337,665 358,649 363,645 368,642 373,639"/>
+<polygon style="fill:black;stroke:black;" points="292,720 281,720 289,713 292,720"/>
+</a>
+</g>
+<!-- d0e1299 -->
+<g id="node59" class="node"><title>d0e1299</title>
+<polygon style="fill:khaki;stroke:black;" points="460,858 406,858 406,894 460,894 460,858"/>
+<text text-anchor="middle" x="433" y="881">*</text>
+</g>
+<!-- rep:nodeTypes&#45;&gt;d0e1299 -->
+<g id="edge66" class="edge"><title>rep:nodeTypes&#45;&gt;d0e1299</title>
+<a xlink:title="is child node of">
+<path style="fill:none;stroke:black;stroke-dasharray:1,5;" d="M295,837C331,847 377,860 406,868"/>
+<polygon style="fill:black;stroke:black;" points="294,840 285,834 296,834 294,840"/>
+</a>
+</g>
+<!-- rep:nodeTypes&#45;&gt;d0e2226 -->
+<g id="edge106" class="edge"><title>rep:nodeTypes&#45;&gt;d0e2226</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M309,822C334,822 361,822 384,822"/>
+<polygon style="fill:black;stroke:black;" points="309,825 299,822 309,818 309,825"/>
+</a>
+</g>
+<!-- nt:nodeType&#45;&gt;d0e1299 -->
+<g id="edge68" class="edge"><title>nt:nodeType&#45;&gt;d0e1299</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M292,916C328,905 376,892 406,884"/>
+<polygon style="fill:black;stroke:black;" points="293,919 282,919 291,913 293,919"/>
+</a>
+</g>
+<!-- nt:nodeType&#45;&gt;d0e2052 -->
+<g id="edge88" class="edge"><title>nt:nodeType&#45;&gt;d0e2052</title>
+<a xlink:title="is child node of">
+<path style="fill:none;stroke:black;stroke-dasharray:1,5;" d="M292,944C315,950 344,959 369,966"/>
+<polygon style="fill:black;stroke:black;" points="291,947 282,941 293,941 291,947"/>
+</a>
+</g>
+<!-- d0e2081 -->
+<g id="node78" class="node"><title>d0e2081</title>
+<polygon style="fill:khaki;stroke:black;" points="502,912 364,912 364,948 502,948 502,912"/>
+<text text-anchor="middle" x="433" y="935">jcr:propertyDefinition</text>
+</g>
+<!-- nt:nodeType&#45;&gt;d0e2081 -->
+<g id="edge92" class="edge"><title>nt:nodeType&#45;&gt;d0e2081</title>
+<a xlink:title="is child node of">
+<path style="fill:none;stroke:black;stroke-dasharray:1,5;" d="M302,930C322,930 343,930 363,930"/>
+<polygon style="fill:black;stroke:black;" points="302,933 292,930 302,926 302,933"/>
+</a>
+</g>
+<!-- nt:propertyDefinition&#45;&gt;d0e2081 -->
+<g id="edge94" class="edge"><title>nt:propertyDefinition&#45;&gt;d0e2081</title>
+<a xlink:title="has primary type">
+<path style="fill:none;stroke:black;" d="M302,893C323,899 347,906 369,912"/>
+<polygon style="fill:black;stroke:black;" points="301,896 292,890 303,890 301,896"/>
+</a>
+</g>
+<!-- mix:lockable -->
+<g id="node93" class="node"><title>mix:lockable</title>
+<ellipse style="fill:greenyellow;stroke:black;" cx="67" cy="76" rx="49" ry="18"/>
+<text text-anchor="middle" x="67" y="81">mix:lockable</text>
+</g>
+<!-- nt:folder&#45;&gt;d0e2372 -->
+<g id="edge114" class="edge"><title>nt:folder&#45;&gt;d0e2372</title>
+<a xlink:title="is child node of">
+<path style="fill:none;stroke:black;stroke-dasharray:1,5;" d="M474,663C485,659 497,654 508,649 526,640 544,627 559,617"/>
+<polygon style="fill:black;stroke:black;" points="475,666 464,666 473,660 475,666"/>
+</a>
+</g>
+</g>
+</svg>

Added: jackrabbit/site/trunk/content/JCR/node-type-visualization.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/trunk/content/JCR/node-type-visualization.html?rev=1427110&view=auto
==============================================================================
--- jackrabbit/site/trunk/content/JCR/node-type-visualization.html (added)
+++ jackrabbit/site/trunk/content/JCR/node-type-visualization.html Mon Dec 31 12:40:09 2012
@@ -0,0 +1,244 @@
+
+<!-- 
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE- 2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License. 
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+  <HEAD>
+    <TITLE>Node Type Visualization</TITLE>
+    <LINK type="text/css" rel="stylesheet" href="http://jackrabbit.apache.org/style/site.css">
+  <META http-equiv="Content-Type" content="text/html;charset=UTF-8"></HEAD>
+  <BODY>
+    <DIV id="page">
+      <DIV id="header">
+        <P id="jcr"><A href="http://jackrabbit.apache.org/"><IMG src="http://jackrabbit.apache.org/style/jlogo.gif" alt="Apache Jackrabbit" height="100" width="336"></A></P>
+        <P id="asf"><A href="http://www.apache.org/"><IMG src="http://jackrabbit.apache.org/style/asf-logo.gif" alt="Apache Software Foundation" height="100" width="387"></A></P>
+      </DIV>
+      <DIV id="body">
+        <DIV id="navigation">
+  <UL>
+	<LI>Apache Jackrabbit
+	<UL>
+		<LI><A href="welcome-to-apache-jackrabbit.html" title="Welcome to Apache Jackrabbit">Welcome</A></LI>
+		<LI><A href="downloads.html" title="Downloads">Downloads</A></LI>
+		<LI><A href="frequently-asked-questions.html" title="Frequently Asked Questions">FAQ</A></LI>
+		<LI><A href="http://wiki.apache.org/jackrabbit/FrontPage" class="external-link">Jackrabbit Wiki</A></LI>
+		<LI><A href="jackrabbit-history.html" title="Jackrabbit History">Jackrabbit History</A></LI>
+	</UL>
+	</LI>
+	<LI>Documentation
+	<UL>
+		<LI><A href="getting-started-with-apache-jackrabbit.html" title="Getting Started with Apache Jackrabbit">Getting Started</A></LI>
+		<LI><A href="standalone-server.html" title="Standalone Server">Standalone Server</A></LI>
+		<LI><A href="jackrabbit-components.html" title="Jackrabbit Components">Jackrabbit Components</A></LI>
+		<LI><A href="first-hops.html" title="First Hops">First Hops</A></LI>
+		<LI><A href="jcr-api.html" title="JCR & API">JCR &amp; API</A></LI>
+		<LI><A href="jackrabbit-architecture.html" title="Jackrabbit Architecture">Jackrabbit Architecture</A></LI>
+		<LI><A href="deployment-models.html" title="Deployment Models">Deployment Models</A></LI>
+		<LI><A href="jackrabbit-configuration.html" title="Jackrabbit Configuration">Jackrabbit Configuration</A></LI>
+		<LI><A href="node-types.html" title="Node Types">Node Types</A></LI>
+		<LI><A href="object-content-mapping.html" title="Object Content Mapping">Object Content Mapping</A></LI>
+	</UL>
+	</LI>
+	<LI>Development
+	<UL>
+		<LI><A href="jackrabbit-team.html" title="Jackrabbit Team">Jackrabbit Team</A></LI>
+		<LI><A href="jackrabbit-roadmap.html" title="Jackrabbit Roadmap">Jackrabbit Roadmap</A></LI>
+		<LI><A href="building-jackrabbit.html" title="Building Jackrabbit">Building Jackrabbit</A></LI>
+		<LI><A href="mailing-lists.html" title="Mailing Lists">Mailing Lists</A></LI>
+		<LI><A href="issue-tracker.html" title="Issue Tracker">Issue Tracker</A></LI>
+		<LI><A href="source-repository.html" title="Source Repository">Source Repository</A></LI>
+		<LI><A href="continuous-integration.html" title="Continuous Integration">Continuous Integration</A></LI>
+		<LI><A href="website.html" title="Website">Website</A></LI>
+		<LI><A href="creating-releases.html" title="Creating Releases">Creating Releases</A></LI>
+		<LI><A href="supporting-software-attribution.html" title="Supporting software attribution">Attribution</A></LI>
+	</UL>
+	</LI>
+	<LI>Apache Software Foundation
+	<UL>
+		<LI><A href="http://www.apache.org/foundation/how-it-works.html" class="external-link">Introduction</A></LI>
+		<LI><A href="http://www.apache.org/foundation/sponsorship.html" class="external-link">Sponsorship</A></LI>
+		<LI><A href="http://www.apache.org/foundation/thanks.html" class="external-link">Current Sponsors</A></LI>
+	</UL>
+	</LI>
+</UL>
+        </DIV>
+        <DIV id="content">
+          <H1>Node Type Visualization</H1>
+  <P>Visualizing the Node Type Hierarchy is non-trivial, even in the case of a repository containing only the default Jackrabbit node types. Here, GraphViz can help:</P>
+
+<P><SPAN class="image-wrap" style=""><IMG src="node-type-visualization.data/jackrabbit-nodetypes.png" style="border: 0px solid black"></SPAN><BR>
+Node Type Hierarchy for Jackrabbit (<A href="node-type-visualization.data/jackrabbit-nodetypes.svg">SVG version</A>)</P>
+
+<P>In this diagram, the rounded boxes represent node types (green for mixins, gold for primrary types), with the arrows indicating the node inheritance. The square boxes represent child node and property definitions.</P>
+
+<P>To generate these diagrams, you will need:</P>
+
+<OL>
+	<LI>A system view export of &quot;/jcr:system/jcr:nodeTypes&quot;.</LI>
+	<LI>An XSLT processor and the XSLT code below.</LI>
+	<LI>The <A href="http://graphviz.org/" class="external-link">GraphViz</A> tool</LI>
+</OL>
+
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+&lt;!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * <SPAN class="code-keyword">this</SPAN> work <SPAN class="code-keyword">for</SPAN> additional information regarding copyright ownership.
+ * The ASF licenses <SPAN class="code-keyword">this</SPAN> file to You under the Apache License, Version 2.0
+ * (the <SPAN class="code-quote">&quot;License&quot;</SPAN>); you may not use <SPAN class="code-keyword">this</SPAN> file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http:<SPAN class="code-comment">//www.apache.org/licenses/LICENSE-2.0
+</SPAN> *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an <SPAN class="code-quote">&quot;AS IS&quot;</SPAN> BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License <SPAN class="code-keyword">for</SPAN> the specific language governing permissions and
+ * limitations under the License.
+--&gt;
+
+&lt;!--
+  A tool <SPAN class="code-keyword">for</SPAN> converting the system view of /jcr:system/jcr:nodeTypes
+  to GraphViz input (see &lt;http:<SPAN class="code-comment">//www.graphviz.org/&gt;).
+</SPAN>  
+  Usage:
+  
+  1: Export <SPAN class="code-object">System</SPAN> View of /jcr:system/jcr:nodeTypes
+
+  2: Run XSLT transformation, producing a .dot file, such as with
+  
+     $ saxon nt-sample.xml jcr-nodetypes-to-dot.xslt &gt; nt-sample.dot
+
+  3: Run Graphviz, <SPAN class="code-keyword">for</SPAN> instance
+  
+     $ dot nt-sample.dot -Tsvg -o nt-sample.svg
+     
+     ...producing nt-sample.svg as output.
+--&gt;
+
+&lt;xsl:transform xmlns:xsl=<SPAN class="code-quote">&quot;http:<SPAN class="code-comment">//www.w3.org/1999/XSL/Transform&quot;</SPAN>
+</SPAN>                version=<SPAN class="code-quote">&quot;1.0&quot;</SPAN>
+                xmlns:ed=<SPAN class="code-quote">&quot;http:<SPAN class="code-comment">//greenbytes.de/2002/rfcedit&quot;</SPAN>
+</SPAN>                xmlns:exslt=<SPAN class="code-quote">&quot;http:<SPAN class="code-comment">//exslt.org/common&quot;</SPAN>
+</SPAN>                xmlns:nt=<SPAN class="code-quote">&quot;http:<SPAN class="code-comment">//www.jcp.org/jcr/nt/1.0&quot;</SPAN>
+</SPAN>                xmlns:sv=<SPAN class="code-quote">&quot;http:<SPAN class="code-comment">//www.jcp.org/jcr/sv/1.0&quot;</SPAN>
+</SPAN>                xmlns:jcr=<SPAN class="code-quote">&quot;http:<SPAN class="code-comment">//www.jcp.org/jcr/1.0&quot;</SPAN>
+</SPAN>&gt;
+
+&lt;xsl:output method=<SPAN class="code-quote">&quot;text&quot;</SPAN> encoding=<SPAN class="code-quote">&quot;UTF-8&quot;</SPAN>/&gt;
+
+&lt;xsl:template match=<SPAN class="code-quote">&quot;/&quot;</SPAN>&gt;
+  &lt;xsl:text&gt;digraph {&amp;#10;&lt;/xsl:text&gt;
+  &lt;xsl:text&gt;  rankdir=LR;&amp;#10;&lt;/xsl:text&gt;
+  &lt;xsl:apply-templates select=<SPAN class="code-quote">&quot;<SPAN class="code-comment">//sv:node[sv:property[@sv:name='jcr:primaryType']/sv:value='nt:nodeType']&quot;</SPAN>/&gt;
+</SPAN>  &lt;xsl:text&gt;}&amp;#10;&lt;/xsl:text&gt;
+&lt;/xsl:template&gt;
+
+&lt;xsl:template match=<SPAN class="code-quote">&quot;sv:node[sv:property[@sv:name='jcr:primaryType']/sv:value='nt:nodeType']&quot;</SPAN>&gt;
+  &lt;xsl:text&gt;  &quot;&lt;/xsl:text&gt;
+  &lt;xsl:value-of select=<SPAN class="code-quote">&quot;@sv:name&quot;</SPAN>/&gt;
+  &lt;xsl:text&gt;&quot; &lt;/xsl:text&gt;
+  &lt;xsl:choose&gt;
+    &lt;xsl:when test=<SPAN class="code-quote">&quot;sv:property[@sv:name='jcr:isMixin']/sv:value='<SPAN class="code-keyword">true</SPAN>'&quot;</SPAN>&gt;
+      &lt;xsl:text&gt;[style = <SPAN class="code-quote">&quot;filled, rounded&quot;</SPAN>, fillcolor = greenyellow];&lt;/xsl:text&gt;
+    &lt;/xsl:when&gt;
+    &lt;xsl:otherwise&gt;
+      &lt;xsl:text&gt;[style = <SPAN class="code-quote">&quot;filled, rounded&quot;</SPAN>, fillcolor = gold];&lt;/xsl:text&gt;
+    &lt;/xsl:otherwise&gt;
+  &lt;/xsl:choose&gt;
+  &lt;xsl:text&gt;&amp;#10;&lt;/xsl:text&gt;
+  
+  &lt;xsl:<SPAN class="code-keyword">for</SPAN>-each select=<SPAN class="code-quote">&quot;sv:property[@sv:name='jcr:supertypes']/sv:value&quot;</SPAN>&gt;
+    &lt;xsl:text&gt;  &quot;&lt;/xsl:text&gt;
+    &lt;xsl:value-of select=<SPAN class="code-quote">&quot;.&quot;</SPAN>/&gt;
+    &lt;xsl:text&gt;<SPAN class="code-quote">&quot; -&gt; &quot;</SPAN>&lt;/xsl:text&gt;
+    &lt;xsl:value-of select=<SPAN class="code-quote">&quot;../../@sv:name&quot;</SPAN>/&gt;
+    &lt;xsl:text&gt;<SPAN class="code-quote">&quot; [dir = back, tooltip = &quot;</SPAN>supertype&quot;];&amp;#10;&lt;/xsl:text&gt;
+  &lt;/xsl:<SPAN class="code-keyword">for</SPAN>-each&gt;
+  
+  &lt;xsl:<SPAN class="code-keyword">for</SPAN>-each select=<SPAN class="code-quote">&quot;sv:node[@sv:name='jcr:childNodeDefinition']&quot;</SPAN>&gt;
+  
+    &lt;xsl:variable name=<SPAN class="code-quote">&quot;name&quot;</SPAN>&gt;
+      &lt;xsl:choose&gt;
+        &lt;xsl:when test=<SPAN class="code-quote">&quot;sv:property[@sv:name='jcr:name']&quot;</SPAN>&gt;
+          &lt;xsl:value-of select=<SPAN class="code-quote">&quot;sv:property[@sv:name='jcr:name']/sv:value&quot;</SPAN>/&gt;
+        &lt;/xsl:when&gt;
+        &lt;xsl:otherwise&gt;*&lt;/xsl:otherwise&gt;
+      &lt;/xsl:choose&gt;
+    &lt;/xsl:variable&gt;
+
+    &lt;xsl:variable name=<SPAN class="code-quote">&quot;id&quot;</SPAN> select=<SPAN class="code-quote">&quot;generate-id()&quot;</SPAN>/&gt;
+    
+    &lt;xsl:value-of select=<SPAN class="code-quote">&quot;concat('  &amp;quot;',$id,'&amp;quot; [shape = box, style = filled, fillcolor = khaki, label=&amp;quot;',$name,'&amp;quot;] &amp;#10;')&quot;</SPAN>/&gt;
+    
+    &lt;xsl:text&gt;  &quot;&lt;/xsl:text&gt;
+    &lt;xsl:value-of select=<SPAN class="code-quote">&quot;../@sv:name&quot;</SPAN>/&gt;
+    &lt;xsl:text&gt;<SPAN class="code-quote">&quot; -&gt; &quot;</SPAN>&lt;/xsl:text&gt;
+    &lt;xsl:value-of select=<SPAN class="code-quote">&quot;$id&quot;</SPAN>/&gt;
+    &lt;xsl:choose&gt;
+      &lt;xsl:when test=<SPAN class="code-quote">&quot;sv:property[@sv:name='jcr:mandatory']/sv:value='<SPAN class="code-keyword">true</SPAN>'&quot;</SPAN>&gt;
+        &lt;xsl:text&gt;<SPAN class="code-quote">&quot; [tooltip = &quot;</SPAN>is mandatory child node of&quot;, dir = back];&amp;#10;&lt;/xsl:text&gt;
+      &lt;/xsl:when&gt;
+      &lt;xsl:otherwise&gt;
+        &lt;xsl:text&gt;<SPAN class="code-quote">&quot; [style = dotted, tooltip = &quot;</SPAN>is child node of&quot;, dir = back];&amp;#10;&lt;/xsl:text&gt;
+      &lt;/xsl:otherwise&gt;
+    &lt;/xsl:choose&gt;
+    
+    &lt;xsl:text&gt;  &quot;&lt;/xsl:text&gt;
+    &lt;xsl:value-of select=<SPAN class="code-quote">&quot;sv:property[@sv:name='jcr:requiredPrimaryTypes']/sv:value&quot;</SPAN>/&gt;
+    &lt;xsl:text&gt;<SPAN class="code-quote">&quot; -&gt; &quot;</SPAN>&lt;/xsl:text&gt;
+    &lt;xsl:value-of select=<SPAN class="code-quote">&quot;$id&quot;</SPAN>/&gt;
+    &lt;xsl:text&gt;<SPAN class="code-quote">&quot; [dir = back, tooltip = &quot;</SPAN>has primary type&quot;];&amp;#10;&lt;/xsl:text&gt;
+
+  &lt;/xsl:<SPAN class="code-keyword">for</SPAN>-each&gt;
+  
+&lt;/xsl:template&gt;
+
+&lt;/xsl:transform&gt;
+</PRE>
+</DIV></DIV>
+        </DIV>
+        <DIV id="end"></DIV>
+      </DIV>
+      <DIV id="footer">
+        <P>
+          &copy; 2004-2010 The Apache Software Foundation.
+          - <A href="http://jackrabbit.apache.org/privacy-policy.html">Privacy Policy</A> -
+          [<A href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=75306">edit this page</A>]
+          <BR>
+          Apache Jackrabbit, Jackrabbit, Apache, the Apache feather logo, and the Apache
+          Jackrabbit project logo are trademarks of The Apache Software Foundation.
+        </P>
+      </DIV>
+    </DIV>
+<!-- JCR- 1315: Add Google Analytics to Jackrabbit web site -->
+<SCRIPT type="text/javascript">
+var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</SCRIPT>
+<SCRIPT type="text/javascript">
+var pageTracker = _gat._getTracker("UA-837900-2");
+pageTracker._initData();
+pageTracker._trackPageview();
+</SCRIPT>
+  </BODY>
+</HTML>



Mime
View raw message