You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2018/12/10 17:02:06 UTC

[1/4] jena git commit: JENA-1647: Allow '/' and '~' in URNs

Repository: jena
Updated Branches:
  refs/heads/master 82121f9c5 -> 42dc4289b


http://git-wip-us.apache.org/repos/asf/jena/blob/40ededc3/jena-iri/src/main/xml/org/apache/jena/iri/impl/violations.xml
----------------------------------------------------------------------
diff --git a/jena-iri/src/main/xml/org/apache/jena/iri/impl/violations.xml b/jena-iri/src/main/xml/org/apache/jena/iri/impl/violations.xml
index 5323d51..71114d2 100644
--- a/jena-iri/src/main/xml/org/apache/jena/iri/impl/violations.xml
+++ b/jena-iri/src/main/xml/org/apache/jena/iri/impl/violations.xml
@@ -422,7 +422,7 @@ but rather use the appropriate %-encoding for each character.
 </pre>
 </text></require>
            
-           <pattern component="PATH" reserved="/~">(?![uU][rR][nN]:)[a-zA-Z0-9][-a-zA-Z0-9]{1,31}:[^/~]+</pattern>
+           <pattern component="PATH" reserved="/~">(?![uU][rR][nN]:)[a-zA-Z0-9][-a-zA-Z0-9]{1,31}:.*</pattern>
            <good>urn:x-hp:foo<unicode>00E9</unicode></good>
            <bad>urn:x-hp:foo/bar</bad>
            <bad>urn:urn:foo</bad>

http://git-wip-us.apache.org/repos/asf/jena/blob/40ededc3/jena-iri/src/test/java/org/apache/jena/iri/Additional.java
----------------------------------------------------------------------
diff --git a/jena-iri/src/test/java/org/apache/jena/iri/Additional.java b/jena-iri/src/test/java/org/apache/jena/iri/Additional.java
index 7e79c5f..bb5a9f1 100644
--- a/jena-iri/src/test/java/org/apache/jena/iri/Additional.java
+++ b/jena-iri/src/test/java/org/apache/jena/iri/Additional.java
@@ -53,6 +53,26 @@ public class Additional
        test(iri2, "http://a/b/c/foo") ;
     }
 
+    // RFC 8141 permits "/" "?" and "~".
+    // "?" is still excluded in jena-iri because it is used in URN resolution algorithms for r-component and q-component.
+    
+    // JENA-1647
+    @Test public void urn_rfc8141_slash() {
+        IRIFactory f = IRIFactory.iriImplementation() ;
+        IRI iri = f.construct("urn:nid:abc/def");
+    }
+    
+    // JENA-1647
+    @Test public void urn_rfc8141_frag() {
+        IRIFactory f = IRIFactory.iriImplementation() ;
+        IRI iri = f.construct("urn:nid:abc#frag");
+    }
+    
+    // JENA-1647
+    @Test public void urn_rfc8141_tilda() {
+        IRIFactory f = IRIFactory.iriImplementation() ;
+        IRI iri = f.construct("urn:nid:abc~xyz");
+    }
     
     private static void test(IRI iri, String iriStr) throws MalformedURLException
     {


[2/4] jena git commit: JENA-1647: Allow '/' and '~' in URNs

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/jena/blob/40ededc3/jena-iri/src/main/java/org/apache/jena/iri/impl/violations.xml
----------------------------------------------------------------------
diff --git a/jena-iri/src/main/java/org/apache/jena/iri/impl/violations.xml b/jena-iri/src/main/java/org/apache/jena/iri/impl/violations.xml
deleted file mode 100644
index c3bd953..0000000
--- a/jena-iri/src/main/java/org/apache/jena/iri/impl/violations.xml
+++ /dev/null
@@ -1,1722 +0,0 @@
-<!DOCTYPE violations SYSTEM  'violations.dtd'>
-
-<!--
-  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
--->
-
-
-<violations>
-	<specification id="RDF" href="http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Graph-URIref">
-		
-		<name>
-Resource Description Framework (RDF):
-Concepts and Abstract Syntax
-</name>
-		<section>RDF URI References</section>
-           <require component="SCHEME"><text>representing an <em>absolute URI</em> with optional fragment identifier</text></require>
-                
-	    <bad>foo/bar</bad>
-	    <bad>#frag</bad>
-	    <bad>//example.org/foo/bar#frag</bad>
-	</specification>
-	
-	<specification id="URI" rfc="3986">
-		<name>Uniform Resource Identifier (URI): Generic Syntax</name>
-	</specification>
-        
-        
-	<specification id="Unicode" href="http://www.unicode.org/">
-		<name>Unicode</name>
-	</specification>
-	
-	
-	<specification id="IRI" rfc="3987">
-		<name>Internationalized Resource Identifiers (IRIs)</name>
-	</specification>
-	
-	<specification id="XML" href="http://www.w3.org/TR/2004/REC-xml-20040204/#dt-sysid">
-		<name>Extensible Markup Language (XML) 1.0 (Third Edition)</name>
-		<section>system identifier</section>
-           <prohibit component="FRAGMENT"><text>TODO</text></prohibit>
-	</specification>
-	
-	<specification id="XLink" href="http://www.w3.org/TR/2001/REC-xlink-20010627/#link-locators">
-		<name>XML Linking Language (XLink) Version 1.0</name>
-		<section>Locator Attribute (href)</section>
-	</specification>
-	<specification id="Schema" href="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#anyURI">
-		<name>XML Schema Part 2: Datatypes Second Edition</name>
-		<section>anyURI</section>
-	</specification>
-	
-        <specification id="URL_Registratrion" type="other" rfc="2717">
-           <name>
-        Registration Procedures for URL
-              Scheme Names</name>
-        </specification>
-        
-        <scheme id="http" type="scheme" rfc="2616">
-           <name>Hypertext Transfer Protocol -- HTTP/1.1</name>
-           <defn section="3.2.2">
-<pre>
-http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
-</pre>
-           </defn>
-           <complete/>
-           <dns/>
-           <port>80</port>
-           <prohibit component="USER"/>
-           <require component="HOST"/>
-           <good>http://www.example.org/foo/bar</good>
-           <bad>http://www.example.org:80/foo/bar</bad>
-           <bad>http:foo/bar</bad>
-           <bad>http://user@www.example.org/foo/bar</bad>
-        </scheme>
-<scheme id="https" type="scheme" rfc="2818">
-  <name>Hypertext Transfer Protocol Secure</name>
-    <defn section="2.4">
-HTTP/TLS is differentiated from HTTP URIs by using the 'https' protocol identifier in place of the 'http' protocol identifier. 
-    </defn>       
-  <defn ref="http" section="3.2.2">
-<pre>
-http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
-</pre>
-           </defn>
-           <complete/>
-           <dns/>
-           <port>443</port>
-           <prohibit component="USER"/>
-           <require component="HOST"/>
-           <good>https://www.example.org/foo/bar</good>
-           <bad>https://www.example.org:443/foo/bar</bad>
-           <bad>https:foo/bar</bad>
-           <bad>https://user@www.example.org/foo/bar</bad>
-</scheme>
-        
-        <scheme id="ftp" type="scheme" rfc="1738" section="3.2">
-  <name>File Transfer Protocol</name>
-  <defn section="5">
-<pre>
-ftpurl = "ftp://" login [ "/" fpath [ ";type=" ftptype ]]
-fpath = fsegment *[ "/" fsegment ]
-fsegment = *[ uchar | "?" | ":" | "@" | "&amp;" | "=" ]
-ftptype = "A" | "I" | "D" | "a" | "i" | "d"
-</pre>
-<pre>
-login = [ user [ ":" password ] "@" ] hostport
-</pre>
-<pre>
-safe = "$" | "-" | "_" | "." | "+"
-extra = "!" | "*" | "'" | "(" | ")" | ","
-escape = "%" hex hex
-unreserved = alpha | digit | safe | extra
-uchar = unreserved | escape
-</pre>
-</defn>
-           <complete/>
-
-           <dns/>
-           <port>21</port>
-           <require component="HOST" section="5"><text>
-<pre>
-ftpurl = "ftp://" login [ "/" fpath [ ";type=" ftptype ]]
-
-login = [ user [ ":" password ] "@" ] hostport
-</pre></text>
-           </require>
-           <pattern component="PATHQUERY" reserved="~;">[^;~]*(;@{mustLowerCase(type)}=@{shouldLowerCase([aid])}|)</pattern>
-           <good>ftp://user@example.org/foo/bar;type=d</good>
-           <bad>ftp:///foo/bar</bad>
-           <!--
-           <bad>ftp://user@example.org/foo/bar?type=d</bad>
-           -->
-           <bad>ftp://user@example.org/foo/bar;type=z</bad>
-           <bad>ftp://user@example.org/foo/b;ar;type=d</bad>
-</scheme>
-
-
-<scheme id="mailto" type="scheme" rfc="2368">
-  <name>Electronic mail address</name>
-  <prohibit component="AUTHORITY"><text>
-<pre>
-     mailtoURL  =  "mailto:" [ to ] [ headers ]
-     to         =  #mailbox
-     headers    =  "?" header *( "&amp;" header )
-     header     =  hname "=" hvalue
-     hname      =  *urlc
-     hvalue     =  *urlc
-</pre></text></prohibit> 
-</scheme>
-
-<scheme id="news" type="scheme" rfc="1738" section="3.6">
-  <name>USENET news</name>
-  <defn section="5">
-<pre>
-newsurl = "news:" grouppart
-grouppart = "*" | group | article
-group = alpha *[ alpha | digit | "-" | "." | "+" | "_" ]
-article = 1*[ uchar | ";" | "/" | "?" | ":" | "&amp;" | "=" ] "@" host
-</pre>
-<pre>
-safe = "$" | "-" | "_" | "." | "+"
-extra = "!" | "*" | "'" | "(" | ")" | ","
-escape = "%" hex hex
-unreserved = alpha | digit | safe | extra
-uchar = unreserved | escape
-</pre>
-</defn>
-
-           <complete/>
-           <prohibit component="AUTHORITY" section="5"><text>
-<pre>
-newsurl = "news:" grouppart
-grouppart = "*" | group | article
-group = alpha *[ alpha | digit | "-" | "." | "+" | "_" ]
-article = 1*[ uchar | ";" | "/" | "?" | ":" | "&amp;" | "=" ] "@" host
-</pre>
-</text></prohibit>
-           <require component="PATH" section="5"><text>
-<pre>
-newsurl = "news:" grouppart
-grouppart = "*" | group | article
-group = alpha *[ alpha | digit | "-" | "." | "+" | "_" ]
-article = 1*[ uchar | ";" | "/" | "?" | ":" | "&amp;" | "=" ] "@" host
-</pre>
-</text></require>
-           <pattern component="PATHQUERY" reserved="~@">[^@]+@@{host}|[*]|[a-zA-Z][-a-zA-Z0-9.+_]*</pattern>
-           <good>news:*</good>
-           <good>news:group.it</good>
-           <good>news:arb?itrary@news.example.org</good>
-           <good>news:arbitrary@news.example.org</good>
-           <bad>news:arbitrary@news.exampl<unicode>00E7</unicode>.org</bad>
-           <bad>news:arbitr?ary@news.exampl<unicode>00E7</unicode>.org</bad>
-           <bad>news:///foo/bar</bad>
-           <bad>news://user@example.org/foo</bad>
-</scheme>
-<scheme id="nntp" type="scheme" rfc="1738"  section="3.7">
-  <name>USENET news using NNTP access</name>
-  
-  <defn section="5">
-<pre>
-nntpurl = "nntp://" hostport "/" group [ "/" digits ]
-</pre>
-<pre>
-group = alpha *[ alpha | digit | "-" | "." | "+" | "_" ]
-</pre>
-</defn>
-           <complete/>
-
-           <dns/>
-           <port>119</port>
-           <prohibit component="QUERY"/>
-           <prohibit component="USER"/>
-           <require component="HOST"/>
-           <pattern component="PATH">/[a-zA-Z][-a-zA-Z0-9.+_]*(/[0-9]+)?</pattern>
-           <bad>nntp://user@example.org/foo</bad>
-           <bad>nntp:/foo</bad>
-           <bad>nntp:///foo</bad>
-           <bad>nntp://example.org/foo/4/3</bad>
-           <bad>nntp://example.org/</bad>
-           <bad>nntp://example.org/foo/</bad>
-           <bad>nntp://example.org/*</bad>
-           <good>nntp://example.org/foo4</good>
-           <good>nntp://example.org/foo/4</good>
-</scheme>
-<scheme id="telnet" type="scheme" rfc="4248">
-  <name>Reference to interactive sessions</name>
-</scheme>
-<scheme id="wais" type="scheme" rfc="4156">
-  <name>Wide Area Information Servers</name>
-</scheme>
-<scheme id="file" type="scheme" rfc="1738" section="3.10">
-  <name>Host-specific file names</name>
-  
-  <defn section="5">
-<pre>
-fileurl = "file://" [ host | "localhost" ] "/" fpath
-</pre>
-<pre>
-fpath = fsegment *[ "/" fsegment ]
-fsegment = *[ uchar | "?" | ":" | "@" | "&amp;" | "=" ]
-</pre>
-<pre>
-safe = "$" | "-" | "_" | "." | "+"
-extra = "!" | "*" | "'" | "(" | ")" | ","
-escape = "%" hex hex
-unreserved = alpha | digit | safe | extra
-uchar = unreserved | escape
-</pre>
-</defn>
-           <complete/>
-           <dns/>
-           <prohibit component="USER" section="5"><text>
-<pre>
-fileurl = "file://" [ host | "localhost" ] "/" fpath
-</pre></text></prohibit>
-           <prohibit component="PORT" section="5"><text>
-<pre>
-fileurl = "file://" [ host | "localhost" ] "/" fpath
-</pre></text></prohibit>
-           <require component="PATH" section="5"><text>
-<pre>
-fileurl = "file://" [ host | "localhost" ] "/" fpath
-</pre></text></require>
-           <require component="AUTHORITY" section="5"><text>
-<pre>
-fileurl = "file://" [ host | "localhost" ] "/" fpath
-</pre></text></require>
-           <pattern component="PATHQUERY" reserved="~;" >[^;~]*</pattern>
-           <bad>file://user@example.org/foo/bar</bad>
-           <bad>file://eg:4029/foo/bar</bad>
-           <bad>file:/foo/bar</bad>
-           <bad>file://example.org</bad>
-           <bad>file://foo/bar;t</bad>
-           <bad>file://foo/~jjc</bad>
-           <good>file:///foo/b</good>
-           <good>file:///foo/b?ar/yuk</good>
-</scheme>
-<scheme id="prospero" type="scheme" rfc="4157">
-  <name>Prospero Directory Service</name>
-</scheme>
-
-<scheme id="gopher" type="scheme" rfc="4266">
-  <name>The gopher URI scheme</name>
-</scheme>
-<scheme id="z39.50s" type="scheme" rfc="2056">
-  <name>Z39.50 Session</name>
-</scheme>
-<scheme id="z39.50r" type="scheme" rfc="2056">
-  <name>Z39.50 Retrieval</name>
-</scheme>
-<scheme id="cid" type="scheme" rfc="2392">
-  <name>content identifier</name>
-</scheme>
-<scheme id="mid" type="scheme" rfc="2392">
-  <name>message identifier</name>
-</scheme>
-<scheme id="vemmi" type="scheme" rfc="2122">
-  <name>versatile multimedia interface</name>
-</scheme>
-<scheme id="service" type="scheme" rfc="2609">
-  <name>service location</name>
-</scheme>
-<scheme id="imap" type="scheme" rfc="2192">
-  <name>internet message access protocol</name>
-</scheme>
-<scheme id="nfs" type="scheme" rfc="2224">
-  <name>network file system protocol</name>
-</scheme>
-<scheme id="acap" type="scheme" rfc="2244">
-  <name>application configuration access protocol</name>
-</scheme>
-<scheme id="rtsp" type="scheme" rfc="2326">
-  <name>real time streaming protocol</name>
-</scheme>
-<scheme id="tip" type="scheme" rfc="2371">
-  <name>Transaction Internet Protocol</name>
-</scheme>
-<scheme id="pop" type="scheme" rfc="2384">
-  <name>Post Office Protocol v3</name>
-</scheme>
-<scheme id="data" type="scheme" rfc="2397">
-  <name>data</name>
-</scheme>
-<scheme id="dav" type="scheme" rfc="2518">
-  <name>dav</name>
-</scheme>
-<scheme id="opaquelocktoken" type="scheme" rfc="2518">
-  <name>opaquelocktoken</name>
-</scheme>
-<scheme id="sip" type="scheme" rfc="3261">
-  <name>session initiation protocol</name>
-</scheme>
-<scheme id="sips" type="scheme" rfc="3261">
-  <name>secure session intitiaion protocol</name>
-</scheme>
-<scheme id="tel" type="scheme" rfc="2806">
-  <name>telephone</name>
-</scheme>
-<scheme id="fax" type="scheme" rfc="2806">
-  <name>fax</name>
-</scheme>
-<scheme id="modem" type="scheme" rfc="2806">
-  <name>modem</name>
-</scheme>
-<scheme id="soap.beep" type="scheme" rfc="3288">
-  <name>soap.beep</name>
-</scheme>
-<scheme id="soap.beeps" type="scheme" rfc="3288">
-  <name>soap.beeps</name>
-</scheme>
-<scheme id="xmlrpc.beep" type="scheme" rfc="3529">
-  <name>xmlrpc.beep</name>
-</scheme>
-<scheme id="xmlrpc.beeps" type="scheme" rfc="3529">
-  <name>xmlrpc.beeps</name>
-</scheme>
-<scheme id="urn" type="scheme" rfc="2141">
-  <name>Uniform Resource Names</name>
-  <defn section="2">
-   All URNs have the following syntax (phrases enclosed in quotes are REQUIRED):
-<pre>
-&lt;URN> ::= "urn:" &lt;NID> ":" &lt;NSS>
-</pre>
-</defn>
-<defn section="2.1">
-<pre>
-&lt;NID>         ::= &lt;let-num> [ 1,31&lt;let-num-hyp> ]
-
-&lt;let-num-hyp> ::= &lt;upper> | &lt;lower> | &lt;number> | "-"
-
-&lt;let-num>     ::= &lt;upper> | &lt;lower> | &lt;number>
-</pre>
-</defn>
-<defn section="2.2">
-<pre>
-&lt;NSS>         ::= 1*&lt;URN chars>
-
-&lt;URN chars>   ::= &lt;trans> | "%" &lt;hex> &lt;hex>
-
-&lt;trans>       ::= &lt;upper> | &lt;lower> | &lt;number> | &lt;other> | &lt;reserved>
-
-&lt;other>       ::= "(" | ")" | "+" | "," | "-" | "." |
-                  ":" | "=" | "@" | ";" | "$" |
-                  "_" | "!" | "*" | "'"
-</pre>
-</defn>
-<defn section="2.3.2">
-RFC 1630 [2] reserves the characters "/", "?", and "#" for particular purposes. 
-The URN-WG has not yet debated the applicability and precise semantics of those 
-purposes as applied to URNs. Therefore, these characters are RESERVED for future 
-developments. Namespace developers SHOULD NOT use these characters in unencoded form, 
-but rather use the appropriate %-encoding for each character.
-</defn>
-           <prohibit component="AUTHORITY">
-           <text section="2">
-<pre>
-&lt;URN> ::= "urn:" &lt;NID> ":" &lt;NSS>
-</pre>
-</text>
-<text section="2.1">
-<pre>
-&lt;NID>         ::= &lt;let-num> [ 1,31&lt;let-num-hyp> ]
-</pre>
-</text></prohibit>
-
-           <prohibit component="QUERY" section="2.3.2"/>
-           <require component="PATH">
-           <text section="2">
-<pre>
-&lt;URN> ::= "urn:" &lt;NID> ":" &lt;NSS>
-</pre>
-</text></require>
-           
-           <pattern component="PATH" reserved="/~">(?![uU][rR][nN]:)[a-zA-Z0-9][-a-zA-Z0-9]{1,31}:[^/~]+</pattern>
-           <good>urn:x-hp:foo<unicode>00E9</unicode></good>
-           <bad>urn:x-hp:foo/bar</bad>
-           <bad>urn:urn:foo</bad>
-           <good>urn:urn-1:foo</good>
-           <bad>urn://foo</bad>
-           <bad>urn:foo:bar?query</bad>
-           <bad>urn:foo:ff~</bad>
-           <todo>case of NIS</todo>
-           <todo>
-           registry of URNs, implement something of the NSS with Namespace specific rules.
-           </todo>
-           <todo>
- To avoid confusion with the "urn:" identifier, the NID "urn" is reserved and MUST NOT be used.
- </todo>
- <todo>e-mail about frags in URNs</todo>
-           <todo>
-In addition, octet 0 (0 hex) should NEVER be used, in either unencoded or %-encoded form.           
-           </todo>
-</scheme>
-<scheme id="go" type="scheme" rfc="3368">
-  <name>go</name>
-</scheme>
-<scheme id="h323" type="scheme" rfc="3508">
-  <name>H.323</name>
-</scheme>
-<scheme id="ipp" type="scheme" rfc="3510">
-  <name>Internet Printing Protocol</name>
-</scheme>
-<scheme id="tftp" type="scheme" rfc="3617">
-  <name>Trivial File Transfer Protocol</name>
-</scheme>
-<scheme id="mupdate" type="scheme" rfc="3656">
-  <name>Mailbox Update (MUPDATE) Protocol</name>
-</scheme>
-<scheme id="pres" type="scheme" rfc="3859">
-  <name>Presence</name>
-</scheme>
-<scheme id="im" type="scheme" rfc="3860">
-  <name>Instant Messaging</name>
-</scheme>
-<scheme id="mtqp" type="scheme" rfc="3887">
-  <name>Message Tracking Query Protocol</name>
-</scheme>
-<scheme id="iris.beep" type="scheme" rfc="3983">
-  <name>iris.beep</name>
-</scheme>
-<scheme id="dict" type="scheme" rfc="2229">
-  <name>dictionary service protocol</name>
-</scheme>
-<scheme id="snmp" type="scheme" rfc="4088">
-  <name>Simple Network Management Protocol</name>
-</scheme>
-<scheme id="crid" type="scheme" rfc="4078">
-  <name>TV-Anytime Content Reference Identifier</name>
-</scheme>
-<scheme id="tag" type="scheme" rfc="4151">
-  <name>tag</name>
-</scheme>
-
-<scheme id="afs" type="scheme" href="http://www.iana.org/assignments/uri-schemes">
-  <name>Andrew File System global file names</name>
-</scheme>
-
-<scheme id="tn3270" type="scheme" href="http://www.iana.org/assignments/uri-schemes">
-  <name>Interactive 3270 emulation sessions</name>
-</scheme>
-
-
-<scheme id="mailserver" type="scheme" href="http://www.iana.org/assignments/uri-schemes">
-  <name>Access to data available from mail servers</name>
-</scheme>
-
-
-<scheme id="dns" type="scheme" href="http://www.iana.org/assignments/uri-schemes">
-  <name>Domain Name System</name>
-</scheme>
-
-<scheme id="info" type="scheme" href="http://www.iana.org/assignments/uri-schemes">
-  <name>Information Assets with Identifiers in Public Namespaces</name>
-</scheme>
-
-<scheme id="ldap" type="scheme" href="http://www.iana.org/assignments/uri-schemes">
-  <name>Lightweight Directory Access Protocol</name>
-</scheme>
-        
-	<violation>
-		<name>ILLEGAL_CHARACTER</name> 
-	
-	    <description>
-		    The character violates the grammar rules for URIs/IRIs.
-	    </description>
-	    
-	    <also ref="URI" fragment="page-49"/>
-	    <also ref="IRI" section="2.2"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>ht$tp://example.org/foo</bad>
-	</violation>
-	<!--
-    <violation>
-	    <name>RELATIVE_URI</name>
-	    <description>
-		    The IRI is relative not absolute.
-	    </description>
-	    <spec ref="RDF">
-		    <text>representing an <em>absolute URI</em> with optional fragment identifier</text>
-	    </spec>
-	    <bad>foo/bar</bad>
-	    <bad>#frag</bad>
-	    <bad>//example.org/foo/bar#frag</bad>
-    </violation>
-    -->
-    <violation>
-	    <name>PERCENT_ENCODING_SHOULD_BE_UPPERCASE</name>
-	    <minting/>
-	    <description>
-		   Percent-escape sequences should use uppercase.
-	    </description>
-	    <spec ref="URI">
-	    <text section="2.1">
-             URI producers and normalizers should use <em>uppercase</em>
-	     hexadecimal digits for all percent-encodings.
-            </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://example.org/foo%c3%80</bad>
-    </violation>
-        <violation>
-	    <name>SUPERFLUOUS_NON_ASCII_PERCENT_ENCODING</name>
-	    <unimplemented/>
-	    <minting/>
-	    <description>
-		   Percent-escape sequences should not be used unnecessarily.
-	    </description>
-	    <spec ref="IRI">
-	          <text section="3.2">
-			   URI-to-IRI conversion removes percent-encodings
-                  </text>
-	    </spec>
-	    <comment>The IRI specification only weakly suggests that
-		    Unicode characters should be used in preference
-		    to percent encodings.</comment>
-	    <bad>http://example.org/foo%C3%A9r</bad>
-    </violation>
-        <violation>
-	    <name>SUPERFLUOUS_ASCII_PERCENT_ENCODING</name>
-	    <unimplemented/>
-	    <minting/>
-	    <description>
-		   Percent-escape sequences should not be used unnecessarily.
-	    </description>
-	    <spec ref="URI">
-	          <text section="2.3">
-			  For consistency, percent-encoded octets in the
-			  ranges of ALPHA 
-			  (%41-%5A and %61-%7A), DIGIT (%30-%39), hyphen
-			  (%2D), period (%2E), underscore (%5F), or tilde
-			  (%7E) should not be created by URI producers
-                  </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://example.org/foo%5Fb%61r</bad>
-    </violation>
-    
-    <violation>
-	    <name>UNWISE_CHARACTER</name>
-	
-            <minting/>
-            
-	    <description>
-		    The character matches no grammar rules of URIs/IRIs.
-		    These characters are permitted in RDF URI References,
-		    XML system identifiers, and XML Schema anyURIs.
-	    </description>
-            
-            <comment>Whitespace is dealt with separately.</comment>
-
-	    <see>IRIFactory#allowUnwiseCharacters</see>
-            <see>#WHITESPACE</see>
-            <see>#DOUBLE_WHITESPACE</see>
-	    <spec ref="IRI">
-             <text fragment="page-13">
-              Systems accepting IRIs MAY also deal with the printable characters in US-ASCII 
-              that are not allowed in URIs, namely "&lt;", ">", '"', space, "{", "}", "|", "\", 
-              "^", and "`", in step 2 above. If these characters are found but are not converted, 
-              then the conversion SHOULD fail. 
-             </text>
-            </spec>
-	    <also ref="URI" fragment="page-49"/>
-	    <bad>http://example.org/fo|o</bad>
-	    <bad>http://example.org/fo&lt;o</bad>
-	    <bad>http://example.org/fo>o</bad>
-	    <bad>http://example.org/fo"o</bad>
-	    <bad>http://example.org/fo`o</bad>
-    </violation>
-    
-    
-    <violation>
-	    <name>CONTROL_CHARACTER</name>
-            
-	    <description>
-		    Control characters are not allowed in URIs or RDF URI References.
-	    </description>
-
-            <spec ref="RDF">
-               <text>
-               A URI reference within an RDF graph (an RDF URI reference) is a Unicode string [UNICODE] that:
-<ul>
-<li>
-     does not contain any control characters ( #x00 - #x1F, #x7F-#x9F)
-</li>
-</ul>
-               </text>
-            </spec>
-            <spec ref="IRI">
-              <text>
-<pre>
-ucschar = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF
-        / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD
-        / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD
-        / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD
-        / %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD
-        / %xD0000-DFFFD / %xE1000-EFFFD
-</pre>
-             </text>
-            </spec>
-	    <also ref="URI"/>
-	    <bad>http://example.org/fo<unicode>007F</unicode>o</bad>
-	    <bad>http://example.org/fo<unicode>0085</unicode>o</bad>
-	    <bad>http://example.org/fo<unicode>0009</unicode>o</bad>
-	    <bad>http://example.org/fo<unicode>0001</unicode>o</bad>
-    </violation>
-    
-    <violation>
-	    <name>NON_XML_CHARACTER</name> 
-	    <description>
-		    The character is not legal in XML.
-	    </description>
-	    
-	    <spec ref="XML">
-		    <text fragment="NT-Char"> 
-Char ::=   #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
-	            </text>
-	    </spec>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://example.org/foo<unicode>0001</unicode></bad>
-    </violation>
-    <violation>
-	    <name>DISCOURAGED_XML_CHARACTER</name> 
-	    <minting/>
-	    <description>
-		    The character is discouraged in XML documents.
-	    </description>
-	    
-	    <spec ref="XML">
-		    <text fragment="char32"> 
-Document authors are encouraged to avoid "compatibility characters", as defined in 
-section 6.8 of [Unicode] (see also D21 in section 3.6 of [Unicode3]). The characters 
-defined in the following ranges are also discouraged. They are either control 
-characters or permanently undefined Unicode characters: [#x7F-#x84], [#x86-#x9F], 
-[#xFDD0-#xFDDF],
-	            </text>
-	    </spec>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://example.org/foo<unicode>0080</unicode></bad>
-    </violation>
-    <violation>
-	    <name>NON_INITIAL_DOT_SEGMENT</name>
-	    <minting/>
-	    <security/>
-	    <description>
-		    The path contains a segment /../ not at the beginning
-		    of a relative reference, or it contains a /./ 
-		    These should be removed.
-	    </description>
-	    <spec ref="URI">
-	    <text section="6.2.2.3">
-		    The complete path segments "." and ".." are intended <em>only</em> for use within relative references 
-            </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://example.org/../foo</bad>
-	    <bad>http://example.org/foo/../foo</bad>
-	    <bad>http://example.org/foo/..</bad>
-	    <bad>http://example.org/foo/./foo</bad>
-	    <bad>http://example.org/./foo</bad>
-	    <bad>http://example.org/foo/.</bad>
-    </violation>
-   
-    <violation>
-	    <name>EMPTY_SCHEME</name>
-	    <description>
-		    The scheme component is empty.
-	    </description>
-	    
-	    <spec ref="URI">
-		    <text section="3.1"> Scheme names consist of a sequence of characters <em>beginning 
-				    with a letter</em> and followed by any combination of letters, 
-			    digits, plus ("+"), period ("."), or hyphen ("-"). </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>://example.org/foo</bad>
-    </violation>
-
-    <violation>
-	    <name>SCHEME_MUST_START_WITH_LETTER</name> 
-	    <description>
-		    The scheme component must start with a letter.
-	    </description>
-	    
-	    <spec ref="URI">
-		    <text section="3.1"> Scheme names consist of a sequence of characters <em>beginning 
-			    with a letter</em> and followed by any combination of letters, 
-			    digits, plus ("+"), period ("."), or hyphen ("-"). </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>007://example.org/foo</bad>
-    </violation>
-    <violation>
-	    <name>LOWERCASE_PREFERRED</name> 
-	    <minting/>
-	    <description>lowercase is preferred in this component</description>
-	    <spec ref="URI">
-		    <text section="3.1" component="SCHEME">An implementation should accept uppercase letters as equivalent to lowercase in scheme names (e.g., allow "HTTP" as well as "http") for the sake of robustness but should only produce lowercase scheme names for consistency. </text>
-		    <text section="3.2.2" component="HOST">
-			    Although host is case-insensitive, producers and normalizers should use <em>lowercase for registered names</em> and hexadecimal addresses for the sake of uniformity, while only using uppercase letters for percent-encodings.
-	            </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>HTTP://example.org/foo</bad>
-	    <bad>http://eXamPle.org/foo</bad>
-    </violation>
-    <violation>
-	    <name>PORT_SHOULD_NOT_BE_EMPTY</name>
-	    <minting/>
-	    <description>The colon introducing an empty port component should be omitted entirely,
-	    or a port number should be specified.</description>
-	    <spec ref="URI">
-		    <text section="3.2.2">
-			    URI producers and normalizers should omit the port component <em>and its ":" delimiter</em> if port is empty 
-	            </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://example.org:/foo</bad>
-    </violation>
-    <violation>
-	    <name>DEFAULT_PORT_SHOULD_BE_OMITTED</name>
-	    <minting/>
-	    <description>If the port is the default one for the scheme it should be omitted.
-	    </description>
-	    <spec ref="URI">
-		    <text section="3.2.2">
-			    URI producers and normalizers should omit the port component and its ":" delimiter if port is empty  or if its value would be the <em>same as that of the scheme's default.</em> 
-	            </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://example.org:80/foo</bad>
-    </violation>
-    <violation>
-	    <name>PORT_SHOULD_NOT_BE_WELL_KNOWN</name>
-	    <security/>
-	    <description>
-		    Ports under 1024 should be accessed
-		    using the appropriate scheme name.
-	    </description>
-	    <spec ref="URI">
-		    <text section="7.2">
-			    Applications should prevent dereference of a URI that specifies a TCP port number within the "well-known port" range <em>(0 - 1023)</em> unless the protocol being used to dereference that URI is compatible with the protocol expected on that well-known port.
-	            </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://example.org:180/foo</bad>
-    </violation>
-
-    <violation>
-	    <name>PORT_SHOULD_NOT_START_IN_ZERO</name>
-	    <minting/>
-	    <description>Leading zeros in the port number should be omitted.
-		    This is an added feature of this implementation,
-			    not mandated by any standard.
-	    </description>
-	    <also ref="URI"/>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://example.org:08080/foo</bad>
-    </violation>
-<!--
-    <violation><name>IRI_CHARACTER</name> 
-	    <description>
-		Non-ASCII characters are not permitted in URIs.
-	    </description>
-	    <spec ref="URI">
-		    <text section="1.3">
-		     This specification uses the Augmented Backus-Naur Form (ABNF) notation of [RFC2234], including the following core ABNF syntax rules defined by that specification: ALPHA (letters), CR (carriage return), DIGIT (decimal digits), DQUOTE (double quote), HEXDIG (hexadecimal digits), LF (line feed), and SP (space).
-	     </text>
-		    <text section="2">
-			     The ABNF notation defines its terminal values to be non-negative integers (codepoints) based on the US-ASCII coded character set [ASCII]. 
-	            </text>
-	    </spec>
-	    <bad>http://example.org/André</bad>
-    </violation>
--->
-    <violation>
-	    <name>BIDI_FORMATTING_CHARACTER</name>
-            <unimplemented/>
-            <description>A prohibited bi-directional control character was found.</description>
-	    <spec ref="IRI">
-		    <text section="4.1">
-			     IRIs MUST NOT contain bidirectional formatting characters (LRM, RLM, LRE, RLE, LRO, RLO, and PDF). 
-	     </text>
-	    </spec>
-	    <bad>http://example.org/Andr<unicode>202A</unicode>bar</bad>
-	    <bad>http://example.org/Andr<unicode>202B</unicode>bar</bad>
-	    <bad>http://example.org/Andr<unicode>202C</unicode>bar</bad>
-	    <bad>http://example.org/Andr<unicode>202D</unicode>bar</bad>
-	    <bad>http://example.org/Andr<unicode>202E</unicode>bar</bad>
-	    <bad>http://example.org/Andr<unicode>200E</unicode>bar</bad>
-	    <bad>http://example.org/Andr<unicode>200F</unicode>bar</bad>
-    </violation>
-
-    <violation>
-	    <name>WHITESPACE</name>
-
-	    <description>
-A single whitespace character.
-These match no grammar rules of URIs/IRIs.
-		    These characters are permitted in RDF URI References,
-		    XML system identifiers, and XML Schema anyURIs.
-	    </description>
-
-	    <see>IRIFactory#allowUnwiseCharacters</see>
-            
-            <see>#NOT_XML_SCHEMA_WHITESPACE</see>
-            <see>#UNWISE_CHARACTER</see>
-            <see>#DOUBLE_WHITESPACE</see>
-	    <also ref="URI"/>
-	    <also ref="IRI"/>
-
-	    <bad>http://example.org/ foo</bad>
-	    <bad>file:///Program Files</bad>
-    </violation>
-    
-    <violation>
-	    <name>DOUBLE_WHITESPACE</name>
-
-	    <description>
-Either two or more consecutive whitespace characters, or leading or trailing whitespace.
-
-These match no grammar rules of URIs/IRIs.
-These characters are permitted in RDF URI References,
-XML system identifiers, but not XML Schema anyURIs.
-	    </description>
-
-	    <see>IRIFactory#allowUnwiseCharacters</see>
-            <see>#NOT_XML_SCHEMA_WHITESPACE</see>
-            <see>#UNWISE_CHARACTER</see>
-            <see>#WHITESPACE</see>
-	    <also ref="URI"/>
-	    <also ref="IRI"/>
-            <also ref="Schema"/>
-
-	    <bad>http://example.org/  foo</bad>
-	    <bad>file:///Program  Files</bad>
-	    <bad>file:///TabBar </bad>
-	    <bad> rel-with-initial-space</bad>
-    </violation>
-
-    <violation>
-	    <name>NOT_XML_SCHEMA_WHITESPACE</name>
-
-	    <description>
-Whitespace characters 
-		    match no grammar rules of URIs/IRIs.
-		    These characters are permitted in RDF URI References,
-	and	    XML system identifiers.
-	However, tab and new line characters, and consecutive space characters
-	cannot occur in XML Schema anyURIs.
-	    </description>
-
-	    <see>IRIFactory#allowUnwiseCharacters</see>
-            <see>#DOUBLE_WHITESPACE</see>
-            <see>#WHITESPACE</see>
-            
-	    <also ref="URI"/>
-	    <also ref="IRI"/>
-	    <spec ref="Schema">
-<text fragment="schema">
-<pre>
-&lt;xs:simpleType name=&quot;anyURI&quot; id=&quot;anyURI&quot;&gt;
-		    [...]
-    &lt;xs:restriction base=&quot;xs:anySimpleType&quot;&gt;
-      &lt;xs:whiteSpace fixed=&quot;true&quot; value=&quot;collapse&quot; id=&quot;anyURI.whiteSpace&quot;/&gt;
-
-    &lt;/xs:restriction&gt;
-&lt;/xs:simpleType&gt;
-</pre>
-  </text>
-            </spec>
-
-	    <bad>file:///Tab<unicode>0009</unicode>Bar</bad>
-	    <bad>file:///Tab<unicode>000A</unicode>Bar</bad>
-	    <bad>file:///Tab<unicode>000D</unicode>Bar</bad>
-    </violation>
-
-    <violation>
-	    <name>DOUBLE_DASH_IN_REG_NAME</name>
-	    <internal/>
-	    <bad>http://foo--bar//</bad>
-    </violation>
-    
-    
-    <violation>
-	    <name>SCHEME_INCLUDES_DASH</name>
-	    <internal/>
-	    <bad>ht-tp://foo.bar//</bad>
-	    <bad>-http://foo.bar//</bad>
-	    <bad>http-://foo.bar//</bad>
-    </violation>
-    
-    
-    <violation>
-	    <name>NON_URI_CHARACTER</name>
-	    <internal/>
-	    <bad>http://foo-bar//&#x333;a</bad>
-	    <bad>http://foo-b&#x333;ar//</bad>
-    </violation>
-    
-    
-    <violation>
-	    <name>PERCENT_20</name>
-	    <internal/>
-	    <bad>http://foo-bar//%20a</bad>
-    </violation>
-    
-    
-    <violation>
-	    <name>PERCENT</name>
-	    <internal/>
-	    <bad>http://foo-bar//%AAa</bad>
-    </violation>
-
-    <violation>
-	    <name>IP_V6_OR_FUTURE_ADDRESS_SYNTAX</name>
-	    <description>
-		    A syntax violation was detected in an IP V6 (or future) address.
-	    </description>
-	    <spec ref="URI">
-		    <text section="3.2.2">
-			    <pre>
-IP-literal  = "[" ( IPv6address / IPvFuture  ) "]"
-IPvFuture   = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
-IPv6address =  6( h16 ":" ) ls32
-            /                       "::" 5( h16 ":" ) ls32
-            / [               h16 ] "::" 4( h16 ":" ) ls32
-            / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
-            / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
-            / [ *3( h16 ":" ) h16 ] "::"    h16 ":"   ls32
-            / [ *4( h16 ":" ) h16 ] "::"              ls32
-            / [ *5( h16 ":" ) h16 ] "::"              h16
-            / [ *6( h16 ":" ) h16 ] "::"
-
-ls32        = ( h16 ":" h16 ) / IPv4address
-                  ; least-significant 32 bits of address
-h16         = 1*4HEXDIG 
-		  ; 16 bits of address represented in hexadecimal
-</pre>
-	            </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://[/</bad>
-	    <bad>ldap://[20015:db8::7]/c=GB?objectClass?one</bad>
-	    <bad>ldap://[2001:db8:::7]/c=GB?objectClass?one</bad>
-    </violation>
-
-    <violation>
-	    <name>IPv6ADDRESS_SHOULD_BE_LOWERCASE</name>
-	    <minting/>
-	    <description>
-	IP version 6 addresses should use lowercase hexadecimal
-	    </description>
-	    <spec ref="URI">
-		    <text section="3.2.2">
-			    Although host is case-insensitive, producers and normalizers 
-			    <em>should use lowercase</em> for registered names and <em>hexadecimal addresses</em> for the sake of uniformity
-		    </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>ldap://[2001:Db8::7]/c=GB?objectClass?one</bad>
-	    <bad>ldap://[2001:dB8::7]/c=GB?objectClass?one</bad>
-    </violation>
-
-    <!--
-      RFC 1123 sec 2.1 chnages this.
-    <violation>
-	    <name>IP_V4_HAS_FOUR_COMPONENTS</name>
-	    <description>
-		    A host entry is entirely numeric but does not have
-		    four components like an IP version 4 address.
-	    </description>
-	    <spec ref="URI">
-		    <text section="3.2.2">
-			    A host identified by an IPv4 literal address is represented in dotted-decimal notation (a sequence of <em>four decimal numbers</em> in the range 0 to 255, separated by "."),
-		    </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>ldap://30.55.102/c=GB?objectClass?one</bad>
-	    <bad>ldap://20.20.20.20.20/c=GB?objectClass?one</bad>
-    </violation>
-    -->
-
-    <violation>
-	    <name>IP_V4_OCTET_RANGE</name>
-	    <description>
-		    A host entry consists of four numbers,
-		    but they are not in the range 0-255, or have leading zeros.
-	    </description>
-	    <spec ref="URI">
-		    <text section="3.2.2">
-			    A host identified by an IPv4 literal address is represented in dotted-decimal notation (a sequence of <em>four decimal numbers</em> in the range <em>0 to 255</em>, separated by "."),
-		    </text>
-		    <text section="3.2.2">
-			    <pre>
-dec-octet   = DIGIT                 ; 0-9
-            / %x31-39 DIGIT         ; 10-99
-            / "1" 2DIGIT            ; 100-199
-            / "2" %x30-34 DIGIT     ; 200-249
-            / "25" %x30-35          ; 250-255
-</pre>
-		    </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>ldap://155.00.55.102/c=GB?objectClass?one</bad>
-	    <bad>ldap://20.256.20.20/c=GB?objectClass?one</bad>
-	    <bad>ldap://20.1000.20.20/c=GB?objectClass?one</bad>
-	    <bad>ldap://20.010.20.20/c=GB?objectClass?one</bad>
-    </violation>
-    <violation>
-	    <name>NOT_DNS_NAME</name>
-	    <dns/>
-	    <description>
-		    The host component did not meet the restrictions on DNS names.
-	    </description>
-	    <spec ref="URI">
-		    <text section="3.2.2">
-			    URI producers should use names that <em>conform to the DNS syntax</em>, even when use of DNS is not immediately apparent, and should limit these names to no more than 255 characters in length.
-		    </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>ldap://foo$/c=GB?objectClass?one</bad>
-	    <bad>http://foo.example.$org/</bad>
-    </violation>
-    <violation>
-	    <name>USE_PUNYCODE_NOT_PERCENTS</name>
-	    <minting/>
-	    <dns/>
-	    <description>
-		    The host component used percent encoding, where punycode is preferred.
-	    </description>
-	    <spec ref="URI">
-		    <text section="3.2.2">
-URI producers should provide these registered names in the IDNA encoding, rather than a percent-encoding, if they wish to maximize interoperability with legacy URI resolvers.
-		    </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>ftp://andr%C3%A9.example.org/</bad>
-    </violation>
-    <violation>
-	    <name>ILLEGAL_PERCENT_ENCODING</name>
-	    <description>
-		    The host component a percent occurred without two following hexadecimal digits.
-	    </description>
-	    <spec ref="URI">
-		    <text section="2.1">
-			     A percent-encoded octet is encoded as a character triplet, consisting of the percent character "%" followed by the two hexadecimal digits representing that octet's numeric value. 
-		    </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>ftp://andr%%A9.example.org/</bad>
-	    <bad>ftp://andr%.example.org/</bad>
-	    <bad>ftp://andre.example.org/%</bad>
-	    <bad>ftp://andre.example.org/%A</bad>
-	    <bad>ftp://andre.example.org/%A?</bad>
-	    <bad>ftp://andre.example.org/%A#</bad>
-    </violation>
-    <violation>
-	    <name>ACE_PREFIX</name>
-	    <internal/>
-    </violation>
-    <!--
-    <violation>
-	    <name>HAS_SURROGATE</name>
-	    <internal/>
-	    <bad>http:/foo/p<unicode>D800</unicode><unicode>DF02</unicode></bad>
-    </violation>
-    -->
-    <violation>
-	    <name>LONE_SURROGATE</name>
-	    <description>
-		    A unicode surrogate character that is not of a surrogate pair.
-	    </description>
-	    <bad>http:/foo/p<unicode>D800</unicode></bad>
-    </violation>
-    <violation><name>DNS_LABEL_DASH_START_OR_END</name> 
-	    <dns/>
-	    <description>
-		    A DNS name had a - at the beginning or end.
-	    </description>
-	    <spec ref="URI">
-		    <text section="3.2.2">
-			     Such a name consists of a sequence of domain labels separated by ".", each domain label starting and ending with an alphanumeric character and possibly also containing "-" characters. 
-		    </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>ldap://-foo/c=GB?objectClass?one</bad>
-	    <bad>http://foo.example.org-/</bad>
-	    <bad>http://foo.example.org--/</bad>
-	    <bad>http://--foo.example.org/</bad>
-	    <bad>http://-fo-o.example.org/</bad>
-    </violation>
-    <violation>
-	    <name>BAD_IDN_UNASSIGNED_CHARS</name> 
-	    <minting/>
-	    <description>
-		    Characters used in the IRI were unassigned in the version of Unicode known
-                    by this system. They may have been assigned since.
-	    </description>
-	    <spec ref="URI">
-		    <text section="3.2.2">
-			    When a non-ASCII registered name represents an internationalized domain name intended for resolution via the DNS, the name must be transformed to the IDNA encoding [RFC3490] prior to name lookup.  URI producers should provide these registered names in the IDNA encoding, rather than a percent-encoding, if they wish to maximize interoperability with legacy URI resolvers.
-		    </text>
-	    </spec>
-	    <spec ref="IRI">
-		    <text section="3.1">
-			    Replace the ireg-name part of the IRI by the part converted using the ToASCII operation specified in section 4.1 of [RFC3490] on each dot-separated label, and by using U+002E (FULL STOP) as a label separator, with the flag UseSTD3ASCIIRules set to TRUE, and with the flag AllowUnassigned set to FALSE for creating IRIs and set to TRUE otherwise.
-		    </text>
-	    </spec>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://foo.example<unicode>0221</unicode>.org/</bad>
-    </violation>
-    <violation>
-	    <name>BAD_IDN</name> 
-	    <description>
-		    The Internationalized Domain Name check failed.
-	    </description>
-	    <spec ref="URI">
-		    <text section="3.2.2">
-			    When a non-ASCII registered name represents an internationalized domain name intended for resolution via the DNS, the name must be transformed to the IDNA encoding [RFC3490] prior to name lookup.  URI producers should provide these registered names in the IDNA encoding, rather than a percent-encoding, if they wish to maximize interoperability with legacy URI resolvers.
-		    </text>
-	    </spec>
-	    <spec ref="IRI">
-		    <text section="3.1">
-			    Replace the ireg-name part of the IRI by the part converted using the ToASCII operation specified in section 4.1 of [RFC3490] on each dot-separated label, and by using U+002E (FULL STOP) as a label separator, with the flag UseSTD3ASCIIRules set to TRUE, and with the flag AllowUnassigned set to FALSE for creating IRIs and set to TRUE otherwise.
-		    </text>
-	    </spec>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://--foo.example.org/</bad>
-	    <bad>http://xn--andr--ep-.example.org/</bad>
-	    <!-- icu4j and jdk seem to think these shouldn't explode -->
-	    <!-- REMOVE !! bits to uncomment
-	    <bad>http://xn-!!-andr-!!-ep.example.org/</bad>
-	    <bad>http://xn-!!-a-bpad.example.org/</bad>-->
-	    <bad>http://xn.example.<unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><un
 icode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>33
 33</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unic
 ode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><uni
 code>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>333
 3</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unico
 de><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unic
 ode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333
 </unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicod
 e><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unico
 de>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333<
 /unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode
 ><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicod
 e>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</
 unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode>
 <unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode
 >3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</u
 nicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><
 unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>
 3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</un
 icode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><u
 nicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3
 333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</uni
 code><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><un
 icode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>33
 33</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unic
 ode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><uni
 code>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>333
 3</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unico
 de><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unic
 ode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333
 </unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicod
 e><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unico
 de>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333<
 /unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode><unicode>3333</unicode>/</bad>
-    </violation>
-    <!--
-    <violation>
-	    <name>ARBITRARY_CHARACTER</name>
-	    <description>
-		    The character is not permitted in IRIs.
-	    </description>
-	    
-	    <spec ref="IRI">
-	      <text section="2.2">
-<pre>
- ucschar        = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF
-                / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD
-                / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD
-                / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD
-                / %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD
-                / %xD0000-DFFFD / %xE1000-EFFFD
-
- iprivate       = %xE000-F8FF / %xF0000-FFFFD / %x100000-10FFFD
-
-</pre>
-	     </text>
-	    </spec>
-	    <bad>http://example.org/foo<unicode>0006</unicode></bad>
-	    <bad>http://example.org/foo?<unicode>D800</unicode></bad>
-	    <bad>http://example.org/foo#<unicode>0080</unicode></bad>
-	    <bad>http://example.org<unicode>FDD5</unicode></bad>
-    </violation>
-    -->
-    <violation>
-	    <name>HAS_PASSWORD</name>
-	    <must/>
-	    <security/>
-	    <description>
-	Including passwords in URIs is deprecated.
-	    </description>
-	    <spec ref="URI">
-	    <text section="3.2.1">
-Use of the format "user:password" in the userinfo field is deprecated.		    
-	    </text>
-	    <text section="3.2.1">
-Applications may choose to ignore or reject such data when it is received as part of a reference and should reject the storage of such data in unencrypted form. The passing of authentication information in clear text has proven to be a security risk in almost every case where it has been used.
-            </text>
-	    </spec>
-	    <also ref="IRI"/>
-	    <also ref="RDF"/>
-	    <also ref="XML"/>
-	    <also ref="XLink"/>
-	    <also ref="Schema"/>
-	    <bad>http://user:pass@example.org/</bad>
-    </violation>
-    <violation>
-	    <name>DISCOURAGED_IRI_CHARACTER</name>
-            <unimplemented/>
-	    <minting/>
-	    <description>
-	Certain characters are discouraged in IRIs.
-	    </description>
-	    <comment>Implementation is very partial. The amount of guidance
-		    as to which characters to discourage is insufficient.</comment>
-	    <spec ref="IRI">
-	    <text section="6.1">
-The UCS contains many areas of characters for which there are
-strong visual look-alikes. Because of the likelihood of transcription errors, these also should be avoided. This includes the full-width equivalents of Latin characters, half-width Katakana characters for Japanese, and many others. It also includes many look-alikes of "space", "delims", and "unwise", characters excluded in [RFC3491].
-	    </text>
-	    </spec>
-	    <bad>http://example.org/<unicode>2000</unicode>en-quad</bad>
-	    <bad>http://example.org/<unicode>205F</unicode>medium-mathematical-space</bad>
-	    <bad>http://example<unicode>FF95</unicode>.org/</bad>
-	    <bad>http://example<unicode>FF47</unicode>.org/</bad>
-    </violation>
-  <!--
-FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
-FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
-FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
-FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
-FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
-FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
-FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
-FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;;
-FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;;
-FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
-FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;;
-FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
-FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;;
-FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
-FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
-FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
-FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
-FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
-FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
-FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
-FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
-FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
-FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
-FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
-FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
-FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
-FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
-FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;Y;;;;;
-FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
-FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;Y;;;;;
-FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
-FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
-FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
-FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
-FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
-FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
-FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
-FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
-FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
-FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
-FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
-FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
-FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
-FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
-FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
-FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
-FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
-FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
-FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
-FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
-FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
-FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
-FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
-FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
-FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
-FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
-FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
-FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
-FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;;
-FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
-FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;;
-FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
-FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
-FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
-FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
-FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
-FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
-FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
-FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
-FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
-FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
-FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
-FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
-FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
-FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
-FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
-FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
-FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
-FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
-FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
-FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
-FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
-FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
-FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
-FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
-FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
-FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
-FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
-FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
-FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
-FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;;
-FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
-FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;;
-FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
-FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON;<wide> 2985;;;;Y;;*;;;
-FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON;<wide> 2986;;;;Y;;*;;;
-FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
-FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;

<TRUNCATED>

[4/4] jena git commit: JENA-1647: Merge commit 'refs/pull/505/head' of https://github.com/apache/jena

Posted by an...@apache.org.
JENA-1647: Merge commit 'refs/pull/505/head' of https://github.com/apache/jena

This closes #505.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/42dc4289
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/42dc4289
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/42dc4289

Branch: refs/heads/master
Commit: 42dc4289bf97cb826301be9c3230f5208eb23ccb
Parents: 82121f9 40ededc
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Dec 10 16:55:07 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon Dec 10 16:55:07 2018 +0000

----------------------------------------------------------------------
 .../org/apache/jena/iri/ViolationCodes.java     |    8 +-
 .../java/org/apache/jena/iri/impl/viol2java.xsl |  972 ----------
 .../org/apache/jena/iri/impl/violations.dtd     |  208 ---
 .../org/apache/jena/iri/impl/violations.xml     | 1722 ------------------
 .../xml/org/apache/jena/iri/impl/violations.xml |    2 +-
 .../java/org/apache/jena/iri/Additional.java    |   20 +
 6 files changed, 27 insertions(+), 2905 deletions(-)
----------------------------------------------------------------------



[3/4] jena git commit: JENA-1647: Allow '/' and '~' in URNs

Posted by an...@apache.org.
JENA-1647: Allow '/' and '~' in URNs

Remove copies of XML files in in src/main/java


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/40ededc3
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/40ededc3
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/40ededc3

Branch: refs/heads/master
Commit: 40ededc3ce05d4b1c27b1b58ae13ad98aca74996
Parents: 31995c7
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Dec 7 11:13:38 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Dec 7 11:25:50 2018 +0000

----------------------------------------------------------------------
 .../org/apache/jena/iri/ViolationCodes.java     |    8 +-
 .../java/org/apache/jena/iri/impl/viol2java.xsl |  972 ----------
 .../org/apache/jena/iri/impl/violations.dtd     |  208 ---
 .../org/apache/jena/iri/impl/violations.xml     | 1722 ------------------
 .../xml/org/apache/jena/iri/impl/violations.xml |    2 +-
 .../java/org/apache/jena/iri/Additional.java    |   20 +
 6 files changed, 27 insertions(+), 2905 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/40ededc3/jena-iri/src/main/java/org/apache/jena/iri/ViolationCodes.java
----------------------------------------------------------------------
diff --git a/jena-iri/src/main/java/org/apache/jena/iri/ViolationCodes.java b/jena-iri/src/main/java/org/apache/jena/iri/ViolationCodes.java
index c499f79..9f6b6fc 100644
--- a/jena-iri/src/main/java/org/apache/jena/iri/ViolationCodes.java
+++ b/jena-iri/src/main/java/org/apache/jena/iri/ViolationCodes.java
@@ -759,7 +759,7 @@ but rather use the appropriate %-encoding for each character.
       The PATH component:
       <ul>
       <li>
-      is required to match the regular expression: (?![uU][rR][nN]:)[a-zA-Z0-9][-a-zA-Z0-9]{1,31}:[^/~]+
+      is required to match the regular expression: (?![uU][rR][nN]:)[a-zA-Z0-9][-a-zA-Z0-9]{1,31}:.*
       </li>
       <li>
       may use /~ as sub-delimiters, and care must
@@ -2456,7 +2456,11 @@ This class is not part of the API.
         );
     
         spec.setPattern(PATH,
-                "(?![uU][rR][nN]:)[a-zA-Z0-9][-a-zA-Z0-9]{1,31}:[^/~]+" );
+                // RFC 2141 - 
+                //"(?![uU][rR][nN]:)[a-zA-Z0-9][-a-zA-Z0-9]{1,31}:[^/~]+"
+                // RFC 8141 revision of 2141 - JENA-1647
+                "(?![uU][rR][nN]:)[a-zA-Z0-9][-a-zA-Z0-9]{1,31}:.*"
+                );
       
         spec.setReserved(PATH,"/~");
       

http://git-wip-us.apache.org/repos/asf/jena/blob/40ededc3/jena-iri/src/main/java/org/apache/jena/iri/impl/viol2java.xsl
----------------------------------------------------------------------
diff --git a/jena-iri/src/main/java/org/apache/jena/iri/impl/viol2java.xsl b/jena-iri/src/main/java/org/apache/jena/iri/impl/viol2java.xsl
deleted file mode 100644
index 4b43b90..0000000
--- a/jena-iri/src/main/java/org/apache/jena/iri/impl/viol2java.xsl
+++ /dev/null
@@ -1,972 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!-- 
-  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.
--->
- 
-
-<!--
-    Description:
-        Turns violations.xml into ViolationCodes.java.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-    <xsl:output method="text"/>
-    <xsl:template match="/">
-    
-    <!--    Extended validation -->
-    <xsl:if test="//*[@fragment][@section]">
-      <xsl:message terminate="yes">Must not have both fragment and section specified</xsl:message>
-    </xsl:if>
-    
-    <xsl:for-each select="//text[@component]">
-      <xsl:variable name="t" select="."/>
-      <xsl:for-each select="preceding-sibling::text|following-sibling::text">
-          <xsl:if test="not(@component)">
-              <xsl:message terminate="yes">
-         Multiple texts must either all have components or none
-              </xsl:message>
-          </xsl:if>
-          <xsl:if test="@component = $t/@component">
-              <xsl:message terminate="yes">
-         Multiple texts must refer to different components
-              </xsl:message>
-          </xsl:if>
-      </xsl:for-each>
-    </xsl:for-each>
-    
-    <!--    End Extended validation -->
-    
-/*
- * 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.
- */  
-
- /*
- AUTOGENERATED FILE: DO NOT EDIT
- */
-
-package com.hp.hpl.jena.iri;
-
-import com.hp.hpl.jena.iri.impl.ViolationCodeInfo;
-
-import com.hp.hpl.jena.iri.impl.ViolationCodeInfo.InSpec;
-import com.hp.hpl.jena.iri.impl.ViolationCodeInfo.FromSpec_iri;
-import com.hp.hpl.jena.iri.impl.ViolationCodeInfo.FromSpec_other;
-import com.hp.hpl.jena.iri.impl.ViolationCodeInfo.FromSpec_scheme;
-import com.hp.hpl.jena.iri.impl.ViolationCodeInfo.FromAlso;
-import com.hp.hpl.jena.iri.impl.Specification;
-import com.hp.hpl.jena.iri.impl.SchemeSpecification;
-import com.hp.hpl.jena.iri.impl.Force;
- 
-/**
- * Detailed description of problems detected.
- * This interface lists the codes returned by 
- * {@link Violation#getViolationCode()}.
- * Note: not all are errors, some merely reflect internal workings.
- 
- &lt;p>The violations are evaluated against the following standards:
- &lt;/p>
- &lt;dl>
-  <xsl:apply-templates select="descendant::specification[@type='iri']" mode="javadoc"/> 
- &lt;/dl>
- 
- &lt;p>Scheme specific checks are enabled. The syntax of the following schemes is fully supported:
- &lt;/p>
- &lt;dl>
-  <xsl:apply-templates select="descendant::scheme[complete]" mode="javadoc"/> 
- &lt;/dl>
- 
- 
- &lt;p>The syntax of the following schemes is partially supported:
- &lt;/p>
- &lt;dl>
-  <xsl:apply-templates select="descendant::scheme[not(complete)][*[not(self::name)]]" mode="javadoc"/> 
- &lt;/dl>
- 
- 
- &lt;p>The names of the following registered schemes are known, but they are otherwise unsupported:
- &lt;/p>
- &lt;dl>
-  <xsl:apply-templates select="descendant::scheme[not(complete)][not(*[not(self::name)])]" mode="javadoc"/> 
- &lt;/dl>
- 
- &lt;p>Other relevant standards include:
- &lt;/p>
- &lt;dl>
-  <xsl:apply-templates select="descendant::specification[@type='other']" mode="javadoc"/> 
- &lt;/dl>
- 
- */
-public interface ViolationCodes {
-   
-/**
-This class is not part of the API.
-*/
-   class Initialize implements IRIComponents, Force {
-   static {
-   
-   Specification spec;
-   
-   <xsl:apply-templates select="descendant::specification" mode="static"/>
-   
-   
-   <xsl:apply-templates select="descendant::scheme" mode="static"/>
-   
-   <xsl:apply-templates select="descendant::violation" mode="static"/>
-     }
-   }
-   
-   <xsl:apply-templates select="descendant::violation" mode="top"/>
-}
-    </xsl:template>
-
-    <xsl:template match="violation" mode="top">
-/**<xsl:apply-templates select="." mode="javadoc"/>
-*/
-        int <xsl:value-of select= "name"/> = <xsl:value-of select="count(preceding::violation)"/>;
-        
-    </xsl:template>
-    
-    
-    
-    <xsl:template match="violation[internal]" mode="javadoc" >
-    Internal code. This is not an error or warning condition, 
-    but is used to trigger more expensive processing.
-    </xsl:template>
-    
-    <xsl:template match="violation[description]" mode="javadoc" >
-       <xsl:value-of select="description"/>
-       
-       <xsl:apply-templates select="comment"  mode="javadoc"/>
-       
-       <xsl:apply-templates select="spec" mode="javadoc"/>
-       
-       <xsl:if test="count((spec|also)[id(@ref)/@type='iri' or id(@ref)/@type='scheme']) = 1">
-          &lt;p>This violates the &lt;a href=
-          "#ref-<xsl:value-of select="(spec[id(@ref)/@type='iri' or id(@ref)/@type='scheme']|also)/@ref"/>">[<xsl:value-of select="(spec[id(@ref)/@type='iri' or id(@ref)/@type='scheme']|also)/@ref"/>]&lt;/a>
-          specification.&lt;/p>
-       </xsl:if>
-       <xsl:if test="count((spec|also)[id(@ref)/@type='iri' or id(@ref)/@type='scheme']) > 1">
-          &lt;p>This violates the following specifications:
-          <xsl:apply-templates 
-                 select="((spec|also)[id(@ref)/@type='iri' or id(@ref)/@type='scheme'])" 
-                 mode="javadoc-spec-list"/>.
-          &lt;/p>
-       </xsl:if>
-       <xsl:if test="not((spec|also)[id(@ref)/@type='iri' or id(@ref)/@type='scheme'])">
-         &lt;p>This does not violate any of the supported IRI, URI or scheme specifications.&lt;/p>
-       </xsl:if>
-       
-       <xsl:apply-templates select="should|minting|security|dns|must" mode="javadoc"/>
-       <xsl:if test="not(must|should|minting|security)">
-         &lt;p>This violation has &lt;a href="http://www.apps.ietf.org/rfc/rfc2119.html#sec-1">MUST&lt;/a> force.&lt;/p>
-       </xsl:if>
-       
-       <xsl:if test="bad">
-        &lt;p>The following are examples of IRIs that have this violation:&lt;/p>
-        &lt;ul>
-       <xsl:apply-templates select="bad" mode="javadoc"/>
-        &lt;/ul>
-       </xsl:if>
-       
-       <xsl:if test="good">
-        &lt;p>The following are examples of IRIs that do not have this violation:&lt;/p>
-        &lt;ul>
-       <xsl:apply-templates select="good" mode="javadoc"/>
-        &lt;/ul>
-       </xsl:if>
-       
-       <xsl:if test="unimplemented">
-         &lt;p>Unimplemented.&lt;/p>
-       </xsl:if>
-       
-       <xsl:apply-templates select="see" mode="javadoc"/>
-      
-    </xsl:template>
-    
-    <xsl:template match="violation" mode="javadoc">
-       // TODO complete entry for <xsl:value-of select= "name"/>
-    </xsl:template>
-    
-    <xsl:template match="spec" mode="javadoc">
-     &lt;p>This is specified in &lt;a href="#ref-<xsl:value-of select="@ref"/>">
-     [<xsl:value-of select="@ref"/>]&lt;/a>.&lt;/p>
-     &lt;dl>
-     <xsl:apply-templates select="text"  mode="javadoc"/>
-     &lt;/dl>
-     
-    </xsl:template>
-    
-    <xsl:template match="defn[@ref]" mode="javadocDefn">
-       See &lt;a href="#ref-<xsl:value-of select="@ref"/>">
-     [<xsl:value-of select="@ref"/>]&lt;/a>, specifically,
-      <xsl:apply-templates select="." mode="javadoc-link"/>
-    </xsl:template>
-     <xsl:template match="defn[not(@ref)]" mode="javadocDefn">
-       See
-      <xsl:apply-templates select="." mode="javadoc-link"/>
-    </xsl:template>
-    
-    <xsl:template match="defn" mode="javadoc">
-      &lt;dt><xsl:apply-templates select="." mode="javadocDefn"/>
-      &lt;/dt>
-      &lt;dd><xsl:apply-templates select="node()" mode="javadoc"/>
-      &lt;/dd>
-    </xsl:template>
-    
-    <xsl:template match="text" mode="javadoc">
-     &lt;dt>
-     <xsl:if test="@component">
-       For the <xsl:value-of select="@component"/> component:
-     </xsl:if>
-       see
-     <xsl:apply-templates select="." mode="javadoc-link"/>
-     &lt;/dt>
-     &lt;dd>
-     <xsl:apply-templates select="node()" mode="javadoc"/>
-     &lt;/dd>
-    </xsl:template>
-    
-    <xsl:template match="comment" mode="javadoc">
-     &lt;p>
-     <xsl:apply-templates select="node()" mode="javadoc"/>
-     &lt;/p>
-    </xsl:template>
-    
-    
-    <xsl:template match="text()" mode="javadoc">
-       <xsl:call-template name="escape-text">
-         <xsl:with-param name="t" select="."/>
-       </xsl:call-template>
-     </xsl:template>
-     
-     <xsl:variable name="escape-text-rules">&lt;;&amp;lt;:</xsl:variable>
-    
-     <xsl:template name="escape-text">
-      <xsl:param name="t"/>
-                <xsl:call-template name="translate">
-                     <xsl:with-param name="string" select="$t"/>
-                     <xsl:with-param name="rules" select="$escape-text-rules"/>
-                </xsl:call-template>
-     </xsl:template>
-     
-    <xsl:template match="pre" mode="javadoc">
-     &lt;pre><xsl:apply-templates select="node()" mode="javadoc"/>&lt;/pre>
-    </xsl:template>
-    
-    
-    <xsl:template match="ol" mode="javadoc">
-     &lt;ol><xsl:apply-templates select="node()"  mode="javadoc"/>&lt;/ol>
-    </xsl:template>
-    
-    <xsl:template match="ul" mode="javadoc">
-     &lt;ul><xsl:apply-templates select="node()"  mode="javadoc"/>&lt;/ul>
-    </xsl:template>
-    
-    
-    <xsl:template match="li" mode="javadoc">
-     &lt;li><xsl:apply-templates select="node()" mode="javadoc"/>&lt;/li>
-    </xsl:template>
-    
-    <xsl:template match="em" mode="javadoc">
-     &lt;em><xsl:apply-templates select="node()" mode="javadoc"/>&lt;/em>
-    </xsl:template>
-    
-    
-    <xsl:template match="must" mode="javadoc">
-     &lt;p>This violation has &lt;a href="http://www.apps.ietf.org/rfc/rfc2119.html#sec-1">MUST&lt;/a> force.&lt;/p>
-    </xsl:template>
-    
-    <xsl:template match="should" mode="javadoc">
-     &lt;p>This violation has &lt;a href="http://www.apps.ietf.org/rfc/rfc2119.html#sec-1">SHOULD&lt;/a> force.
-     By default, this is treated as an error (for the relevant specs), but that behaviour can be modified by
-     {@link IRIFactory#shouldViolation}.
-     &lt;/p>
-    </xsl:template>
-    
-    
-    <xsl:template match="security" mode="javadoc">
-     &lt;p>This violation may indicate security issues, and the behaviour of a factory
-     implementing the relevant specs can be modified by
-     {@link IRIFactory#securityViolation}.
-     &lt;/p>
-    </xsl:template>
-    
-    
-    <xsl:template match="violation/dns" mode="javadoc">
-     &lt;p>This violation is relevant for IRIs using DNS as the registry of hostnames.
-     The behaviour of a factory
-     implementing the relevant specs can be modified by
-     {@link IRIFactory#dnsViolation}.
-     &lt;/p>
-    </xsl:template>
-    
-    
-    <xsl:template match="scheme/dns" mode="javadoc">
-     &lt;br/>
-     This scheme requires the use of hostnames conforming to DNS syntax.
-     The IDNA compatibile processing of IRIs for this scheme is enabled if this scheme is enabled.
-     To disable this behaviour, this scheme has to be disabled using // TODO how to disable scheme
-     and DNS compatibile rules have to be disabled using {@link IRIFactory#dnsViolation}.
-    </xsl:template>
-    
-    <xsl:template match="minting" mode="javadoc">
-     &lt;p>This violation relates to creating your own IRIs, rather than
-     accepting and processing other peoples', and the behaviour of a factory
-     implementing the relevant specs can be modified by
-     {@link IRIFactory#mintingViolation}.
-     &lt;/p>
-    </xsl:template>
-    
-    
-    <!--
-    <xsl:template match="bad|good[not(unicode)]" mode="javadoc">
-     &lt;li>&amp;lt;&lt;code><xsl:value-of select="."/>&lt;/code>>&lt;/li>
-    </xsl:template>
-    -->
-    
-    <xsl:template match="bad|good" mode="javadoc">
-     &lt;li>&amp;lt;&lt;code><xsl:apply-templates select="node()" mode="javadoc"/>&lt;/code>>&lt;/li>
-    </xsl:template>
-    
-    <xsl:template match="unicode" mode="javadoc">
-      <xsl:text>\u</xsl:text><xsl:value-of select="."/>
-    </xsl:template>
-    
-    <xsl:template match="see" mode="javadoc">
-     @see <xsl:value-of select="."/>
-    </xsl:template>
-    
-    <xsl:template match="specification|scheme" mode="javadoc">
-      &lt;dt>&lt;a name="ref-<xsl:value-of select="@id"/>">[<xsl:value-of select="@id"/>]&lt;/a>
-      <xsl:if test="@rfc">
-      RFC <xsl:value-of select="@rfc"/>
-      </xsl:if>
-      &lt;/dt>
-      &lt;dd>&lt;a href="<xsl:apply-templates select="." mode="url"/>">
-      <xsl:value-of select="name"/>
-      <xsl:if test="section or @section">
-        (section <xsl:value-of select="section|@section"/>)
-      </xsl:if>&lt;/a>
-      &lt;/dd>
-      <xsl:if test="defn">
-      &lt;dd>
-      Pertinent text from the specification includes:
-      &lt;br />
-      &lt;dl>
-      <xsl:apply-templates select="defn" mode="javadoc"/>
-      &lt;/dl>
-      &lt;/dd>
-      </xsl:if>
-      <xsl:if test="*[not(self::name) and not(self::section) and not(self::complete)]">
-      &lt;dd><xsl:apply-templates select="*[not(self::bad)][not(self::good)][not(self::defn)]" mode="javadoc"/>
-      <xsl:if test="good">
-             &lt;br/>
-             The following are examples of well-formed IRIs using this scheme:
-             &lt;ul>
-             <xsl:apply-templates select="good" mode="javadoc"/>
-             &lt;/ul>
-             </xsl:if>       
-      <xsl:if test="bad">
-             &lt;br/>
-             The following are examples of ill-formed IRIs using this scheme:
-             &lt;ul>
-             <xsl:apply-templates select="bad" mode="javadoc"/>
-             &lt;/ul>
-             </xsl:if>
-      &lt;/dd>
-      </xsl:if>
-    </xsl:template>
-    
-    <xsl:template match="name" mode="javadoc"/>
-    <xsl:template match="section" mode="javadoc"/>
-    <xsl:template match="complete" mode="javadoc"/>
-    
-    <xsl:template match="port" mode="javadoc">
-      The default port is <xsl:value-of select="."/>.&lt;br />
-    </xsl:template>
-    
-    <xsl:template match="prohibit" mode="javadoc">
-      The <xsl:value-of select="@component"/> component must be omitted.&lt;br />
-    </xsl:template>
-    
-    <xsl:template match="require" mode="javadoc">
-      The <xsl:value-of select="@component"/> component is required.&lt;br />
-    </xsl:template>
-    
-    <xsl:template match="todo" mode="javadoc">
-      <xsl:text>&lt;br/>TODO: </xsl:text>
-      <xsl:apply-templates select="node()" mode="javadoc"/>
-    </xsl:template>
-    
-    
-    <xsl:template match="pattern[text()][@reserved]" mode="javadoc">
-      The <xsl:value-of select="@component"/> component:
-      &lt;ul>
-      &lt;li>
-      is required to match the regular expression: <xsl:apply-templates mode="javadoc" select="node()"/>
-      &lt;/li>
-      &lt;li>
-      may use <xsl:value-of select="@reserved"/> as sub-delimiters, and care must
-      be taken when percent escaping or unescaping these delimiters to not disrupt
-      the scheme specific syntax.
-      &lt;/li>
-      &lt;/ul>
-    </xsl:template>
-    
-    <xsl:template match="pattern[not(text())][@reserved]" mode="javadoc">
-      The <xsl:value-of select="@component"/> component
-      may use <xsl:value-of select="@reserved"/> as sub-delimiters, and care must
-      be taken when percent escaping or unescaping these delimiters to not disrupt
-      the scheme specific syntax. &lt;br/>
-    </xsl:template>
-     
-    <xsl:template match="pattern[text()][not(@reserved)]" mode="javadoc">
-      The <xsl:value-of select="@component"/> component
-      is required to match the regular expression: <xsl:apply-templates mode="javadoc" select="node()"/>
-      &lt;br/>
-    </xsl:template>
-    
-     <xsl:template match="*[@section]" mode="javadoc-link">
-       <xsl:text>&lt;a href="</xsl:text>
-       <xsl:apply-templates select="." mode="url"/>
-       <xsl:text>">section </xsl:text>
-       <xsl:value-of select="@section"/>
-       <xsl:text>&lt;a></xsl:text>
-     </xsl:template>
-          
-     
-      <xsl:template match="*" mode="javadoc-link">
-       <xsl:text>&lt;a href="</xsl:text>
-       <xsl:apply-templates select="." mode="url"/>
-       <xsl:text>">here&lt;a></xsl:text>
-     </xsl:template>
-     
-     
-     <xsl:template match="*[@fragment]" mode="url">
-       <xsl:call-template name="bareURI"/>
-       <xsl:text>#</xsl:text>
-       <xsl:value-of select="@fragment"/>
-     </xsl:template>
-     
-     
-     <xsl:template match="*[@section]" mode="url">
-       <xsl:call-template name="bareURI"/>
-       <xsl:text>#sec-</xsl:text>
-       <xsl:value-of select="@section"/>
-     </xsl:template>
-          
-     <xsl:template match="*" mode="url">
-       <xsl:apply-templates mode="rawUrl" select="."/>
-     </xsl:template>
-     
-     <xsl:template match="*[@href]" mode="rawUrl">
-       <xsl:value-of select="@href"/>
-     </xsl:template>
-     
-     
-     <xsl:template match="*[@rfc and @rfc &gt; 4000]" mode="rawUrl">
-       <xsl:text>http://www.ietf.org/rfc/rfc</xsl:text>
-       <xsl:value-of select="@rfc"/>
-       <xsl:text>.txt</xsl:text>
-     </xsl:template>
-     
-     
-     
-     <xsl:template match="*[@rfc and @rfc &lt;= 4000]" mode="rawUrl">
-       <xsl:text>http://www.apps.ietf.org/rfc/rfc</xsl:text>
-       <xsl:value-of select="@rfc"/>
-       <xsl:text>.html</xsl:text>
-     </xsl:template>
-     
-     
-     
-     
-     <xsl:template match="*[../@ref or @ref]" mode="rawUrl">
-       <xsl:apply-templates select="id(../@ref|@ref)" mode="url" />
-     </xsl:template>
-     
-     <xsl:template match="*[../@id]" mode="rawUrl">
-       <xsl:apply-templates select=".." mode="url" />
-     </xsl:template>
-     
-     
-     <xsl:template match="require/text|prohibit/text" mode="rawUrl">
-       <xsl:apply-templates select=".." mode="url" />
-     </xsl:template>
-     
-     <!--
-     <xsl:template match="*" mode="url">
-       <xsl:message>No match.</xsl:message>
-     </xsl:template>
-     -->
-     <xsl:template name="bareURI">
-       <xsl:variable name="uriWithFrag">
-         <xsl:apply-templates select="." mode="rawUrl"/>
-       </xsl:variable>
-            <xsl:if test="contains($uriWithFrag,'#')">
-                <xsl:value-of select="substring-before($uriWithFrag,'#')"/>
-                
-            </xsl:if>
-            <xsl:if test="not(contains($uriWithFrag,'#'))">
-                <xsl:value-of select="$uriWithFrag"/>
-            </xsl:if>
-     </xsl:template>
-    
-     
-     <xsl:template match="spec[@fragment or @section]|also[@fragment or @section]" mode="javadoc-spec-list">
-          <xsl:text>&lt;a href="#ref-</xsl:text>
-          <xsl:value-of select="@ref"/>
-          <xsl:text>">[</xsl:text>
-          <xsl:value-of select="@ref"/>
-          <xsl:text>]&lt;/a> (see </xsl:text>
-          <xsl:apply-templates select="." mode="javadoc-link"/>
-          <xsl:text>)</xsl:text>
-          <xsl:if test="not(position()=last())">, </xsl:if>
-    </xsl:template>
-    
-     <xsl:template match="spec|also" mode="javadoc-spec-list">
-          <xsl:text>&lt;a href="#ref-</xsl:text>
-          <xsl:value-of select="@ref"/>
-          <xsl:text>">[</xsl:text>
-          <xsl:value-of select="@ref"/>
-          <xsl:text>]&lt;/a></xsl:text>
-          <xsl:if test="not(position()=last())">, </xsl:if>
-    </xsl:template>
-    <xsl:template match="violation[name/text()='PROHIBITED_COMPONENT_PRESENT']" mode="require-prohibit">
-          <xsl:apply-templates select="//prohibit" mode="require-prohibit"/>                       
-    </xsl:template>
-    <xsl:template match="violation[name/text()='REQUIRED_COMPONENT_MISSING']" mode="require-prohibit">
-          <xsl:apply-templates select="//require" mode="require-prohibit"/>                       
-    </xsl:template>
-     <xsl:template match="violation[name/text()='PROHIBITED_COMPONENT_PRESENT' 
-                                 or name/text()='REQUIRED_COMPONENT_MISSING']" mode="static" priority="10">
-            new ViolationCodeInfo(
-                <xsl:value-of select= "name"/>,
-                "<xsl:value-of select= "name"/>",
-                "<xsl:apply-templates select="description" mode="java-string"/>",
-                "<xsl:apply-templates select="description" mode="java-html-string"/>",
-                0<xsl:apply-templates select="(should|minting|must|dns|security)" mode="force"/>,
-                new InSpec[]{
-                  <xsl:apply-templates select="." mode="require-prohibit"/>
-                },
-                new String[]{
-                  <xsl:apply-templates select="bad" mode="static"/>
-                },
-                
-                new String[]{
-                  <xsl:apply-templates select="good" mode="static"/>
-                },
-                <xsl:if test="unimplemented">true||</xsl:if>
-                false
-            );
-    </xsl:template>
-       
-    <xsl:template match="violation[description]" mode="static" priority="1">
-            new ViolationCodeInfo(
-                <xsl:value-of select= "name"/>,
-                "<xsl:value-of select= "name"/>",
-                "<xsl:apply-templates select="description" mode="java-string"/>",
-                "<xsl:apply-templates select="description" mode="java-html-string"/>",
-                0<xsl:apply-templates select="(should|minting|must|dns|security)" mode="force"/>,
-                new InSpec[]{
-                  <xsl:apply-templates select="(spec|also)" mode="static"/>
-                },
-                new String[]{
-                  <xsl:apply-templates select="bad" mode="static"/>
-                },
-                
-                new String[]{
-                  <xsl:apply-templates select="good" mode="static"/>
-                },
-                <xsl:if test="unimplemented">true||</xsl:if>
-                false
-            );
-    </xsl:template>
-    
-     <xsl:template match="scheme" mode="static">
-     spec =
-       new SchemeSpecification(
-                "<xsl:value-of select= "@id"/>",
-                "<xsl:value-of select= "@rfc"/>",
-                "<xsl:apply-templates select="." mode="url"/>",
-                "<xsl:call-template name="escape-java-string">
-            <xsl:with-param name="t" select="normalize-space(name)"/>
-                  </xsl:call-template>",
-                "<xsl:value-of select="@section"/>",
-                
-                new String[]{
-                  <xsl:apply-templates select="bad" mode="static"/>
-                },
-                
-                new String[]{
-                  <xsl:apply-templates select="good" mode="static"/>
-                }
-            );
-            
-            <xsl:apply-templates select="*[not(self::good or self::bad)]" mode="static"/>
-    </xsl:template>
-    
-    <xsl:template match="specification" mode="static">
-     spec =
-       new Specification(
-                "<xsl:value-of select= "@id"/>",
-                "<xsl:value-of select= "@type"/>",
-                "<xsl:value-of select= "@rfc"/>",
-                "<xsl:apply-templates select="." mode="url"/>",
-                "<xsl:call-template name="escape-java-string">
-            <xsl:with-param name="t" select="normalize-space(name)"/>
-                  </xsl:call-template>",
-                "<xsl:call-template name="escape-java-string">
-            <xsl:with-param name="t" select="normalize-space(section)"/>
-                  </xsl:call-template>",
-                  
-                new String[]{
-                  <xsl:apply-templates select="bad" mode="static"/>
-                },
-                
-                new String[]{
-                  <xsl:apply-templates select="good" mode="static"/>
-                }
-            );
-            <xsl:apply-templates select="*[not(self::good or self::bad)]" mode="static"/>
-    </xsl:template>
-    
-    <xsl:template match="defn" mode="static" >
-        spec
-        <xsl:text>.addDefinition(
-                "</xsl:text>
-        <xsl:apply-templates select="." mode="url"/>
-        <xsl:text>",    
-                "</xsl:text>
-        <xsl:apply-templates select="node()" mode="java-string"/>
-        <xsl:text>",    
-                "</xsl:text>
-        <xsl:apply-templates select="node()" mode="java-html-string"/>
-        <xsl:text>"</xsl:text>
-        );
-    </xsl:template>
-    
-    <xsl:template match="name" mode="static" />
-    
-    <xsl:template match="todo" mode="static" />
-    
-    <xsl:template match="section" mode="static" />
-    
-    <xsl:template match="complete" mode="static" />
-    
-    <xsl:template match="dns" mode="static" >
-        spec.setDNS(true);
-    </xsl:template>
-    
-    
-    <xsl:template match="port" mode="static" >
-        spec.port(<xsl:value-of select="."/>);
-    </xsl:template>
-    
-    
-    <xsl:template match="pattern" mode="static" >
-      <xsl:if test="text()">
-        spec.setPattern(<xsl:value-of select="@component"/>,
-                "<xsl:call-template name="escape-java-string">
-            <xsl:with-param name="t" select="text()"/>
-                  </xsl:call-template>" );
-      </xsl:if>
-      <xsl:if test="@reserved">
-        spec.setReserved(<xsl:value-of select="@component"/>,"<xsl:value-of select="@reserved"/>");
-      </xsl:if>
-    </xsl:template>
-    
-    
-    <xsl:template match="prohibit|require" mode="static" >
-        spec.<xsl:value-of select="name()"/>(
-              IRIComponents.<xsl:value-of select="@component"/>
-        );
-    </xsl:template>
-    
-    <xsl:template match="violation" mode="static">
-            new ViolationCodeInfo(
-                <xsl:value-of select= "name"/>,
-                "<xsl:value-of select= "name"/>",
-                new String[]{
-                  <xsl:apply-templates select="bad" mode="static"/>
-                },
-                new String[]{
-                  <xsl:apply-templates select="good" mode="static"/>
-                },
-                <xsl:if test="internal">true||</xsl:if>
-                false
-            );
-    </xsl:template>
-    
-    <!--
-    <xsl:template match="spec[text/@component]" mode="static">
-       <xsl:apply-templates select="text" mode="static"/>
-    </xsl:template>
-    -->
-    
-    <xsl:template match="spec" mode="static">
-      <xsl:apply-templates select="text" mode="static"/>
-    </xsl:template>
-    
-    
-    
-    
-    <xsl:template match="require[not(text)]|prohibit[not(text)]" mode="require-prohibit">
-       new FromSpec_<xsl:value-of select= "../@type"/>(
-                "<xsl:value-of select="../@id"/>", 
-                <xsl:value-of select="@component"/>,
-                "<xsl:apply-templates select="." mode="url"/>"
-            ),
-    </xsl:template>
-    <xsl:template match="require[text]|prohibit[text]" mode="require-prohibit">
-       <xsl:apply-templates select="text" mode="require-prohibit"/>
-    </xsl:template>
-    
-    <xsl:template match="require/text|prohibit/text" mode="require-prohibit">
-       new FromSpec_<xsl:value-of select= "../../@type"/>(
-                "<xsl:value-of select="../../@id"/>", 
-                <xsl:value-of select="../@component"/>,
-                "<xsl:apply-templates select="." mode="url"/>",
-                "<xsl:apply-templates select="." mode="java-string"/>",
-                "<xsl:apply-templates select="." mode="java-html-string"/>"
-            ),
-    </xsl:template>
-    
-    
-    <xsl:template match="text" mode="static">
-       new FromSpec_<xsl:value-of select= "id(../@ref)/@type"/>(
-                "<xsl:value-of select="../@ref"/>", 
-                <xsl:if test="@component">
-                  <xsl:value-of select="@component"/>
-                </xsl:if>
-                <xsl:if test="not(@component)">
-                  <xsl:text>-1</xsl:text>
-                </xsl:if>
-                <xsl:text>,</xsl:text>
-                "<xsl:apply-templates select="." mode="url"/>",
-                "<xsl:apply-templates select="." mode="java-string"/>",
-                "<xsl:apply-templates select="." mode="java-html-string"/>"
-            ),
-    </xsl:template>
-    
-            
-    
-    <xsl:template match="also" mode="static">
-            new FromAlso(
-                "<xsl:value-of select= "@ref"/>",
-                "<xsl:apply-templates select="." mode="url"/>"
-            ),
-    </xsl:template>
-    
-    
-                      
-    <xsl:template match="*" mode="force">
-      <xsl:text>|Force.</xsl:text>
-      <xsl:value-of select="name(.)"/>
-    </xsl:template>
-    
-    
-    <xsl:template match="description|text" mode="java-string">
-       <xsl:apply-templates select="node()" mode="java-string"/>
-     </xsl:template>
-     
-     <!-- normalize space, and replace any \ by \\ -->
-    <xsl:template match="text()" mode="java-string">
-       <xsl:call-template name="escape-java-string">
-         <xsl:with-param name="t" select="normalize-space(.)"/>
-       </xsl:call-template>
-     </xsl:template>
-     
-     <xsl:template match="text()" mode="java-string-not-normalized">
-       <xsl:call-template name="escape-java-string">
-         <xsl:with-param name="t" select="."/>
-       </xsl:call-template>
-     </xsl:template>
-     <xsl:template match="unicode" mode="java-string-not-normalized">
-       <xsl:apply-templates select="." mode="java-string"/>
-     </xsl:template>
-     
-     <xsl:template name="translate">
-        <xsl:param name="string"/>
-        <xsl:param name="rules"/>
-        <xsl:if test="$rules=''">
-          <xsl:value-of select="$string"/>
-        </xsl:if>
-        <xsl:if test="not($rules='')">
-           <xsl:variable name="search" select="substring-before($rules,';')"/>
-           <xsl:variable name="replace" select="substring-after(substring-before($rules,':'),';')" />
-           <xsl:variable name="rules-tail" select="substring-after($rules,':')"/>
-           
-           <xsl:if test="not(contains($string,$search))">
-                <xsl:call-template name="translate">
-                     <xsl:with-param name="string" select="$string"/>
-                     <xsl:with-param name="rules" select="$rules-tail"/>
-                </xsl:call-template>
-           </xsl:if>
-           
-           <xsl:if test="contains($string,$search)">
-                <xsl:call-template name="translate">
-                     <xsl:with-param name="string" select="substring-before($string,$search)"/>
-                     <xsl:with-param name="rules" select="$rules-tail"/>
-                </xsl:call-template>
-                <xsl:value-of select="$replace"/>
-                <xsl:call-template name="translate">
-                     <xsl:with-param name="string" select="substring-after($string,$search)"/>
-                     <xsl:with-param name="rules" select="$rules"/>
-                </xsl:call-template>
-           </xsl:if>
-        </xsl:if>
-     
-     </xsl:template>
-     
-     <xsl:variable name="java-string-rules">";\":&#x2028;;\n"+
-    ":\;\\:</xsl:variable>
-    
-     <xsl:variable name="java-html-string-rules">";\":&#x2028;;\n"+
-    ":\;\\:&lt;;&amp;lt;:</xsl:variable>
-    
-     <xsl:template name="escape-java-string">
-      <xsl:param name="t"/>
-                <xsl:call-template name="translate">
-                     <xsl:with-param name="string" select="$t"/>
-                     <xsl:with-param name="rules" select="$java-string-rules"/>
-                </xsl:call-template>
-     </xsl:template>
-     
-     
-     <xsl:template name="escape-java-html-string">
-      <xsl:param name="t"/>
-                <xsl:call-template name="translate">
-                     <xsl:with-param name="string" select="$t"/>
-                     <xsl:with-param name="rules" select="$java-html-string-rules"/>
-                </xsl:call-template>
-     </xsl:template>
-     
-<!--    2028; LINE SEPARATOR -->
-    <xsl:template match="pre" mode="java-string">
-       <xsl:text>"+
-  "</xsl:text>
-          <xsl:call-template name="escape-java-string">
-            <xsl:with-param name="t" select="translate(text(),'&#xA;','&#x2028;')"/>
-          </xsl:call-template>
-    </xsl:template>
-    
-    <xsl:template match="ol|ul" mode="java-string">
-      <xsl:apply-templates select="li"  mode="java-string"/>
-      <xsl:text> </xsl:text>
-    </xsl:template>
-    
-    
-    <xsl:template match="li" mode="java-string">
-      <xsl:text> (</xsl:text>
-      <xsl:value-of select="count(self|preceding-sibling::li)"/>
-      <xsl:text>)</xsl:text>
-      <xsl:apply-templates select="node()" mode="java-string"/>
-    </xsl:template>
-    
-    <xsl:template match="em" mode="java-string">
-     <xsl:text> *</xsl:text>
-     <xsl:apply-templates select="node()" mode="java-string"/>
-     <xsl:text>* </xsl:text>
-    </xsl:template>
-    
-    <xsl:template match="bad|good" mode="static">
-      "<xsl:apply-templates select="node()" mode="java-string-not-normalized"/>",
-    </xsl:template>
-    
-    <xsl:template match="unicode[text()='000A']" mode="java-string">
-      <xsl:text>\n</xsl:text>
-    </xsl:template>
-    
-    <xsl:template match="unicode[text()='000D']" mode="java-string">
-      <xsl:text>\r</xsl:text>
-    </xsl:template>
-    
-    <xsl:template match="unicode" mode="java-string">
-      <xsl:text>\u</xsl:text>
-      <xsl:value-of select="text()"/>
-    </xsl:template>
-    
-    
-    <xsl:template match="description|text" mode="java-html-string">
-       <xsl:text>&lt;p></xsl:text>
-       <xsl:apply-templates select="node()" mode="java-html-string"/>
-       <xsl:text>&lt;/p></xsl:text>
-     </xsl:template>
-     
-    <xsl:template match="text()" mode="java-html-string">
-       <xsl:call-template name="escape-java-html-string">
-         <xsl:with-param name="t" select="normalize-space(.)"/>
-       </xsl:call-template>
-     </xsl:template>
-    
-    <xsl:template match="ol|ul" mode="java-html-string">
-     <xsl:text>"+
-     "&lt;/p>&lt;</xsl:text>
-     <xsl:value-of select="name(.)"/>
-     <xsl:text>&gt;</xsl:text>
-      <xsl:apply-templates select="li"  mode="java-html-string"/>
-       <xsl:text>&lt;/</xsl:text>
-     <xsl:value-of select="name(.)"/>
-     <xsl:text>&gt;"+
-     "&lt;p></xsl:text>
-    </xsl:template>
-    
-    
-    
-    <xsl:template match="pre" mode="java-html-string">
-     <xsl:text>"+
-     "&lt;/p>&lt;</xsl:text>
-     <xsl:value-of select="name(.)"/>
-     <xsl:text>&gt;</xsl:text>
-       <xsl:call-template name="escape-java-html-string">
-         <xsl:with-param name="t" select="translate(text(),'&#xA;','&#x2028;')"/>
-       </xsl:call-template>
-     <xsl:text>&lt;/</xsl:text>
-     <xsl:value-of select="name(.)"/>
-     <xsl:text>&gt;"+
-     "&lt;p></xsl:text>
-    </xsl:template>
-    
-    <xsl:template match="em|li" mode="java-html-string">
-     <xsl:text>"+
-     " &lt;</xsl:text>
-     <xsl:value-of select="name(.)"/>
-     <xsl:text>&gt;</xsl:text>
-     <xsl:apply-templates select="node()" mode="java-html-string"/>
-     <xsl:text>&lt;/</xsl:text>
-     <xsl:value-of select="name(.)"/>
-     <xsl:text>&gt; "+
-     "</xsl:text>
-    </xsl:template>
-    
-</xsl:stylesheet>

http://git-wip-us.apache.org/repos/asf/jena/blob/40ededc3/jena-iri/src/main/java/org/apache/jena/iri/impl/violations.dtd
----------------------------------------------------------------------
diff --git a/jena-iri/src/main/java/org/apache/jena/iri/impl/violations.dtd b/jena-iri/src/main/java/org/apache/jena/iri/impl/violations.dtd
deleted file mode 100644
index 2a3cde9..0000000
--- a/jena-iri/src/main/java/org/apache/jena/iri/impl/violations.dtd
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
-  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
--->
-
-<!--
-    TODO define vocabulary indentification
-    PUBLIC ID: -//vendor//vocabulary//EN
-    SYSTEM ID: http://server/path/violations.dtd
-
---><!--
-    An example how to use this DTD from your XML document:
-
-    <?xml version="1.0"?>
-
-    <!DOCTYPE violations SYSTEM "violations.dtd">
-
-    <violations>
-    ...
-    </violations>
--->
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT violations (specification*, scheme*, violation*)>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT specification (name, section?,  prohibit*, require*,  (good|bad)*, todo*)>
-<!ATTLIST specification
-    href CDATA #IMPLIED
-    rfc CDATA #IMPLIED
-    type (iri|other) "iri"
-    section CDATA #IMPLIED
-    id ID #REQUIRED
-  >
-  
-<!ELEMENT scheme (name,  defn*, complete?, dns?, port?, prohibit*, require*, pattern*, (good|bad)*, todo*)>
-<!ATTLIST scheme
-    href CDATA #IMPLIED
-    rfc CDATA #IMPLIED
-    type (scheme) "scheme"
-    section CDATA #IMPLIED
-    id ID #REQUIRED
-  >
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT name (#PCDATA)>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT section (#PCDATA)>
-
-<!ELEMENT pattern (#PCDATA)>
-<!ATTLIST pattern
-    component (PATH|QUERY|PATHQUERY) #REQUIRED
-    reserved CDATA #IMPLIED
-  >
-
-<!ELEMENT todo (#PCDATA)>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT violation (name, 
-      (internal|
-         (unimplemented?,
-         (should|minting|must)?,
-         dns?,
-         security?,
-         description,
-         (spec|also|comment|see)*))?, 
-         (good|bad)*)>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT description (#PCDATA)>
-
-<!--- Put your DTDDoc comment here.
-  The spec element shows that the violation is defined in a particular
-  specification. 
-  The included text elements give  text from the specification to be included in 
-  documentation and error messages.
-  Each text may include a section or a fragment.
-  Each text may include a component to narrowly scope the text.
-  If there is more than one text then:
-     all are included in the documentation
-  and either:
-     all have a different component and the text applies to that component only.
-     or
-     none have a component and the first text is used in any error message
- -->
-<!ELEMENT spec (text+)>
-<!ATTLIST spec
-    ref IDREF #REQUIRED
-  >
-
-<!--- The also element 
-   If the also element has a preceding spec element
-   then it increases the scope of that spec to include the referenced specification.
-   In this case there may not be a fragment or section.
-   
-   If there is no preceding spec element, then this element
-   shows that the violation does apply to the referenced specification,
-   even though no text is offered.
-   In this case, the section or ref attributes may be used to give more
-   information, or if not, the section or ref attributes of a preceeding
-   also element.
--->
-<!ELEMENT also EMPTY>
-<!ATTLIST also
-    fragment CDATA #IMPLIED
-    section CDATA #IMPLIED
-    ref IDREF #REQUIRED
-  >
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT bad (#PCDATA|unicode)*>
-<!ELEMENT good (#PCDATA|unicode)*>
-
-
-
-<!ELEMENT defn (#PCDATA|ol|pre|em|ul)*>
-<!ATTLIST defn
-    ref CDATA #IMPLIED
-    section CDATA #IMPLIED
-  >
-
-<!ELEMENT complete EMPTY>
-
-<!ELEMENT port (#PCDATA)>
-
-<!ELEMENT prohibit (text*)>
-<!ATTLIST prohibit
-    fragment CDATA #IMPLIED
-    section CDATA #IMPLIED
-    component (HOST|SCHEME|FRAGMENT|AUTHORITY|PORT|USER|QUERY|PATH) #REQUIRED
-  >
-
-<!ELEMENT require (text*)>
-<!ATTLIST require
-    fragment CDATA #IMPLIED
-    section CDATA #IMPLIED
-    component (HOST|SCHEME|FRAGMENT|AUTHORITY|PORT|USER|QUERY|PATH) #REQUIRED
-  >
-
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT text (#PCDATA|ol|pre|em|ul)*>
-<!ATTLIST text
-    component CDATA #IMPLIED
-    fragment CDATA #IMPLIED
-    section CDATA #IMPLIED
-  >
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT em (#PCDATA)>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT minting EMPTY>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT unimplemented EMPTY>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT comment (#PCDATA)>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT see (#PCDATA)>
-
-
-<!ELEMENT unicode (#PCDATA)>
-
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT security EMPTY>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT pre (#PCDATA)>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT internal EMPTY>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT dns EMPTY>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT must EMPTY>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT should EMPTY>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT ol (li)*>
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT ul (li)*>
-
-<!--- Put your DTDDoc comment here. -->
-<!ELEMENT li (#PCDATA)>